tlc.core.builtins.types.bounding_box

Module Contents

Classes

Class

Description

BoundingBox

The base class for all bounding boxes.

XYWHBoundingBox

An abstract class representing a bounding box as a list of floats in the format [x, y, w, h]

TopLeftXYWHBoundingBox

CenteredXYWHBoundingBox

XYXYBoundingBox

SegmentationBoundingBox

API

class tlc.core.builtins.types.bounding_box.BoundingBox(box: list[float], normalized: bool = False)

Bases: list

The base class for all bounding boxes.

The BoundingBox class aims to standardize the representation of bounding boxes across the codebase. It is a subclass of list, and represents a bounding box as a list of floats. The exact format of the list depends on the subclass, but the elements within the list are always floats which represent the parameters of the bounding box, in addition to a boolean attribute normalized which indicates whether the bounding box is normalized or not.

The base BoundingBox class implements utility methods like area, is_valid, normalize, and denormalize by calling their definitions in the TopLeftXYWHBoundingBox subclass. Any other BoundingBox format must simply implement the from_top_left_xywh and to_top_left_xywh in order to get access to these utility methods.

In many cases, needing to perform these conversions to and from TopLeftBoundingBox will not be the most efficient implementation of these methods. Where necessary, subclasses can override these methods to provide a more efficient implementation.

Initialize a BoundingBox.

Parameters:
  • box – The list of floats representing the bounding box

  • normalized – Whether the bounding box is normalized or not

abstract classmethod from_top_left_xywh(box: tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox) tlc.core.builtins.types.bounding_box.BoundingBox

Create a BoundingBox from a TopLeftXYWHBoundingBox. An abstract method which must be implemented by all subclasses.

abstract to_top_left_xywh() tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox

Create a TopLeftXYWHBoundingBox from this BoundingBox. An abstract method which must be implemented by all subclasses.

area() float

Compute the area of the bounding box by converting it to a TopLeftXYWHBoundingBox and calling its area method.

Returns:

The area of the bounding box

is_valid(image_width: int | None = None, image_height: int | None = None) bool

Check if the bounding box is valid by converting it to a TopLeftXYWHBoundingBox and calling its is_valid method. The image_width and image_height parameters are required if and only if the bounding box is not normalized.

Parameters:
  • image_width – The width of the image the bounding box is in

  • image_height – The height of the image the bounding box is in

Returns:

True if the bounding box is valid, False otherwise

normalize(image_width: int, image_height: int) tlc.core.builtins.types.bounding_box.BoundingBox

Normalize the bounding box by converting it to a TopLeftXYWHBoundingBox, calling its normalize method, and converting it back to the original format.

Parameters:
  • image_width – The width of the image the bounding box is in

  • image_height – The height of the image the bounding box is in

Returns:

The normalized bounding box

denormalize(image_width: int, image_height: int) tlc.core.builtins.types.bounding_box.BoundingBox

Denormalize the bounding box by converting it to a TopLeftXYWHBoundingBox, calling its denormalize method, and converting it back to the original format.

Parameters:
  • image_width – The width of the image the bounding box is in

  • image_height – The height of the image the bounding box is in

Returns:

The denormalized bounding box

static from_schema(schema: tlc.core.schema.Schema) Callable[..., tlc.core.builtins.types.bounding_box.BoundingBox]

Return an BoundingBox-factory based on the provided schema.

Parameters:

schema – The schema of the bounding box. Assumed to contain the following values: “x0”, “x1”, “y0”, “y1”.

Returns:

A callable which takes a list of floats and returns a BoundingBox.

Example:

# Instantiate a BoundingBox subclass with the values [0, 0, 1, 1] given the schema `schema`.
bounding_box = BoundingBox.from_schema(schema)([0, 0, 1, 1])
class tlc.core.builtins.types.bounding_box.XYWHBoundingBox(box: list[float], normalized: bool = False)

Bases: tlc.core.builtins.types.bounding_box.BoundingBox

An abstract class representing a bounding box as a list of floats in the format [x, y, w, h]

Subclasses of XYWH can further specify whether x and y represent the top left corner of the bounding box or the center of the bounding box, whether w and h represent the full or the half width and height of the bounding box, and other variations.

Initialize a BoundingBox.

Parameters:
  • box – The list of floats representing the bounding box

  • normalized – Whether the bounding box is normalized or not

class tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox(box: list[float], normalized: bool = False)

Bases: tlc.core.builtins.types.bounding_box.XYWHBoundingBox

classmethod from_top_left_xywh(box: tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox) tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox
to_top_left_xywh() tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox
area() float
normalize(image_width: int, image_height: int) tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox
denormalize(image_width: int, image_height: int) tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox
snap_to(image_width: int, image_height: int, tol: float = _BB_BOUNDS_EPS) tuple[tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox, bool]
remove_bounds_eps(image_width: int, image_height: int, tol: float = _BB_BOUNDS_EPS) tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox
is_valid(image_width: int | None = None, image_height: int | None = None, tol: float = _BB_BOUNDS_EPS) bool
class tlc.core.builtins.types.bounding_box.CenteredXYWHBoundingBox(box: list[float], normalized: bool = False)

Bases: tlc.core.builtins.types.bounding_box.XYWHBoundingBox

classmethod from_top_left_xywh(box: tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox) tlc.core.builtins.types.bounding_box.CenteredXYWHBoundingBox
to_top_left_xywh() tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox
class tlc.core.builtins.types.bounding_box.XYXYBoundingBox(box: list[float], normalized: bool = False)

Bases: tlc.core.builtins.types.bounding_box.BoundingBox

classmethod from_top_left_xywh(box: tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox) tlc.core.builtins.types.bounding_box.XYXYBoundingBox
to_top_left_xywh() tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox
class tlc.core.builtins.types.bounding_box.SegmentationBoundingBox(box: list[float], normalized: bool = False)

Bases: tlc.core.builtins.types.bounding_box.BoundingBox

classmethod from_top_left_xywh(box: tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox) tlc.core.builtins.types.bounding_box.SegmentationBoundingBox
to_top_left_xywh() tlc.core.builtins.types.bounding_box.TopLeftXYWHBoundingBox