kwcoco.coco_objects1d
¶
Vectorized ORM-like objects used in conjunction with coco_dataset
Module Contents¶
Classes¶
Vectorized access to lists of dictionary objects |
|
An object for holding a groups of |
|
Vectorized access to category attributes |
|
Vectorized access to video attributes |
|
Vectorized access to image attributes |
|
Vectorized access to annotation attributes |
|
An object for holding a groups of |
|
An object for holding a groups of |
- class kwcoco.coco_objects1d.ObjectList1D(ids, dset, key)[source]¶
Bases:
ubelt.NiceRepr
Vectorized access to lists of dictionary objects
Lightweight reference to a set of object (e.g. annotations, images) that allows for convenient property access.
- Parameters
ids (List[int]) – list of ids
dset (CocoDataset) – parent dataset
key (str) – main object name (e.g. ‘images’, ‘annotations’)
- Types:
ObjT = Ann | Img | Cat # can be one of these types ObjectList1D gives us access to a List[ObjT]
Example
>>> import kwcoco >>> dset = kwcoco.CocoDataset.demo() >>> # Both annots and images are object lists >>> self = dset.annots() >>> self = dset.images() >>> # can call with a list of ids or not, for everything >>> self = dset.annots([1, 2, 11]) >>> self = dset.images([1, 2, 3]) >>> self.lookup('id') >>> self.lookup(['id'])
- take(self, idxs)[source]¶
Take a subset by index
- Returns
ObjectList1D
Example
>>> import kwcoco >>> self = kwcoco.CocoDataset.demo().annots() >>> assert len(self.take([0, 2, 3])) == 3
- compress(self, flags)[source]¶
Take a subset by flags
- Returns
ObjectList1D
Example
>>> import kwcoco >>> self = kwcoco.CocoDataset.demo().images() >>> assert len(self.compress([True, False, True])) == 2
- peek(self)[source]¶
Return the first object dictionary
- Returns
object dictionary
- Return type
ObjT
Example
>>> import kwcoco >>> dset = kwcoco.CocoDataset.demo() >>> self = dset.images() >>> assert self.peek()['id'] == 1 >>> # Check that subsets return correct items >>> sub0 = self.compress([i % 2 == 0 for i in range(len(self))]) >>> sub1 = self.compress([i % 2 == 1 for i in range(len(self))]) >>> assert sub0.peek()['id'] == 1 >>> assert sub1.peek()['id'] == 2
- lookup(self, key, default=ub.NoParam, keepid=False)[source]¶
Lookup a list of object attributes
- Parameters
key (str | Iterable) – name of the property you want to lookup can also be a list of names, in which case we return a dict
default – if specified, uses this value if it doesn’t exist in an ObjT.
keepid – if True, return a mapping from ids to the property
- Returns
a list of whatever type the object is Dict[str, ObjT]
- Return type
List[ObjT]
Example
>>> import kwcoco >>> dset = kwcoco.CocoDataset.demo() >>> self = dset.annots() >>> self.lookup('id') >>> key = ['id'] >>> default = None >>> self.lookup(key=['id', 'image_id']) >>> self.lookup(key=['id', 'image_id']) >>> self.lookup(key='foo', default=None, keepid=True) >>> self.lookup(key=['foo'], default=None, keepid=True) >>> self.lookup(key=['id', 'image_id'], keepid=True)
- get(self, key, default=ub.NoParam, keepid=False)[source]¶
Lookup a list of object attributes
- Parameters
key (str) – name of the property you want to lookup
default – if specified, uses this value if it doesn’t exist in an ObjT.
keepid – if True, return a mapping from ids to the property
- Returns
a list of whatever type the object is Dict[str, ObjT]
- Return type
List[ObjT]
Example
>>> import kwcoco >>> dset = kwcoco.CocoDataset.demo() >>> self = dset.annots() >>> self.get('id') >>> self.get(key='foo', default=None, keepid=True)
- set(self, key, values)[source]¶
Assign a value to each annotation
- Parameters
key (str) – the annotation property to modify
values (Iterable | scalar) – an iterable of values to set for each annot in the dataset. If the item is not iterable, it is assigned to all objects.
Example
>>> import kwcoco >>> dset = kwcoco.CocoDataset.demo() >>> self = dset.annots() >>> self.set('my-key1', 'my-scalar-value') >>> self.set('my-key2', np.random.rand(len(self))) >>> print('dset.imgs = {}'.format(ub.repr2(dset.imgs, nl=1))) >>> self.get('my-key2')
- _lookup(self, key, default=ub.NoParam)[source]¶
Example
>>> # xdoctest: +REQUIRES(--benchmark) >>> import kwcoco >>> dset = kwcoco.CocoDataset.demo('shapes256') >>> self = annots = dset.annots() >>> # >>> import timerit >>> ti = timerit.Timerit(100, bestof=10, verbose=2) >>> # >>> for timer in ti.reset('lookup'): >>> with timer: >>> self.lookup('image_id') >>> # >>> for timer in ti.reset('_lookup'): >>> with timer: >>> self._lookup('image_id') >>> # >>> for timer in ti.reset('image_id'): >>> with timer: >>> self.image_id >>> # >>> for timer in ti.reset('raw1'): >>> with timer: >>> key = 'image_id' >>> [self._dset.anns[_id][key] for _id in self._ids] >>> # >>> for timer in ti.reset('raw2'): >>> with timer: >>> anns = self._dset.anns >>> key = 'image_id' >>> [anns[_id][key] for _id in self._ids] >>> # >>> for timer in ti.reset('lut-gen'): >>> with timer: >>> _lut = self._obj_lut >>> objs = (_lut[_id] for _id in self._ids) >>> [obj[key] for obj in objs] >>> # >>> for timer in ti.reset('lut-gen-single'): >>> with timer: >>> _lut = self._obj_lut >>> [_lut[_id][key] for _id in self._ids]
- class kwcoco.coco_objects1d.ObjectGroups(groups, dset)[source]¶
Bases:
ubelt.NiceRepr
An object for holding a groups of
ObjectList1D
objects
- class kwcoco.coco_objects1d.Categories(ids, dset)[source]¶
Bases:
ObjectList1D
Vectorized access to category attributes
Example
>>> from kwcoco.coco_objects1d import Categories # NOQA >>> import kwcoco >>> dset = kwcoco.CocoDataset.demo() >>> ids = list(dset.cats.keys()) >>> self = Categories(ids, dset) >>> print('self.name = {!r}'.format(self.name)) >>> print('self.supercategory = {!r}'.format(self.supercategory))
- class kwcoco.coco_objects1d.Videos(ids, dset)[source]¶
Bases:
ObjectList1D
Vectorized access to video attributes
Example
>>> from kwcoco.coco_objects1d import Videos # NOQA >>> import kwcoco >>> dset = kwcoco.CocoDataset.demo('vidshapes5') >>> ids = list(dset.index.videos.keys()) >>> self = Videos(ids, dset) >>> print('self = {!r}'.format(self))
- class kwcoco.coco_objects1d.Images(ids, dset)[source]¶
Bases:
ObjectList1D
Vectorized access to image attributes
- property size(self)[source]¶
Example
>>> import kwcoco >>> self = kwcoco.CocoDataset.demo().images() >>> self._dset._ensure_imgsize() >>> print(self.size) [(512, 512), (300, 250), (256, 256)]
- property area(self)[source]¶
Example
>>> import kwcoco >>> self = kwcoco.CocoDataset.demo().images() >>> self._dset._ensure_imgsize() >>> print(self.area) [262144, 75000, 65536]
- property n_annots(self)[source]¶
Example
>>> import kwcoco >>> self = kwcoco.CocoDataset.demo().images() >>> print(ub.repr2(self.n_annots, nl=0)) [9, 2, 0]
- class kwcoco.coco_objects1d.Annots(ids, dset)[source]¶
Bases:
ObjectList1D
Vectorized access to annotation attributes
- property gids(self)[source]¶
Get the column of image-ids
- Returns
list of image ids
- Return type
List[int]
- property detections(self)[source]¶
Get the kwimage-style detection objects
- Returns
kwimage.Detections
Example
>>> # xdoctest: +REQUIRES(module:kwimage) >>> import kwcoco >>> self = kwcoco.CocoDataset.demo('shapes32').annots([1, 2, 11]) >>> dets = self.detections >>> print('dets.data = {!r}'.format(dets.data)) >>> print('dets.meta = {!r}'.format(dets.meta))
- class kwcoco.coco_objects1d.AnnotGroups(groups, dset)[source]¶
Bases:
ObjectGroups
An object for holding a groups of
ObjectList1D
objects
- class kwcoco.coco_objects1d.ImageGroups(groups, dset)[source]¶
Bases:
ObjectGroups
An object for holding a groups of
ObjectList1D
objects