Source code for wbia.algo.preproc.preproc_annot

# -*- coding: utf-8 -*-
"""
helpers for controller manual_annot_funcs
"""
import logging
import utool as ut
import uuid
from vtool import geometry

(print, rrr, profile) = ut.inject2(__name__, '[preproc_annot]')
logger = logging.getLogger('wbia')


[docs]def make_annotation_uuids(image_uuid_list, bbox_list, theta_list, deterministic=True): try: # Check to make sure bbox input is a tuple-list, not a list-list if len(bbox_list) > 0: try: assert isinstance( bbox_list[0], tuple ), 'Bounding boxes must be tuples of ints!' assert isinstance( bbox_list[0][0], int ), 'Bounding boxes must be tuples of ints!' except AssertionError as ex: ut.printex(ex) logger.info('bbox_list = %r' % (bbox_list,)) raise annotation_uuid_list = [ ut.augment_uuid(img_uuid, bbox, theta) for img_uuid, bbox, theta in zip(image_uuid_list, bbox_list, theta_list) ] if not deterministic: # Augment determenistic uuid with a random uuid to ensure randomness # (this should be ensured in all hardward situations) annotation_uuid_list = [ ut.augment_uuid(ut.random_uuid(), _uuid) for _uuid in annotation_uuid_list ] except Exception as ex: ut.printex( ex, 'Error building annotation_uuids', '[add_annot]', key_list=['image_uuid_list'], ) raise return annotation_uuid_list
[docs]def generate_annot_properties( ibs, gid_list, bbox_list=None, theta_list=None, species_list=None, nid_list=None, name_list=None, detect_confidence_list=None, notes_list=None, vert_list=None, annot_uuid_list=None, yaw_list=None, quiet_delete_thumbs=False, ): # annot_uuid_list = ibsfuncs.make_annotation_uuids(image_uuid_list, bbox_list, # theta_list, deterministic=False) image_uuid_list = ibs.get_image_uuids(gid_list) if annot_uuid_list is None: annot_uuid_list = [uuid.uuid4() for _ in range(len(image_uuid_list))] # Prepare the SQL input assert name_list is None or nid_list is None, 'cannot specify both names and nids' # For import only, we can specify both by setting import_override to True assert bool(bbox_list is None) != bool( vert_list is None ), 'must specify exactly one of bbox_list or vert_list' if theta_list is None: theta_list = [0.0 for _ in range(len(gid_list))] if name_list is not None: nid_list = ibs.add_names(name_list) if detect_confidence_list is None: detect_confidence_list = [0.0 for _ in range(len(gid_list))] if notes_list is None: notes_list = ['' for _ in range(len(gid_list))] if vert_list is None: vert_list = geometry.verts_list_from_bboxes_list(bbox_list) elif bbox_list is None: bbox_list = geometry.bboxes_from_vert_list(vert_list) len_bbox = len(bbox_list) len_vert = len(vert_list) len_gid = len(gid_list) len_notes = len(notes_list) len_theta = len(theta_list) try: assert len_vert == len_bbox, 'bbox and verts are not of same size' assert len_gid == len_bbox, 'bbox and gid are not of same size' assert len_gid == len_theta, 'bbox and gid are not of same size' assert len_notes == len_gid, 'notes and gids are not of same size' except AssertionError as ex: ut.printex( ex, key_list=['len_vert', 'len_gid', 'len_bbox' 'len_theta', 'len_notes'] ) raise if len(gid_list) == 0: # nothing is being added logger.info('[ibs] WARNING: 0 annotations are beign added!') logger.info(ut.repr2(locals())) return [] # Build ~~deterministic?~~ random and unique ANNOTATION ids image_uuid_list = ibs.get_image_uuids(gid_list) # annot_uuid_list = ibsfuncs.make_annotation_uuids(image_uuid_list, bbox_list, # theta_list, deterministic=False) if annot_uuid_list is None: annot_uuid_list = [uuid.uuid4() for _ in range(len(image_uuid_list))] if yaw_list is None: yaw_list = [-1.0] * len(image_uuid_list) nVert_list = [len(verts) for verts in vert_list] vertstr_list = [str(verts) for verts in vert_list] xtl_list, ytl_list, width_list, height_list = list(zip(*bbox_list)) assert len(nVert_list) == len(vertstr_list)
# Define arguments to insert
[docs]def testdata_preproc_annot(): import wbia ibs = wbia.opendb('testdb1') aid_list = ibs.get_valid_aids() return ibs, aid_list
[docs]def postget_annot_verts(vertstr_list): # TODO: Sanatize input for eval # logger.info('vertstr_list = %r' % (vertstr_list,)) locals_ = {} globals_ = {} vert_list = [eval(vertstr, globals_, locals_) for vertstr in vertstr_list] return vert_list