Source code for datumaro.plugins.data_formats.datumaro.page_mapper
# Copyright (C) 2023 Intel Corporation
#
# SPDX-License-Identifier: MIT
import logging as log
from typing import Any, Dict, Iterator, Optional, Set
from datumaro.components.annotation import AnnotationType
from datumaro.components.media import MediaType
from datumaro.rust_api import DatumPageMapper as DatumPageMapperImpl
__all__ = ["DatumPageMapper"]
[docs]
class DatumPageMapper:
"""Construct page maps for items and annotations from the JSON file,
which are used for the stream importer.
It also provides __iter__() to produce item and annotation dictionaries
in stream manner after constructing the page map.
"""
def __init__(self, path: str) -> None:
self._path = path
self._impl = DatumPageMapperImpl(path)
def __iter__(self) -> Iterator[Dict]:
for item_key in self.iter_item_ids():
yield self._impl.get_item_dict(item_key)
[docs]
def get_item_dict(self, item_key: str) -> Optional[Dict]:
try:
return self._impl.get_item_dict(item_key)
except Exception as e:
log.error(e)
return None
def __len__(self) -> int:
return len(self._impl)
[docs]
def iter_item_ids(self) -> Iterator[str]:
for item_id in self._impl.get_img_ids():
yield item_id
def __del__(self):
pass
@property
def dm_format_version(self) -> Optional[str]:
"""Parse "dm_format_version" section from the given JSON file using the stream json parser"""
return self._impl.dm_format_version()
@property
def media_type(self) -> Optional[MediaType]:
"""Parse "media_type" section from the given JSON file using the stream json parser"""
media_type = self._impl.media_type()
if media_type is not None:
return MediaType(media_type)
return None
@property
def ann_types(self) -> Optional[Set[AnnotationType]]:
"""Parse "media_type" section from the given JSON file using the stream json parser"""
ann_types = self._impl.ann_types()
if ann_types is not None:
return ann_types
return None
@property
def infos(self) -> Dict[str, Any]:
"""Parse "infos" section from the given JSON file using the stream json parser"""
return self._impl.infos()
@property
def categories(self) -> Dict[str, Any]:
"""Parse "categories" section from the given JSON file using the stream json parser"""
return self._impl.categories()
def __reduce__(self):
return (self.__class__, (self._path,))