Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 4d1e111

Browse files
Java:MultiDataSource 新增为 CVAuto 导出 COCO 检测、分类、OCR 等格式的训练集
1 parent 7123ef0 commit 4d1e111

File tree

2 files changed

+838
-0
lines changed

2 files changed

+838
-0
lines changed
Lines changed: 354 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,354 @@
1+
package apijson;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.fasterxml.jackson.databind.node.ArrayNode;
5+
import com.fasterxml.jackson.databind.node.ObjectNode;
6+
7+
import java.io.File;
8+
import java.io.FileWriter;
9+
import java.io.IOException;
10+
import java.util.Arrays;
11+
12+
public class CocoExporter {
13+
14+
public static void main(String[] args) throws Exception {
15+
CocoExporter exporter = new CocoExporter();
16+
17+
exporter.exportDetection("annotations/detection_train.json");
18+
exporter.exportClassification("annotations/classification_train.json");
19+
exporter.exportSegmentation("annotations/segmentation_train.json");
20+
exporter.exportKeypoints("annotations/keypoints_train.json");
21+
exporter.exportFaceKeypoints("annotations/face_keypoints_train.json");
22+
exporter.exportRotated("annotations/rotated_train.txt", true);
23+
exporter.exportRotated("annotations/rotated_train.json", false);
24+
exporter.exportOCR("annotations/ocr_train.txt", true);
25+
exporter.exportOCR("annotations/ocr_train.json", false);
26+
}
27+
28+
private final ObjectMapper mapper = new ObjectMapper();
29+
30+
/**
31+
* Detection
32+
*/
33+
public void exportDetection(String outFile) throws IOException {
34+
ObjectNode root = mapper.createObjectNode();
35+
36+
ArrayNode images = mapper.createArrayNode();
37+
ObjectNode img = mapper.createObjectNode();
38+
img.put("id", 1);
39+
img.put("file_name", "0001.jpg");
40+
img.put("height", 480);
41+
img.put("width", 640);
42+
images.add(img);
43+
44+
ArrayNode annos = mapper.createArrayNode();
45+
ObjectNode anno = mapper.createObjectNode();
46+
anno.put("id", 1);
47+
anno.put("image_id", 1);
48+
anno.put("category_id", 1);
49+
anno.putArray("bbox").addAll(Arrays.asList(
50+
mapper.getNodeFactory().numberNode(100),
51+
mapper.getNodeFactory().numberNode(150),
52+
mapper.getNodeFactory().numberNode(200),
53+
mapper.getNodeFactory().numberNode(100)
54+
));
55+
anno.put("area", 20000);
56+
anno.put("iscrowd", 0);
57+
annos.add(anno);
58+
59+
ArrayNode cats = mapper.createArrayNode();
60+
ObjectNode cat = mapper.createObjectNode();
61+
cat.put("id", 1);
62+
cat.put("name", "car");
63+
cat.put("supercategory", "vehicle");
64+
cats.add(cat);
65+
66+
root.set("images", images);
67+
root.set("annotations", annos);
68+
root.set("categories", cats);
69+
70+
mapper.writerWithDefaultPrettyPrinter().writeValue(new File(outFile), root);
71+
}
72+
73+
/**
74+
* Classification
75+
*/
76+
public void exportClassification(String outFile) throws IOException {
77+
ObjectNode root = mapper.createObjectNode();
78+
79+
ArrayNode images = mapper.createArrayNode();
80+
ObjectNode img = mapper.createObjectNode();
81+
img.put("id", 1);
82+
img.put("file_name", "0001.jpg");
83+
images.add(img);
84+
85+
ArrayNode annos = mapper.createArrayNode();
86+
ObjectNode anno = mapper.createObjectNode();
87+
anno.put("image_id", 1);
88+
anno.put("category_id", 1);
89+
annos.add(anno);
90+
91+
ArrayNode cats = mapper.createArrayNode();
92+
ObjectNode cat = mapper.createObjectNode();
93+
cat.put("id", 1);
94+
cat.put("name", "dog");
95+
cats.add(cat);
96+
97+
root.set("images", images);
98+
root.set("annotations", annos);
99+
root.set("categories", cats);
100+
101+
mapper.writerWithDefaultPrettyPrinter().writeValue(new File(outFile), root);
102+
}
103+
104+
/**
105+
* Segmentation
106+
*/
107+
public void exportSegmentation(String outFile) throws IOException {
108+
ObjectNode root = mapper.createObjectNode();
109+
110+
ArrayNode images = mapper.createArrayNode();
111+
ObjectNode img = mapper.createObjectNode();
112+
img.put("id", 1);
113+
img.put("file_name", "0001.jpg");
114+
img.put("height", 480);
115+
img.put("width", 640);
116+
images.add(img);
117+
118+
ArrayNode annos = mapper.createArrayNode();
119+
ObjectNode anno = mapper.createObjectNode();
120+
anno.put("id", 1);
121+
anno.put("image_id", 1);
122+
anno.put("category_id", 1);
123+
anno.putArray("segmentation").addArray().addAll(Arrays.asList(
124+
mapper.getNodeFactory().numberNode(100),
125+
mapper.getNodeFactory().numberNode(150),
126+
mapper.getNodeFactory().numberNode(300),
127+
mapper.getNodeFactory().numberNode(150),
128+
mapper.getNodeFactory().numberNode(300),
129+
mapper.getNodeFactory().numberNode(250),
130+
mapper.getNodeFactory().numberNode(100),
131+
mapper.getNodeFactory().numberNode(250)
132+
));
133+
anno.putArray("bbox").addAll(Arrays.asList(
134+
mapper.getNodeFactory().numberNode(100),
135+
mapper.getNodeFactory().numberNode(150),
136+
mapper.getNodeFactory().numberNode(200),
137+
mapper.getNodeFactory().numberNode(100)
138+
));
139+
anno.put("area", 20000);
140+
anno.put("iscrowd", 0);
141+
annos.add(anno);
142+
143+
ArrayNode cats = mapper.createArrayNode();
144+
ObjectNode cat = mapper.createObjectNode();
145+
cat.put("id", 1);
146+
cat.put("name", "car");
147+
cats.add(cat);
148+
149+
root.set("images", images);
150+
root.set("annotations", annos);
151+
root.set("categories", cats);
152+
153+
mapper.writerWithDefaultPrettyPrinter().writeValue(new File(outFile), root);
154+
}
155+
156+
/**
157+
* Pose Keypoints
158+
*/
159+
public void exportKeypoints(String outFile) throws IOException {
160+
ObjectNode root = mapper.createObjectNode();
161+
162+
ArrayNode images = mapper.createArrayNode();
163+
ObjectNode img = mapper.createObjectNode();
164+
img.put("id", 1);
165+
img.put("file_name", "0001.jpg");
166+
img.put("height", 480);
167+
img.put("width", 640);
168+
images.add(img);
169+
170+
ArrayNode annos = mapper.createArrayNode();
171+
ObjectNode anno = mapper.createObjectNode();
172+
anno.put("id", 1);
173+
anno.put("image_id", 1);
174+
anno.put("category_id", 1);
175+
anno.putArray("bbox").addAll(Arrays.asList(
176+
mapper.getNodeFactory().numberNode(100),
177+
mapper.getNodeFactory().numberNode(150),
178+
mapper.getNodeFactory().numberNode(200),
179+
mapper.getNodeFactory().numberNode(400)
180+
));
181+
anno.put("num_keypoints", 17);
182+
ArrayNode keypoints = anno.putArray("keypoints");
183+
// 简化示例:只放前3个点
184+
keypoints.addAll(Arrays.asList(
185+
mapper.getNodeFactory().numberNode(120), mapper.getNodeFactory().numberNode(200), mapper.getNodeFactory().numberNode(2),
186+
mapper.getNodeFactory().numberNode(150), mapper.getNodeFactory().numberNode(210), mapper.getNodeFactory().numberNode(2),
187+
mapper.getNodeFactory().numberNode(180), mapper.getNodeFactory().numberNode(250), mapper.getNodeFactory().numberNode(2)
188+
));
189+
annos.add(anno);
190+
191+
ArrayNode cats = mapper.createArrayNode();
192+
ObjectNode cat = mapper.createObjectNode();
193+
cat.put("id", 1);
194+
cat.put("name", "person");
195+
cat.putArray("keypoints").addAll(Arrays.asList(
196+
mapper.getNodeFactory().textNode("nose"),
197+
mapper.getNodeFactory().textNode("left_eye"),
198+
mapper.getNodeFactory().textNode("right_eye")
199+
));
200+
cats.add(cat);
201+
202+
root.set("images", images);
203+
root.set("annotations", annos);
204+
root.set("categories", cats);
205+
206+
mapper.writerWithDefaultPrettyPrinter().writeValue(new File(outFile), root);
207+
}
208+
209+
/**
210+
* Face Keypoints (68 点)
211+
*/
212+
public void exportFaceKeypoints(String outFile) throws IOException {
213+
ObjectNode root = mapper.createObjectNode();
214+
215+
ArrayNode images = mapper.createArrayNode();
216+
ObjectNode img = mapper.createObjectNode();
217+
img.put("id", 1);
218+
img.put("file_name", "0001.jpg");
219+
images.add(img);
220+
221+
ArrayNode annos = mapper.createArrayNode();
222+
ObjectNode anno = mapper.createObjectNode();
223+
anno.put("id", 1);
224+
anno.put("image_id", 1);
225+
anno.put("category_id", 1);
226+
anno.putArray("bbox").addAll(Arrays.asList(
227+
mapper.getNodeFactory().numberNode(120),
228+
mapper.getNodeFactory().numberNode(150),
229+
mapper.getNodeFactory().numberNode(200),
230+
mapper.getNodeFactory().numberNode(200)
231+
));
232+
anno.put("num_keypoints", 68);
233+
ArrayNode kps = anno.putArray("keypoints");
234+
for (int i = 1; i <= 68; i++) {
235+
kps.addAll(Arrays.asList(
236+
mapper.getNodeFactory().numberNode(100 + i),
237+
mapper.getNodeFactory().numberNode(150 + i),
238+
mapper.getNodeFactory().numberNode(2)
239+
));
240+
}
241+
annos.add(anno);
242+
243+
ArrayNode cats = mapper.createArrayNode();
244+
ObjectNode cat = mapper.createObjectNode();
245+
cat.put("id", 1);
246+
cat.put("name", "face");
247+
ArrayNode kpNames = cat.putArray("keypoints");
248+
for (int i = 1; i <= 68; i++) {
249+
kpNames.add("p" + i);
250+
}
251+
cats.add(cat);
252+
253+
root.set("images", images);
254+
root.set("annotations", annos);
255+
root.set("categories", cats);
256+
257+
mapper.writerWithDefaultPrettyPrinter().writeValue(new File(outFile), root);
258+
}
259+
260+
/**
261+
* Rotated Detection
262+
*/
263+
public void exportRotated(String outFile, boolean txtFormat) throws IOException {
264+
if (txtFormat) {
265+
try (FileWriter writer = new FileWriter(outFile)) {
266+
writer.write("320 240 200 100 30 1\n");
267+
}
268+
} else {
269+
ObjectNode root = mapper.createObjectNode();
270+
ArrayNode images = mapper.createArrayNode();
271+
ObjectNode img = mapper.createObjectNode();
272+
img.put("id", 1);
273+
img.put("file_name", "0001.jpg");
274+
images.add(img);
275+
276+
ArrayNode annos = mapper.createArrayNode();
277+
ObjectNode anno = mapper.createObjectNode();
278+
anno.put("id", 1);
279+
anno.put("image_id", 1);
280+
anno.put("category_id", 1);
281+
anno.putArray("bbox").addAll(Arrays.asList(
282+
mapper.getNodeFactory().numberNode(320),
283+
mapper.getNodeFactory().numberNode(240),
284+
mapper.getNodeFactory().numberNode(200),
285+
mapper.getNodeFactory().numberNode(100),
286+
mapper.getNodeFactory().numberNode(30)
287+
));
288+
annos.add(anno);
289+
290+
ArrayNode cats = mapper.createArrayNode();
291+
ObjectNode cat = mapper.createObjectNode();
292+
cat.put("id", 1);
293+
cat.put("name", "plane");
294+
cats.add(cat);
295+
296+
root.set("images", images);
297+
root.set("annotations", annos);
298+
root.set("categories", cats);
299+
300+
mapper.writerWithDefaultPrettyPrinter().writeValue(new File(outFile), root);
301+
}
302+
}
303+
304+
/**
305+
* OCR
306+
*/
307+
public void exportOCR(String outFile, boolean txtFormat) throws IOException {
308+
if (txtFormat) {
309+
try (FileWriter writer = new FileWriter(outFile)) {
310+
writer.write("100,200,220,200,220,240,100,240,Hello\n");
311+
writer.write("50,100,150,100,150,130,50,130,World\n");
312+
}
313+
} else {
314+
ObjectNode root = mapper.createObjectNode();
315+
ArrayNode images = mapper.createArrayNode();
316+
ObjectNode img = mapper.createObjectNode();
317+
img.put("id", 1);
318+
img.put("file_name", "0001.jpg");
319+
images.add(img);
320+
321+
ArrayNode annos = mapper.createArrayNode();
322+
ObjectNode anno = mapper.createObjectNode();
323+
anno.put("id", 1);
324+
anno.put("image_id", 1);
325+
anno.putArray("bbox").addAll(Arrays.asList(
326+
mapper.getNodeFactory().numberNode(100),
327+
mapper.getNodeFactory().numberNode(200),
328+
mapper.getNodeFactory().numberNode(120),
329+
mapper.getNodeFactory().numberNode(40)
330+
));
331+
anno.putArray("segmentation").addArray().addAll(Arrays.asList(
332+
mapper.getNodeFactory().numberNode(100),
333+
mapper.getNodeFactory().numberNode(200),
334+
mapper.getNodeFactory().numberNode(220),
335+
mapper.getNodeFactory().numberNode(200),
336+
mapper.getNodeFactory().numberNode(220),
337+
mapper.getNodeFactory().numberNode(240),
338+
mapper.getNodeFactory().numberNode(100),
339+
mapper.getNodeFactory().numberNode(240)
340+
));
341+
anno.put("text", "Hello");
342+
anno.put("language", "en");
343+
anno.put("legibility", "legible");
344+
annos.add(anno);
345+
346+
root.set("images", images);
347+
root.set("annotations", annos);
348+
349+
mapper.writerWithDefaultPrettyPrinter().writeValue(new File(outFile), root);
350+
}
351+
}
352+
353+
354+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /