Export Result Format
When you export labels, a compressed zip file will be created for you to download. This page explains the details of how the export result file created from a single export job is structured and formatted.

Image Project

Folder Directory

1
├── project.json
2
3
├── labels/
4
│ ├── {label-id}.json
5
│ └── ...
6
7
└── meta/
8
├── {dataset-name}/{data-key}.json
9
└── ...
Copied!

Project Settings

  • project.json
1
// Additional auxiliary key, values could be added for different functionalities.
2
// Informations below will contain sufficient informations for utilizing annotations.
3
{
4
// name and version for Image apps (normally you don't have to care about type or versions)
5
"type": "image-siesta",
6
"version": string, // follows semantic versioning
7
8
// data type is image
9
"data_type": "image",
10
11
// categorization settings
12
"categorization": {
13
"properties": [
14
{
15
"id": string, // most IDs are uuid by default
16
"name": string, // property name
17
"type": "radio" | "checkbox" | "free response", // property type
18
"options": [ // options for property
19
{
20
"id": string,
21
"name": string, // option name
22
"children" (optional): same as options // recursive structure for tree-like categories
23
},
24
...
25
]
26
},
27
...
28
]
29
},
30
"object_detection": {
31
"annotation_types": string[], // list of annotation types in this project
32
"object_classes": [
33
{
34
"id": string,
35
"name": string,
36
"color": string,
37
"annotation_type": string,
38
"properties": [
39
{
40
// same as properties in categorization
41
// Consider this as categorization for each objects
42
},
43
...
44
]
45
},
46
...
47
],
48
"object_groups": [
49
{
50
"id": string,
51
"name": string,
52
"object_class_ids": string[] // ID of classes
53
},
54
...
55
],
56
// Definition for keypoint detections
57
"keypoints": [
58
{
59
"id": string,
60
"name": string,
61
"edges": [
62
{
63
// index of points
64
"u": number,
65
"v": number,
66
"color": string
67
},
68
...
69
],
70
"points": [
71
{
72
"name": string,
73
"color": string, // hex string
74
"default_value": {
75
"x": number, // 0 ~ 1
76
"y": number, // 0 ~ 1
77
"state": {
78
"visible": boolean
79
}
80
},
81
"symmetric_idx" (optional): number // matching index for symmetric swap
82
},
83
...
84
],
85
// Suite has 3 states for keypoints
86
// (valid, visible), (valid, invisible), (invalid, invisible)
87
// value below can prevent invisible but valid (labeled with guess) points
88
"allow_valid_invisibles": boolean
89
}
90
]
91
}
92
}
Copied!

Annotations

1
{
2
"categories": {
3
"properties": [
4
{
5
"type": string,
6
"property_id": string,
7
"property_name": string,
8
9
// for free response
10
"value": string,
11
12
// for multiple choice
13
"option_id": string,
14
"option_name": string,
15
16
// for multiple selection
17
"option_ids": string,
18
"option_names": string
19
},
20
...
21
]
22
},
23
"objects": [
24
{
25
"id": string,
26
"class_id": string,
27
"class_name": string,
28
"annotation_type": string,
29
"annotation": {
30
// for bounding boxes
31
"coord": {
32
"x": number,
33
"y": number,
34
"width": number,
35
"height": number
36
},
37
38
// for polygons (all polygons are multipolygon by default)
39
"multiple": true,
40
"""
41
This indicates multi-polygon
42
For multi-polygon coordinate structure
43
Please refer to MultiPolygon section in
44
https://en.wikipedia.org/wiki/GeoJSON#Geometries
45
For more info please check
46
https://github.com/Superb-AI-Suite/spb-example/tree/main/convert-suite-exports
47
"""
48
"coord": {
49
"points": [
50
[
51
[
52
{
53
"x": number,
54
"y": number
55
},
56
...
57
],
58
...
59
],
60
...
61
]
62
},
63
64
// for deprecated single-polygons
65
"coord": {
66
"points": [
67
{
68
"x": number,
69
"y": number
70
},
71
...
72
]
73
},
74
75
// for keypoints
76
"coord": {
77
"points": [
78
{
79
"x": number,
80
"y": number,
81
"state": {
82
"visible": boolean,
83
"valid": boolean
84
}
85
},
86
...
87
]
88
}
89
},
90
"properties": [
91
// same as categories, properties below
92
]
93
},
94
...
95
]
96
}
Copied!

Additional Label Information

1
{
2
"data_key": string,
3
"dataset": string,
4
"label_id": string,
5
"label_path": string[],
6
"last_updated_date": datetime,
7
"tags": string[],
8
"work_assignee": string,
9
"status": "WORKING" | "SUBMITTED" | "SKIPPED"
10
}
Copied!

Image (Deprecated) Project

Folder Directory

When you extract the export result zip file, you will see files and directories in the structure below.
1
├── project.json
2
3
├── labels/
4
│ ├── {label-id}.json
5
│ └── ...
6
7
├── meta/
8
│ ├── {dataset-name}/{data-key}.json
9
│ └── ...
10
11
└── masks/ // (optional)
12
├── classId/
13
│ ├── {class-group}
14
│ │ ├── {label-id}.png
15
│ │ └── ...
16
│ │
17
│ └── ...
18
19
└── instanceId/
Copied!

Project Settings

The project.json file contains information about the current project configurations. This repeats the information entered when creating this project. (See related manual: Create a New Project)
Project JSON File Structure
1
// filename: project.json
2
{
3
"groups": [ // Class Groups
4
{
5
"name": string, // Name of group
6
"info": {
7
"classes": string[] // Name of object classes in this group
8
}
9
}
10
],
11
"objects": [ // Annotation objects
12
{
13
"class_name": string, // Name of object class
14
"class_id": number, // ID of object class
15
"info": {
16
"min": number, // Min/max number of this object class per image
17
"max": number, // (0 means no limit)
18
"shapes": {
19
{shape-type}: { // "box", "polygon", "polyline", "keypoint", etc.
20
"default_value": {
21
"color" : string // Color used to visualize this object class
22
}
23
}
24
},
25
"properties": [
26
{
27
"name": string, // Name of property
28
"type": string, // "objective": Multiple Choice/Selection, "string": Free Response
29
"value": string or string[], // Selected value in Multiple Choice/Selection or text result of Free Response
30
"nullable": boolean, // Whether this property is a required annotation
31
"duplicated": boolean, // False for Multiple Choice type, true for Multiple Selection type
32
"default_value": {
33
"value": string[] // Default response for Multiple Choice/Selection
34
}
35
}
36
]
37
}
38
}
39
],
40
"keypoint_interface": [ // This presents only when keypoint annotation type exists
41
{
42
"id": string, // ID of keypoint
43
"name": string, // Name of keypoint
44
"nodes": [
45
{
46
"v": number, // Visibility value
47
"x": number, // Default relative coordinate x
48
"y": number, // Default relative coordinate y
49
"name": string, // Name of point
50
"color": string, // Color of point
51
"opposite": number // Index of symmetric point
52
}
53
],
54
"edges": [
55
{
56
"to": number, // Index of point
57
"from": number, // Index of other point
58
"color": string // Color of edge
59
}
60
],
61
"point_visibility": [
62
// There are two options to represent keypoint visibility, 2-state and 3-state.
63
// 2-state type
64
{
65
"name": "not labeled",
66
"value": 0 // Visibility value
67
},
68
{
69
"name": "labeled and visible",
70
"value": 1
71
},
72
// or 3-state type
73
{
74
"name": "not labeled",
75
"value": 0
76
},
77
{
78
"name": "labeled but not visible",
79
"value": 1
80
},
81
{
82
"name": "labeled and visible",
83
"value": 2
84
}
85
]
86
}
87
]
88
}
Copied!

Annotations

Under the /labels directory, there are JSON files named after the ID of corresponding labels. Each JSON file contains the annotation information for each label.
Annotation JSON File Structure
1
// filename: {label-id}.json
2
{
3
"result": {
4
"objects": [ // Array of annotations
5
{
6
"id": number, // ID of annotation
7
"class": string, // Class name
8
"shape": {
9
// Each object will be in one of the several shape types.
10
// Type 1: bounding box
11
"box": { // x, y, width, height of bounding box
12
"x": number,
13
"y": number,
14
"width": number,
15
"height": number
16
},
17
// Type 2: polygon
18
"polygon": [ // Array of points in polygon
19
{
20
"x": number,
21
"y": number
22
}
23
],
24
// Type 3: polyline
25
"polyline": [ // Array of points in polyline
26
{
27
"x": number,
28
"y": number
29
}
30
],
31
// Type 4: keypoint
32
"keypoint": [ // Array of points in keypoint
33
{
34
"v": number, // Visibility, see project.json for details
35
"x": number,
36
"y": number
37
}
38
]
39
},
40
"properties" : [ // Array of properties
41
{
42
"name" : string, // Property name
43
"value" : string or string[] // Result value of propery
44
}
45
]
46
}
47
]
48
}
49
}
Copied!

Additional Label Information

Under the /meta directory, there are JSON files named after the dataset and data key of the corresponding labels.
Meta JSON File Structure
1
// filename: {dataset-name}/{data-key}.json
2
{
3
"label_id": string, // ID of corresponding label
4
"label_path": string, // relative path to label JSON
5
"dataset": string, // Name of dataset
6
"data_key": string, // data key (default to file path when uploaded)
7
"last_updated_date": datetime, // Last update time for label
8
"image_info": {
9
"width": number, // Width of image
10
"height": number // Height of image
11
},
12
"masks": {
13
// (Optional) Only when mask images are generated
14
}
15
}
Copied!

Mask Images

Mask image export results are not included in the 'image' project. Create a mask image using the code provided by the site.
Under the /masks directory are bitmap mask images for each label. Within this directory are two subdirectories — /classId, where mask images have pixel values corresponding to the object class reference ID, and /instanceId, where mask images have pixel values corresponding to each object instance reference ID.
Take a look below to see the difference between the two mask images.
Original image with visualized annotations.
Bitmap Mask images using classId pixel values (Semantic Segmentation)
Bitmap Mask images using instanceId pixel values (Instance Segmentation)

Video Project

Folder Directory

1
├── project.json
2
3
├── labels/
4
│ ├── {label-id}.json
5
│ └── ...
6
7
└── meta/
8
├── {dataset-name}/{data-key}.json
9
└── ...
Copied!

Project Settings

  • project.json
1
// Additional auxiliary key, values could be added for different functionalities.
2
// Informations below will contain sufficient informations for utilizing annotations.
3
{
4
// name and version for Video apps (normally you don't have to care about type or versions)
5
"type": "video-siesta",
6
"version": string, // follows semantic versioning
7
8
// We consider video as image sequence
9
"data_type": "image sequence",
10
11
// categorization settings
12
"categorization": {
13
"properties": [
14
{
15
"id": string, // most IDs are uuid by default
16
"name": string, // property name
17
"type": "radio" | "checkbox" | "free response", // property type
18
"options": [ // options for property
19
{
20
"id": string,
21
"name": string, // option name
22
"children" (optional): same as options // recursive structure for tree-like categories
23
},
24
...
25
],
26
"per_frame": boolean // if true, categorize frame by frame
27
},
28
...
29
]
30
},
31
"object_tracking": {
32
"annotation_types": string[],
33
"object_classes": [
34
{
35
"id": string,
36
"name": string,
37
"color": string,
38
"annotation_type": string,
39
"properties": [
40
{
41
// same as properties in categorization
42
// Consider this as categorization for each objects
43
},
44
...
45
]
46
},
47
...
48
],
49
"object_groups": [
50
{
51
"id": string,
52
"name": string,
53
"object_class_ids": string[] // ID of classes
54
},
55
...
56
],
57
"keypoints": [
58
// Exactly same as image keypoint settings
59
...
60
],
61
}
62
}
Copied!

Annotation

1
{
2
"categories": {
3
"properties": [
4
{
5
"type": string,
6
"property_id": string,
7
"property_name": string,
8
9
// for free response
10
"value": string,
11
12
// for multiple choice
13
"option_id": string,
14
"option_name": string,
15
16
// for multiple selection
17
"option_ids": string,
18
"option_names": string
19
},
20
...
21
],
22
"frames": [
23
{
24
"num": number, // zero-based frame index
25
"properties": [
26
// same as properties above
27
]
28
},
29
...
30
]
31
},
32
"objects": [
33
{
34
"id": string,
35
"tracking_id": number, // unique per each objects through the video
36
"class_id": string,
37
"class_name": string,
38
"annotation_type": string,
39
"properties": [
40
// same as categories, properties below
41
// properties with "per_frame": false comes here
42
],
43
"frames": [
44
{
45
"num": number, // zero-based frame index
46
"annotation": {
47
// for bounding boxes
48
"coord": {
49
"x": number,
50
"y": number,
51
"width": number,
52
"height": number
53
},
54
55
// for polygons
56
"coord": {
57
"points": [
58
{
59
"x": number,
60
"y": number
61
},
62
...
63
]
64
},
65
66
// for keypoints
67
"coord": {
68
"points": [
69
{
70
"x": number,
71
"y": number,
72
"state": {
73
"visible": boolean,
74
"valid": boolean
75
}
76
},
77
...
78
]
79
}
80
},
81
"properties": [
82
// same as categories, properties below
83
// properties with "per_frame": true comes here
84
]
85
},
86
...
87
]
88
},
89
...
90
]
91
}
Copied!

Additional Label Information

1
{
2
"data_key": string,
3
"dataset": string,
4
"label_id": string,
5
"label_path": string[],
6
"last_updated_date": datetime,
7
"tags": string[],
8
"work_assignee": string,
9
"status": "WORKING" | "SUBMITTED" | "SKIPPED",
10
"frames": string[] // file name for each frames
11
}
Copied!
Any other questions? E-mail us at [email protected].
Last modified 1mo ago