Box2D is a type of label with a 2D bounding box on an image. It's usually used for object detection task.
Each data can be assigned with multiple Box2D labels.
The structure of one Box2D label is like:
{
"box2d": {
"xmin": <float>
"ymin": <float>
"xmax": <float>
"ymax": <float>
},
"category": <str>
"attributes": {
<key>: <value>
...
...
},
"instance": <str>
}
To create a ~tensorbay.label.label_box.LabeledBox2D
label:
>>> from tensorbay.label import LabeledBox2D >>> box2d_label = LabeledBox2D( ... xmin, ymin, xmax, ymax, ... category="category", ... attributes={"attribute_name": "attribute_value"}, ... instance="instance_ID" ... ) >>> box2d_label LabeledBox2D(xmin, ymin, xmax, ymax)( (category): 'category', (attributes): {...} (instance): 'instance_ID' )
~tensorbay.label.label_box.LabeledBox2D
extends ~tensorbay.geometry.box.Box2D
.
To construct a ~tensorbay.label.label_box.LabeledBox2D
instance with only the geometry information, use the coordinates of the top-left and bottom-right vertexes of the 2D bounding box, or the coordinate of the top-left vertex, the height and the width of the bounding box.
>>> LabeledBox2D(10, 20, 30, 40) LabeledBox2D(10, 20, 30, 40)() >>> LabeledBox2D.from_xywh(x=10, y=20, width=20, height=20) LabeledBox2D(10, 20, 30, 40)()
It contains the basic geometry information of the 2D bounding box.
>>> box2d_label.xmin 10 >>> box2d_label.ymin 20 >>> box2d_label.xmax 30 >>> box2d_label.ymax 40 >>> box2d_label.br Vector2D(30, 40) >>> box2d_label.tl Vector2D(10, 20) >>> box2d_label.area() 400
The category of the object inside the 2D bounding box. See reference/label_format/CommonLabelProperties:category
for details.
Attributes are the additional information about this object, which are stored in key-value pairs. See reference/label_format/CommonLabelProperties:attributes
for details.
Instance is the unique ID for the object inside of the 2D bounding box, which is mostly used for tracking tasks. See reference/label_format/CommonLabelProperties:instance
for details.
Before adding the Box2D labels to data, ~tensorbay.label.label_box.Box2DSubcatalog
should be defined.
~tensorbay.label.label_box.Box2DSubcatalog
has categories, attributes and tracking information, see reference/label_format/CommonSubcatalogProperties:common category information
, reference/label_format/CommonSubcatalogProperties:attributes information
and reference/label_format/CommonSubcatalogProperties:tracking information
for details.
The catalog with only Box2D subcatalog is typically stored in a json file as follows:
{
"BOX2D": { <object>*
"description": <string>! -- Subcatalog description, (default: "").
"isTracking": <boolean>! -- Whether this type of label in the dataset contains tracking
information, (default: false).
"categoryDelimiter": <string> -- The delimiter in category names indicating subcategories.
Recommended delimiter is ".". There is no "categoryDelimiter"
field by default which means the category is of one level.
"categories": [ <array> -- Category list, which contains all category information.
{
"name": <string>* -- Category name.
"description": <string>! -- Category description, (default: "").
},
...
...
],
"attributes": [ <array> -- Attribute list, which contains all attribute information.
{
"name": <string>* -- Attribute name.
"enum": [...], <array> -- All possible options for the attribute.
"type": <string or array> -- Type of the attribute including "boolean", "integer",
"number", "string", "array" and "null". And it is not
required when "enum" is provided.
"minimum": <number> -- Minimum value of the attribute when type is "number".
"maximum": <number> -- Maximum value of the attribute when type is "number".
"items": { <object> -- Used only if the attribute type is "array".
"enum": [...], <array> -- All possible options for elements in the attribute array.
"type": <string or array> -- Type of elements in the attribute array.
"minimum": <number> -- Minimum value of elements in the attribute array when type is
"number".
"maximum": <number> -- Maximum value of elements in the attribute array when type is
"number".
},
"parentCategories": [...], <array> -- Indicates the category to which the attribute belongs. Do not
add this field if it is a global attribute.
"description": <string>! -- Attribute description, (default: "").
},
...
...
]
}
}
Note
*
indicates that the field is required. !
indicates that the field has a default value.
To add a ~tensorbay.label.label_box.LabeledBox2D
label to one data:
>>> from tensorbay.dataset import Data >>> data = Data("local_path") >>> data.label.box2d = [] >>> data.label.box2d.append(box2d_label)
Note
One data may contain multiple Box2D labels, so the Data.label.box2d<tensorbay.dataset.data.Data.label.box2d>
must be a list.