<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/bounding_boxes.py#L37-L169) |

`FeatureConnector` for a normalized bounding box.

Inherits From: [`Tensor`](https://www.tensorflow.org/datasets/api_docs/python/tfds/features/Tensor), [`FeatureConnector`](https://www.tensorflow.org/datasets/api_docs/python/tfds/features/FeatureConnector)

    tfds.features.BBoxFeature(
        *,
        doc: feature_lib.DocArg = None,
        bbox_format: (bb_utils.BBoxFormatType | None) = bb_utils.BBoxFormat.REL_YXYX
    )

By default, TFDS uses normalized YXYX bbox format. This can be changed by
passing the `bbox_format` argument, e.g.

      features=features.FeatureDict({
          'bbox': tfds.features.BBox(bbox_format=bb_utils.BBoxFormat.XYWH),
      })

If you don't know the format of the bbox, you can use `bbox_format=None`. In
this case, the only check that is done is that 4 floats coordinates are
provided.

> [!NOTE]
> **Note:** If you have multiple bounding boxes, you may want to wrap the feature inside a [`tfds.features.Sequence`](https://www.tensorflow.org/datasets/api_docs/python/tfds/features/Sequence).

<br />

<br />

| ## Input ||
|---|---|
| <br /> - [`tfds.features.BBox`](https://www.tensorflow.org/datasets/api_docs/python/tfds/features/BBox) tuple or 4-dim `np.ndarray`. ||

<br />

<br />

<br />

<br />

| ## Output ||
|---|---|
| `bbox` | tf.Tensor of type [`tf.float32`](https://www.tensorflow.org/api_docs/python/tf#float32) and shape `[4,]` which contains the normalized coordinates of the bounding box `[ymin, xmin, ymax, xmax]` |

<br />

<br />

<br />

<br />

| ## Example ||
|---|---|
| <br /> - In the DatasetInfo object: features=features.FeatureDict({ 'bbox': tfds.features.BBox(), }) - During generation: yield { 'input': tfds.features.BBox(ymin=0.3, xmin=0.8, ymax=0.5, xmax=1.0), } <br /> ||

<br />

<br />

<br />

<br />

| ## Args ||
|---|---|
| `shape` | Tensor shape |
| `dtype` | Tensor dtype |
| `encoding` | Internal encoding. See [`tfds.features.Encoding`](https://www.tensorflow.org/datasets/api_docs/python/tfds/features/Encoding) for available values. |
| `doc` | Documentation of this feature (e.g. description). |
| `serialized_dtype` | Tensor dtype. Used to validate that serialized examples have this dtype. If `None` then defaults to `dtype` |
| `serialized_shape` | Tensor shape. Used to validate that serialized examples have this shape. If `None` then defaults to `shape` |
| `minimum` | Tensor minimum. This can be useful to specify [`tf_agents.specs.BoundedArraySpec`](https://www.tensorflow.org/agents/api_docs/python/tf_agents/specs/BoundedArraySpec) for example. |
| `maximum` | Tensor maximum. This can be useful to specify [`tf_agents.specs.BoundedArraySpec`](https://www.tensorflow.org/agents/api_docs/python/tf_agents/specs/BoundedArraySpec) for example. |
| `optional` | Whether the feature is optional and accepts None values. |

<br />

<br />

<br />

<br />

| ## Attributes ||
|---|---|
| `doc` | <br /> <br /> |
| `dtype` | Return the dtype (or dict of dtype) of this FeatureConnector. |
| `np_dtype` | <br /> <br /> |
| `numpy_dtype` | <br /> <br /> |
| `shape` | Return the shape (or dict of shape) of this FeatureConnector. |
| `tf_dtype` | <br /> <br /> |

<br />

## Methods

### `catalog_documentation`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L1002-L1031)

    catalog_documentation() -> List[CatalogFeatureDocumentation]

Returns the feature documentation to be shown in the catalog.

### `cls_from_name`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L401-L428)

    @classmethod
    cls_from_name(
        python_class_name: str
    ) -> Type['FeatureConnector']

Returns the feature class for the given Python class.

### `decode_batch_example`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/tensor_feature.py#L318-L327)

    decode_batch_example(
        example_data
    )

See base class for details.

### `decode_batch_example_np`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L832-L834)

    decode_batch_example_np(
        batch
    )

See decode_batch_example.

### `decode_example`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/tensor_feature.py#L288-L300)

    decode_example(
        tfexample_data
    )

See base class for details.

### `decode_example_np`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/tensor_feature.py#L302-L316)

    decode_example_np(
        example_data: type_utils.NpArrayOrScalar
    ) -> type_utils.NpArrayOrScalar

Decode the example data into NumPy-compatible input.

<br />

<br />

<br />

| Args ||
|---|---|
| `example_data` | Value to convert to NumPy. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| `np_data` | Data as NumPy-compatible type: either a Python primitive (bytes, int, etc) or a NumPy array. |

<br />

### `decode_ragged_example`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/tensor_feature.py#L329-L338)

    decode_ragged_example(
        example_data
    )

See base class for details.

### `decode_ragged_example_np`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/tensor_feature.py#L340-L346)

    decode_ragged_example_np(
        example_data
    )

See base class for details.

### `encode_example`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/bounding_boxes.py#L92-L130)

    encode_example(
        bbox: Union[bb_utils.BBox, np.ndarray]
    )

See base class for details.

### `from_config`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L646-L665)

    @classmethod
    from_config(
        root_dir: str
    ) -> FeatureConnector

Reconstructs the FeatureConnector from the config file.

#### Usage:

    features = FeatureConnector.from_config('path/to/dir')

<br />

<br />

<br />

| Args ||
|---|---|
| `root_dir` | Directory containing the features.json file. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| The reconstructed feature instance. ||

<br />

### `from_json`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L434-L480)

    @classmethod
    from_json(
        value: Json
    ) -> FeatureConnector

FeatureConnector factory.

This function should be called from the [`tfds.features.FeatureConnector`](https://www.tensorflow.org/datasets/api_docs/python/tfds/features/FeatureConnector)
base class. Subclass should implement the `from_json_content`.

#### Example:

    feature = tfds.features.FeatureConnector.from_json(
        {'type': 'Image', 'content': {'shape': [32, 32, 3], 'dtype': 'uint8'} }
    )
    assert isinstance(feature, tfds.features.Image)

<br />

<br />

<br />

| Args ||
|---|---|
| `value` | `dict(type=, content=)` containing the feature to restore. Match dict returned by `to_json`. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| The reconstructed FeatureConnector. ||

<br />

### `from_json_content`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/bounding_boxes.py#L141-L151)

    @classmethod
    from_json_content(
        value: Union[Json, feature_pb2.BoundingBoxFeature]
    ) -> 'BBoxFeature'

FeatureConnector factory (to overwrite).

Subclasses should overwrite this method. This method is used when
importing the feature connector from the config.

This function should not be called directly. [`FeatureConnector.from_json`](https://www.tensorflow.org/datasets/api_docs/python/tfds/features/FeatureConnector#from_json)
should be called instead.

See existing FeatureConnectors for implementation examples.

<br />

<br />

<br />

| Args ||
|---|---|
| `value` | FeatureConnector information represented as either Json or a Feature proto. The content must match what is returned by `to_json_content`. |
| `doc` | Documentation of this feature (e.g. description). |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| The reconstructed FeatureConnector. ||

<br />

### `from_proto`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L618-L632)

    @classmethod
    from_proto(
        feature_proto: feature_pb2.Feature
    ) -> T

Instantiates a feature from its proto representation.

### `get_serialized_info`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/tensor_feature.py#L145-L181)

    get_serialized_info()

See base class for details.

### `get_tensor_info`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/tensor_feature.py#L133-L143)

    get_tensor_info() -> feature_lib.TensorInfo

See base class for details.

### `get_tensor_spec`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L361-L370)

    get_tensor_spec() -> TreeDict[tf.TensorSpec]

Returns the tf.TensorSpec of this feature (not the element spec!).

Note that the output of this method may not correspond to the element spec
of the dataset. For example, currently this method does not support
RaggedTensorSpec.

### `load_metadata`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L1064-L1079)

    load_metadata(
        data_dir: epath.PathLike, feature_name: Optional[str]
    )

Restore the feature metadata from disk.

If a dataset is re-loaded and generated files exists on disk, this function
will restore the feature metadata from the saved file.

<br />

<br />

<br />

| Args ||
|---|---|
| `data_dir` | path to the dataset folder where the info is saved (ex: `~/datasets/cifar10/1.2.0/`) |
| `feature_name` | the name of the feature (from the FeaturesDict key) |

<br />

### `repr_html`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/bounding_boxes.py#L132-L135)

    repr_html(
        ex: np.ndarray
    ) -> str

Returns the HTML str representation of an Image with BBoxes.

### `repr_html_batch`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/bounding_boxes.py#L137-L139)

    repr_html_batch(
        ex: np.ndarray
    ) -> str

Returns the HTML str representation of an Image with BBoxes (Sequence).

### `repr_html_ragged`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L876-L878)

    repr_html_ragged(
        ex: np.ndarray
    ) -> str

Returns the HTML str representation of the object (Nested sequence).

### `save_config`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L634-L644)

    save_config(
        root_dir: str
    ) -> None

Exports the `FeatureConnector` to a file.

<br />

<br />

<br />

| Args ||
|---|---|
| `root_dir` | `path/to/dir` containing the `features.json` |

<br />

### `save_metadata`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L1033-L1062)

    save_metadata(
        data_dir: epath.PathLike, feature_name: Optional[str]
    ) -> None

Save the feature metadata on disk.

This function is called after the data has been generated (by
`_download_and_prepare`) to save the feature connector info with the
generated dataset.

Some dataset/features dynamically compute info during
`_download_and_prepare`. For instance:

- Labels are loaded from the downloaded data
- Vocabulary is created from the downloaded data
- ImageLabelFolder compute the image dtypes/shape from the manual_dir

After the info have been added to the feature, this function allow to
save those additional info to be restored the next time the data is loaded.

By default, this function do not save anything, but sub-classes can
overwrite the function.

<br />

<br />

<br />

| Args ||
|---|---|
| `data_dir` | path to the dataset folder to which save the info (ex: `~/datasets/cifar10/1.2.0/`) |
| `feature_name` | the name of the feature (from the FeaturesDict key) |

<br />

### `to_json`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L482-L545)

    to_json() -> Json

Exports the FeatureConnector to Json.

Each feature is serialized as a `dict(type=..., content=...)`.

- `type`: The cannonical name of the feature (`module.FeatureName`).
- `content`: is specific to each feature connector and defined in `to_json_content`. Can contain nested sub-features (like for [`tfds.features.FeaturesDict`](https://www.tensorflow.org/datasets/api_docs/python/tfds/features/FeaturesDict) and [`tfds.features.Sequence`](https://www.tensorflow.org/datasets/api_docs/python/tfds/features/Sequence)).

#### For example:

    tfds.features.FeaturesDict({
        'input': tfds.features.Image(),
        'target': tfds.features.ClassLabel(num_classes=10),
    })

#### Is serialized as:

    {
        "type": "tensorflow_datasets.core.features.features_dict.FeaturesDict",
        "content": {
            "input": {
                "type": "tensorflow_datasets.core.features.image_feature.Image",
                "content": {
                    "shape": [null, null, 3],
                    "dtype": "uint8",
                    "encoding_format": "png"
                }
            },
            "target": {
                "type":
                "tensorflow_datasets.core.features.class_label_feature.ClassLabel",
                "content": {
                  "num_classes": 10
                }
            }
        }
    }

<br />

<br />

<br />

| Returns ||
|---|---|
| A `dict(type=, content=)`. Will be forwarded to `from_json` when reconstructing the feature. ||

<br />

### `to_json_content`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/bounding_boxes.py#L153-L169)

    to_json_content() -> feature_pb2.BoundingBoxFeature

FeatureConnector factory (to overwrite).

This function should be overwritten by the subclass to allow re-importing
the feature connector from the config. See existing FeatureConnector for
example of implementation.

<br />

<br />

<br />

| Returns ||
|---|---|
| The FeatureConnector metadata in either a dict, or a Feature proto. This output is used in `from_json_content` when reconstructing the feature. ||

<br />

### `to_proto`

[View source](https://github.com/tensorflow/datasets/blob/v4.9.10/tensorflow_datasets/core/features/feature.py#L589-L616)

    to_proto() -> feature_pb2.Feature

Exports the FeatureConnector to the Feature proto.

For features that have a specific schema defined in a proto, this
function needs to be overriden. If there's no specific proto schema,
then the feature will be represented using JSON.

<br />

<br />

<br />

| Returns ||
|---|---|
| The feature proto describing this feature. ||

<br />

<br />

<br />

<br />

| ## Class Variables ||
|---|---|
| ALIASES | `['tensorflow_datasets.core.features.feature.Tensor']` |

<br />