# -*- coding: utf-8 -*-
import logging
import utool as ut
from wbia import _wbia_object
from wbia.control.controller_inject import make_ibs_register_decorator
import six
(print, rrr, profile) = ut.inject2(__name__, '[images]')
logger = logging.getLogger('wbia')
CLASS_INJECT_KEY, register_ibs_method = make_ibs_register_decorator(__name__)
BASE_TYPE = type
try:
from wbia import _autogen_image_base
IMAGE_BASE = _autogen_image_base._image_base_class
except ImportError:
IMAGE_BASE = _wbia_object.ObjectList1D
try:
from wbia import _autogen_imageset_base
IMAGESET_BASE = _autogen_imageset_base._imageset_base_class
except ImportError:
IMAGESET_BASE = _wbia_object.ObjectList1D
[docs]@register_ibs_method
def images(ibs, gids=None, uuids=None, **kwargs):
"""Makes an Images object"""
if uuids is not None:
assert gids is None, 'specify one primary key'
gids = ibs.get_image_gids_from_uuid(uuids)
if gids is None:
gids = ibs.get_valid_gids()
elif gids.__class__.__name__ == 'Images':
return gids
gids = ut.ensure_iterable(gids)
return Images(gids, ibs, **kwargs)
[docs]@register_ibs_method
def imagesets(ibs, gsids=None, text=None):
if text is not None:
gsids = ibs.get_imageset_imgsetids_from_text(text)
if gsids is None:
gsids = ibs.get_valid_imgsetids()
elif gsids.__class__.__name__ == 'ImageSets':
return gsids
gsids = ut.ensure_iterable(gsids)
return ImageSets(gsids, ibs)
[docs]class ImageIBEISPropertyInjector(BASE_TYPE):
def __init__(metaself, name, bases, dct):
super(ImageIBEISPropertyInjector, metaself).__init__(name, bases, dct)
metaself.rrr = rrr
# misc = [ 'instancelist', 'gids_with_aids', 'lazydict', ] #
attrs = [
'aids',
'aids_of_species',
'annot_uuids',
'annot_uuids_of_species',
'annotation_bboxes',
'annotation_thetas',
'contributor_rowid',
'contributor_tag',
'datetime',
'datetime_str',
'detect_confidence',
'detectpaths',
'enabled',
'exts',
'gid',
'glrids',
'gnames',
'gps',
'gps2',
'gsgrids',
'heights',
'imagesettext',
'imgset_uuids',
'imgsetids',
'lat',
'location_codes',
'lon',
'missing_uuid',
'name_uuids',
'nids',
'notes',
'num_annotations',
'orientation',
'orientation_str',
'party_rowids',
'party_tag',
'paths',
'reviewed',
'sizes',
'species_rowids',
'species_uuids',
'thumbpath',
'thumbtup',
'time_statstr',
'timedelta_posix',
'unixtime',
'unixtime_asfloat',
'unixtime2',
'uris',
'uris_original',
'uuids',
'widths' 'imgdata',
]
# inverse_attrs = [
# 'gids_from_uuid',
# ]
objname = 'image'
_wbia_object._inject_getter_attrs(metaself, objname, attrs, [])
# @ut.reloadable_class
[docs]@six.add_metaclass(ImageIBEISPropertyInjector)
class Images(IMAGE_BASE):
"""
Represents a group of annotations. Efficiently accesses properties from a
database using lazy evaluation.
CommandLine:
python -m wbia.images Images --show
Example:
>>> # DISABLE_DOCTEST
>>> from wbia.images import * # NOQA
>>> import wbia
>>> ibs = wbia.opendb(defaultdb='testdb1')
>>> gids = ibs.get_valid_gids()
>>> g = self = images = Images(gids, ibs)
>>> print(g.widths)
>>> print(g)
<Images(num=13)>
"""
# def __init__(self, gids, ibs, config=None):
# super(Images, self).__init__(gids, ibs, config)
@property
def gids(self):
return self._rowids
@property
def annots(self):
return [self._ibs.annots(aids) for aids in self.aids]
@property
def _annot_groups(self):
return self._ibs._annot_groups(self.annots)
[docs] def remove_from_imageset(self, imageset_text):
ibs = self._ibs
if isinstance(imageset_text, str):
gsid = ibs.get_imageset_imgsetids_from_text(imageset_text)
gsids = [gsid] * len(self)
else:
gsids = ibs.get_imageset_imgsetids_from_text(imageset_text)
ibs.unrelate_images_and_imagesets(self.gids, gsids)
[docs] def append_to_imageset(self, imageset_text):
ibs = self._ibs
if isinstance(imageset_text, str):
gsid = ibs.get_imageset_imgsetids_from_text(imageset_text)
gsids = [gsid] * len(self)
else:
gsids = ibs.get_imageset_imgsetids_from_text(imageset_text)
ibs.add_image_relationship(self.gids, gsids)
[docs] def show(self, *args, **kwargs):
if len(self) != 1:
raise ValueError('Can only show one, got {}'.format(len(self)))
from wbia.viz import viz_image
for gid in self:
return viz_image.show_image(self._ibs, gid, *args, **kwargs)
[docs]class ImageSetAttrInjector(BASE_TYPE):
"""
Example:
>>> # SCRIPT
>>> from wbia import _wbia_object
>>> import wbia
>>> ibs = wbia.opendb(defaultdb='testdb1')
>>> objname = 'imageset'
>>> blacklist = []
>>> _wbia_object._find_wbia_attrs(ibs, objname, blacklist)
"""
def __init__(metaself, name, bases, dct):
super(ImageSetAttrInjector, metaself).__init__(name, bases, dct)
metaself.rrr = rrr
# misc = [ 'instancelist', 'gids_with_aids', 'lazydict', ] #
attrs = [
'aids',
'configid',
'custom_filtered_aids',
'duration',
'end_time_posix',
'fraction_annotmatch_reviewed',
'fraction_imgs_reviewed',
'fraction_names_with_exemplar',
'gids',
'gps_lats',
'gps_lons',
'gsgrids',
'image_uuids',
'imgsetids_from_text',
'imgsetids_from_uuid',
'isoccurrence',
'name_uuids',
'nids',
'note',
'notes',
'num_aids',
'num_annotmatch_reviewed',
'num_annots_reviewed',
'num_gids',
'num_imgs_reviewed',
'num_names_with_exemplar',
'percent_annotmatch_reviewed_str',
'percent_imgs_reviewed_str',
'percent_names_with_exemplar_str',
'processed_flags',
'shipped_flags',
'smart_waypoint_ids',
'smart_xml_contents',
'smart_xml_fnames',
'start_time_posix',
'text',
'uuid',
'uuids',
]
# inverse_attrs = [
# 'gids_from_uuid',
# ]
objname = 'imageset'
_wbia_object._inject_getter_attrs(metaself, objname, attrs, [])
# @ut.reloadable_class
[docs]@six.add_metaclass(ImageSetAttrInjector)
class ImageSets(IMAGESET_BASE):
"""
Represents a group of annotations. Efficiently accesses properties from a
database using lazy evaluation.
CommandLine:
python -m wbia.images ImageSets
Example:
>>> # DISABLE_DOCTEST
>>> from wbia.images import * # NOQA
>>> import wbia
>>> ibs = wbia.opendb(defaultdb='testdb1')
>>> gsids = ibs._get_all_imgsetids()
>>> self = ImageSets(gsids, ibs)
>>> print(self)
<ImageSets(num=13)>
"""
def __init__(self, gsids, ibs, config=None):
super(ImageSets, self).__init__(gsids, ibs, config)
@property
def images(self):
return [self._ibs.images(gids) for gids in self.gids]
@property
def annots(self):
return [self._ibs.annots(aids) for aids in self.aids]