diff --git a/eta/core/data.py b/eta/core/data.py index 17487e381..db4b76c1e 100644 --- a/eta/core/data.py +++ b/eta/core/data.py @@ -22,6 +22,7 @@ # pragma pylint: enable=wildcard-import from collections import defaultdict +import logging import os import numpy as np @@ -32,6 +33,9 @@ import eta.core.utils as etau +logger = logging.getLogger(__name__) + + def majority_vote_categorical_attrs(attrs, confidence_weighted=False): '''Performs majority votes over the given attributes, which are assumed to be `CategoricalAttribute`s. diff --git a/eta/core/image.py b/eta/core/image.py index 6b956cd76..8723dc013 100644 --- a/eta/core/image.py +++ b/eta/core/image.py @@ -568,6 +568,23 @@ def build_active_schema(cls, image_labels): schema.add_object_label(obj.label) return schema + @classmethod + def from_video_labels_schema(cls, video_labels_schema): + '''Creates an ImageLabelsSchema from a VideoLabelsSchema. + + Frame-level attributes of the VideoLabelsSchema are converted to + image-level attributes in the ImageLabelsSchema. + + Args: + video_labels_schema: a VideoLabelsSchema + + Returns: + an ImageLabelsSchema + ''' + return cls( + attrs=video_labels_schema.frames, + objects=video_labels_schema.objects) + @classmethod def from_dict(cls, d): '''Constructs an ImageLabelsSchema from a JSON dictionary. diff --git a/eta/core/utils.py b/eta/core/utils.py index 8fbec61b9..954ecdb36 100644 --- a/eta/core/utils.py +++ b/eta/core/utils.py @@ -2522,3 +2522,20 @@ class ExecutableRuntimeError(Exception): def __init__(self, cmd, err): message = "Command '%s' failed with error:\n%s" % (cmd, err) super(ExecutableRuntimeError, self).__init__(message) + + +def validate_type(obj, expected_type): + '''Validates an object's type against an expected type. + + Args: + obj: the python object to validate + expected_type: the type that `obj` must be (via `isinstance`) + + Raises: + TypeError: if `obj` is not of `expected_type` + ''' + if not isinstance(obj, expected_type): + raise TypeError( + "Unexpected argument type:\n\tExpected: %s\n\tActual: %s" + % (get_class_name(expected_type), get_class_name(obj)) + ) diff --git a/eta/core/video.py b/eta/core/video.py index 762bb2bf0..f13b5aa01 100644 --- a/eta/core/video.py +++ b/eta/core/video.py @@ -1621,6 +1621,23 @@ def attributes(self): ''' return ["attrs", "frames", "objects", "events"] + @classmethod + def from_image_labels_schema(cls, image_labels_schema): + '''Creates a VideoLabelsSchema from an ImageLabelsSchema. + + Image-level attributes of the ImageLabelsSchema are converted to + frame-level attributes in the VideoLabelsSchema. + + Args: + image_labels_schema: an ImageLabelsSchema + + Returns: + a VideoLabelsSchema + ''' + return cls( + frames=image_labels_schema.attrs, + objects=image_labels_schema.objects) + @classmethod def build_active_schema_for_frame(cls, frame_labels): '''Builds a VideoLabelsSchema that describes the active schema of the