class documentation

Base class for dataset-format parsers.

Class Method discover_dir_splits Return present and valid split directories keyed by their canonical split names.
Class Method validate Validate whether the dataset directory has the expected format.
Static Method validate_split Validate whether a split directory has the expected format.
Method __init__ Create a parser for a target dataset.
Method from_dir Parse all data in a source dataset directory.
Method from_split Parse data from one split subdirectory.
Method get_parser_issue_messages Return parser issue messages collected during the last parse.
Method parse_dir Parse an entire dataset directory into the target dataset.
Method parse_split Parse one split subdirectory into the target dataset.
Method reset_parser_issue_messages Clear collected parser issue messages.
Static Method _apply_counts_to_pool Distribute images across splits based on requested counts.
Static Method _apply_counts_to_splits Apply count-based split requests to existing splits.
Static Method _canonicalize_split_name All current parsers use train and test split names whereas validation splits can vary in name between val valid and validation.
Static Method _compare_stem_files Compare sets of files by stem.
Static Method _get_added_images Return unique images yielded by a dataset generator.
Static Method _list_images List OpenCV-supported images in a directory.
Static Method _sample_from_splits Sample from each original split independently.
Method _get_parser_issue_messages Return parser issue messages collected during the last parse.
Method _log_skipped_annotation_summary Undocumented
Method _parse_available_splits Undocumented
Method _parse_split Parse data in one split subdirectory.
Method _remove_unsplit_records Remove records that are not assigned to any split.
Method _reset_parser_issue_messages Clear collected parser issue messages and warning counters.
Method _warn_skipped_annotation Undocumented
Method _wrap_generator Add configured task names to generated records.
Constant _CANONICAL_SPLIT_NAMES Undocumented
Constant _SKIPPED_WARNING_LIMIT Undocumented
Constant _SPLIT_NAMES Undocumented
Instance Variable _dataset Undocumented
Instance Variable _dataset_type Undocumented
Instance Variable _full_warnings Undocumented
Instance Variable _logged_skipped_annotation_warnings Undocumented
Instance Variable _parser_issue_messages Undocumented
Instance Variable _seen_parser_issue_messages Undocumented
Instance Variable _skipped_annotation_counts_by_reason Undocumented
Instance Variable _suppressed_skipped_annotation_warnings Undocumented
Instance Variable _task_name Undocumented
@classmethod
def discover_dir_splits(cls, dataset_dir: Path) -> dict[str, dict[str, Any]]:

Return present and valid split directories keyed by their canonical split names.

@classmethod
def validate(cls, dataset_dir: Path) -> bool:

Validate whether the dataset directory has the expected format.

Parameters
dataset_dir:PathSource dataset directory.
Returns
boolWhether the dataset is in the expected format.
def __init__(self, dataset: BaseDataset, dataset_type: DatasetType, task_name: str | dict[str, str] | None, full_warnings: bool = False):

Create a parser for a target dataset.

Parameters
dataset:BaseDatasetDataset to populate with parsed records.
dataset_type:DatasetTypeSource dataset format.
task_name:str | dict[str, str] | NoneOptional task naming rule. A string is used for all records. A mapping uses class names as keys and task names as values.
full_warnings:boolWhether to log every skipped-annotation warning. When False, only the first 50 warnings are logged and the rest are summarized.
@abstractmethod
def from_dir(self, dataset_dir: Path, **kwargs) -> tuple[list[Path], list[Path], list[Path]]:
@abstractmethod
def from_split(self, **kwargs) -> ParserOutput:
def get_parser_issue_messages(self) -> list[ParserIssueMessage]:

Return parser issue messages collected during the last parse.

def parse_dir(self, dataset_dir: Path, **kwargs) -> BaseDataset:

Parse an entire dataset directory into the target dataset.

Parameters
dataset_dir:PathSource dataset directory.
**kwargsParser-specific arguments.
Returns
BaseDatasetDataset with parsed images and annotations.
Raises
ValueErrorIf a parser that expects top-level splits cannot find a train directory.
def parse_split(self, split: str | None = None, random_split: bool = False, split_ratios: dict[str, float | int] | None = None, **kwargs) -> BaseDataset:

Parse one split subdirectory into the target dataset.

Parameters
split:str | NoneOptional split name to assign to parsed data. When set, split_ratios and random_split are ignored.
random_split:boolWhether to generate random splits using split_ratios.
split_ratios:dict[str, float | int] | NoneOptional ratios or counts. Float values are treated as ratios; integer values are treated as counts.
**kwargsParser-specific arguments.
Returns
BaseDatasetDataset with parsed images and annotations.
def reset_parser_issue_messages(self):

Clear collected parser issue messages.

@staticmethod
def _apply_counts_to_pool(images: Sequence[PathType], split_ratios: dict[str, int]) -> dict[str, Sequence[PathType]]:

Distribute images across splits based on requested counts.

When total requested exceeds available, fills splits by priority (most requested first).

Parameters
images:Sequence[PathType]Images to distribute.
split_ratios:dict[str, int]Requested counts for each split.
Returns
dict[str, Sequence[PathType]]Split names mapped to assigned images.
@staticmethod
def _apply_counts_to_splits(original_splits: dict[str, Sequence[PathType]], split_ratios: dict[str, int]) -> dict[str, Sequence[PathType]]:

Apply count-based split requests to existing splits.

Samples from each original split independently. If more samples are requested than available in a split, all available samples from that split are used.

Parameters
original_splits:dict[str, Sequence[PathType]]Existing split assignments.
split_ratios:dict[str, int]Requested counts for each split.
Returns
dict[str, Sequence[PathType]]Split names mapped to assigned images.
@staticmethod
def _canonicalize_split_name(split_name: str) -> str:

All current parsers use train and test split names whereas validation splits can vary in name between val valid and validation.

This maps valid -> val and validation -> val

@staticmethod
def _compare_stem_files(list1: Iterable[Path], list2: Iterable[Path]) -> bool:

Compare sets of files by stem.

Example

>>> BaseParser._compare_stem_files([Path("a.jpg"), Path("b.jpg")],
...                                [Path("a.xml"), Path("b.xml")])
True
>>> BaseParser._compare_stem_files([Path("a.jpg")], [Path("b.txt")])
False
Parameters
list1:Iterable[Path]First files to compare.
list2:Iterable[Path]Second files to compare.
Returns
boolWhether the non-empty file stem sets are equal.
@staticmethod
def _get_added_images(generator: DatasetIterator) -> list[Path]:

Return unique images yielded by a dataset generator.

Parameters
generator:DatasetIteratorDataset record generator.
Returns
list[Path]Unique added image paths.
@staticmethod
def _list_images(image_dir: Path) -> list[Path]:

List OpenCV-supported images in a directory.

Parameters
image_dir:PathDirectory with images.
Returns
list[Path]Supported image paths.
@staticmethod
def _sample_from_splits(original_splits: dict[str, Sequence[PathType]], split_ratios: dict[str, int]) -> dict[str, Sequence[PathType]]:

Sample from each original split independently.

Parameters
original_splits:dict[str, Sequence[PathType]]Existing split assignments.
split_ratios:dict[str, int]Requested counts for each split.
Returns
dict[str, Sequence[PathType]]Split names mapped to sampled images.
def _get_parser_issue_messages(self) -> list[ParserIssueMessage]:

Return parser issue messages collected during the last parse.

def _log_skipped_annotation_summary(self):

Undocumented

def _parse_available_splits(self, dataset_dir: Path, **kwargs) -> dict[str, list[Path]]:

Undocumented

def _parse_split(self, **kwargs) -> list[Path]:

Parse data in one split subdirectory.

Parameters
**kwargsParser-specific arguments.
Returns
list[Path]Added images.
def _remove_unsplit_records(self):

Remove records that are not assigned to any split.

def _reset_parser_issue_messages(self):

Clear collected parser issue messages and warning counters.

def _warn_skipped_annotation(self, parser_issue: ParserIssue, reason: str, *, source: PathType | None = None, image: PathType | None = None, annotation_id: str | int | None = None):

Undocumented

def _wrap_generator(self, generator: DatasetIterator) -> DatasetIterator:

Add configured task names to generated records.

Parameters
generator:DatasetIteratorDataset record generator.
Returns
DatasetIteratorGenerator that yields records with task names applied.
_CANONICAL_SPLIT_NAMES: tuple[str, ...] =

Undocumented

Value
('train', 'val', 'test')
_SKIPPED_WARNING_LIMIT: int =

Undocumented

Value
50
_SPLIT_NAMES: tuple[str, ...] =

Undocumented

Value
('train', 'valid', 'test')
_dataset =

Undocumented

_dataset_type =

Undocumented

_full_warnings =

Undocumented

_logged_skipped_annotation_warnings: int =

Undocumented

_parser_issue_messages: list[ParserIssueMessage] =

Undocumented

_seen_parser_issue_messages: set[ParserIssueMessage] =

Undocumented

_skipped_annotation_counts_by_reason: dict[str, int] =

Undocumented

_suppressed_skipped_annotation_warnings: int =

Undocumented

_task_name =

Undocumented