# Copyright (c) OpenMMLab. All rights reserved. from mmengine.structures import BaseDataElement, InstanceData class KIEDataSample(BaseDataElement): """A data structure interface of MMOCR. They are used as interfaces between different components. The attributes in ``KIEDataSample`` are divided into two parts: - ``gt_instances``(InstanceData): Ground truth of instance annotations. - ``pred_instances``(InstanceData): Instances of model predictions. Examples: >>> import torch >>> import numpy as np >>> from mmengine.structures import InstanceData >>> from mmocr.data import KIEDataSample >>> # gt_instances >>> data_sample = KIEDataSample() >>> img_meta = dict(img_shape=(800, 1196, 3), ... pad_shape=(800, 1216, 3)) >>> gt_instances = InstanceData(metainfo=img_meta) >>> gt_instances.bboxes = torch.rand((5, 4)) >>> gt_instances.labels = torch.rand((5,)) >>> data_sample.gt_instances = gt_instances >>> assert 'img_shape' in data_sample.gt_instances.metainfo_keys() >>> len(data_sample.gt_instances) 5 >>> print(data_sample) ) at 0x7f21fb1b9880> >>> # pred_instances >>> pred_instances = InstanceData(metainfo=img_meta) >>> pred_instances.bboxes = torch.rand((5, 4)) >>> pred_instances.scores = torch.rand((5,)) >>> data_sample = KIEDataSample(pred_instances=pred_instances) >>> assert 'pred_instances' in data_sample >>> data_sample = KIEDataSample() >>> gt_instances_data = dict( ... bboxes=torch.rand(2, 4), ... labels=torch.rand(2)) >>> gt_instances = InstanceData(**gt_instances_data) >>> data_sample.gt_instances = gt_instances >>> assert 'gt_instances' in data_sample """ @property def gt_instances(self) -> InstanceData: """InstanceData: groundtruth instances.""" return self._gt_instances @gt_instances.setter def gt_instances(self, value: InstanceData): """gt_instances setter.""" self.set_field(value, '_gt_instances', dtype=InstanceData) @gt_instances.deleter def gt_instances(self): """gt_instances deleter.""" del self._gt_instances @property def pred_instances(self) -> InstanceData: """InstanceData: prediction instances.""" return self._pred_instances @pred_instances.setter def pred_instances(self, value: InstanceData): """pred_instances setter.""" self.set_field(value, '_pred_instances', dtype=InstanceData) @pred_instances.deleter def pred_instances(self): """pred_instances deleter.""" del self._pred_instances