def set_part_verts(ibs, part_rowid_list, verts_list, delete_thumbs=True, notify_root=True): r""" Sets the vertices [(x, y), ...] of a list of part_rowid_list RESTful: Method: PUT URL: /api/part/vert/ """ from vtool import geometry nInput = len(part_rowid_list) # Compute data to set if isinstance(verts_list, np.ndarray): verts_list = verts_list.tolist() for index, vert_list in enumerate(verts_list): if isinstance(vert_list, np.ndarray): verts_list[index] = vert_list.tolist() num_verts_list = list(map(len, verts_list)) verts_as_strings = list(map(six.text_type, verts_list)) id_iter1 = ((part_rowid, ) for part_rowid in part_rowid_list) # also need to set the internal number of vertices val_iter1 = ((num_verts, verts) for (num_verts, verts) in zip(num_verts_list, verts_as_strings)) colnames = ( PART_NUM_VERTS, PART_VERTS, ) # SET VERTS in PART_TABLE ibs.db.set(const.PART_TABLE, colnames, val_iter1, id_iter1, nInput=nInput) # changing the vertices also changes the bounding boxes bbox_list = geometry.bboxes_from_vert_list(verts_list) # new bboxes xtl_list, ytl_list, width_list, height_list = list(zip(*bbox_list)) val_iter2 = zip(xtl_list, ytl_list, width_list, height_list) id_iter2 = ((part_rowid, ) for part_rowid in part_rowid_list) colnames = ( 'part_xtl', 'part_ytl', 'part_width', 'part_height', ) # SET BBOX in PART_TABLE ibs.db.set(const.PART_TABLE, colnames, val_iter2, id_iter2, nInput=nInput) with ut.Timer('set_annot_verts...thumbs'): if delete_thumbs: ibs.delete_part_chips(part_rowid_list) # INVALIDATE THUMBNAILS with ut.Timer('set_annot_verts...roots'): if notify_root: ibs.depc_part.notify_root_changed(part_rowid_list, 'verts', force_delete=True)
def TEST_CONVERT_BBOX_POLY(ibs): print('[TEST] CONVERT_BBOX_POLY') gids = ibs.get_valid_gids() bbox_list = [(0, 0, 100, 100)] aid_list = ibs.add_annots(gids[0:1], bbox_list=bbox_list) vert_list = ibs.get_annot_verts(aid_list) bbox_list_new = geometry.bboxes_from_vert_list(vert_list) assert bbox_list_new == bbox_list, 'Original bbox does not match the returned one' bbox_list = [(0, 0, 100, 100)] aid_list = ibs.add_annots(gids[1:2], bbox_list=bbox_list) vert_list = ibs.get_annot_verts(aid_list) vert_list_new = geometry.verts_list_from_bboxes_list(bbox_list) assert vert_list_new == vert_list, 'Vertices and their bounding box do not match' vert_list = [((0, 50), (50, 100), (100, 50), (50, 0))] aid_list = ibs.add_annots(gids[2:3], vert_list=vert_list) bbox_list = ibs.get_annot_bboxes(aid_list) bbox_list_new = geometry.bboxes_from_vert_list(vert_list) assert bbox_list_new == bbox_list, 'Original bbox does not match the returned one' return locals()
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 = [six.text_type(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)
def add_parts(ibs, aid_list, bbox_list=None, theta_list=None, detect_confidence_list=None, notes_list=None, vert_list=None, part_uuid_list=None, viewpoint_list=None, quality_list=None, type_list=None, staged_uuid_list=None, staged_user_id_list=None, **kwargs): r""" Adds an part to annotations Args: aid_list (list): annotation rowids to add part to bbox_list (list): of [x, y, w, h] bounding boxes for each annotation (supply verts instead) theta_list (list): orientations of parts vert_list (list): alternative to bounding box Returns: list: part_rowid_list Ignore: detect_confidence_list = None notes_list = None part_uuid_list = None viewpoint_list = None quality_list = None type_list = None RESTful: Method: POST URL: /api/part/ """ # ut.embed() from vtool import geometry if ut.VERBOSE: logger.info('[ibs] adding parts') # Prepare the SQL input # 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' ut.assert_all_not_None(aid_list, 'aid_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) if theta_list is None: theta_list = [0.0 for _ in range(len(aid_list))] len_bbox = len(bbox_list) len_vert = len(vert_list) len_aid = len(aid_list) len_theta = len(theta_list) try: assert len_vert == len_bbox, 'bbox and verts are not of same size' assert len_aid == len_bbox, 'bbox and aid are not of same size' assert len_aid == len_theta, 'bbox and aid are not of same size' except AssertionError as ex: ut.printex(ex, key_list=['len_vert', 'len_aid', 'len_bbox' 'len_theta']) raise if len(aid_list) == 0: # nothing is being added logger.info('[ibs] WARNING: 0 parts are being added!') logger.info(ut.repr2(locals())) return [] if detect_confidence_list is None: detect_confidence_list = [0.0 for _ in range(len(aid_list))] if notes_list is None: notes_list = ['' for _ in range(len(aid_list))] if viewpoint_list is None: viewpoint_list = [-1.0] * len(aid_list) if type_list is None: type_list = [const.UNKNOWN] * len(aid_list) nVert_list = [len(verts) for verts in vert_list] vertstr_list = [six.text_type(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) # Build ~~deterministic?~~ random and unique PART ids if part_uuid_list is None: part_uuid_list = [uuid.uuid4() for _ in range(len(aid_list))] if staged_uuid_list is None: staged_uuid_list = [None] * len(aid_list) is_staged_list = [ staged_uuid is not None for staged_uuid in staged_uuid_list ] if staged_user_id_list is None: staged_user_id_list = [None] * len(aid_list) # Define arguments to insert colnames = ( 'part_uuid', 'annot_rowid', 'part_xtl', 'part_ytl', 'part_width', 'part_height', 'part_theta', 'part_num_verts', 'part_verts', 'part_viewpoint', 'part_detect_confidence', 'part_note', 'part_type', 'part_staged_flag', 'part_staged_uuid', 'part_staged_user_identity', ) check_uuid_flags = [ not isinstance(auuid, uuid.UUID) for auuid in part_uuid_list ] if any(check_uuid_flags): pos = ut.list_where(check_uuid_flags) raise ValueError('positions %r have malformated UUIDS' % (pos, )) params_iter = list( zip( part_uuid_list, aid_list, xtl_list, ytl_list, width_list, height_list, theta_list, nVert_list, vertstr_list, viewpoint_list, detect_confidence_list, notes_list, type_list, is_staged_list, staged_uuid_list, staged_user_id_list, )) # Execute add PARTs SQL superkey_paramx = (0, ) get_rowid_from_superkey = ibs.get_part_rowids_from_uuid part_rowid_list = ibs.db.add_cleanly(const.PART_TABLE, colnames, params_iter, get_rowid_from_superkey, superkey_paramx) return part_rowid_list
def TEST_IBS_CONTROL(ibs): ibs.delete_all_imagesets() ibs.compute_occurrences() """ get_image_imgsetids / get_imageset_gids """ imgsetid_list = ibs.get_valid_imgsetids() assert imgsetid_list, 'imgsetid_list is empty' gids_list = ibs.get_imageset_gids(imgsetid_list) # print('[TEST] gids_list = %r' % gids_list) assert gids_list, 'gids_list is empty' for gids, imgsetid in zip(gids_list, imgsetid_list): imgsetid_list2 = ibs.get_image_imgsetids(gids) try: assert ([[imgsetid]] * len(imgsetid_list2)) == imgsetid_list2 except AssertionError as ex: utool.printex(ex, key_list=['imgsetid_list2', 'imgsetid']) raise """ set_annot_notes / get_annot_notes """ aid_list = ibs.get_valid_aids() annotation_notes_list = len(aid_list) * ["test text"] assert aid_list, 'aid_list is empty' ibs.set_annot_notes(aid_list, annotation_notes_list) annotation_notes_list2 = ibs.get_annot_notes(aid_list) assert annotation_notes_list2, 'get_annot_notes returned an empty list' #print('[TEST] annotation_notes_list = %r' % annotation_notes_list) #print('[TEST] annotation_notes_list2 = %r' % annotation_notes_list2) assert annotation_notes_list == annotation_notes_list2, 'annotation notes lists do not match' """ set_name_notes / get_name_notes """ nid_list = ibs.get_valid_nids() assert nid_list, 'nid_list is empty' nid_notes_list = len(nid_list) * ['nid notes test'] ibs.set_name_notes(nid_list, nid_notes_list) nid_notes_list2 = ibs.get_name_notes(nid_list) print('[TEST] nid_notes_list = %r' % nid_notes_list) print('[TEST] nid_notes_list2 = %r' % nid_notes_list2) utool.assert_lists_eq(nid_notes_list, nid_notes_list2, 'nid notes lists do not match', verbose=True) assert nid_notes_list == nid_notes_list2, 'nid notes lists do not match' """ set_image_notes / get_image_notes """ gid_list = ibs.get_valid_gids() assert gid_list, 'gid_list is empty' gid_notes_list = len(gid_list) * ['image note test'] ibs.set_image_notes(gid_list, gid_notes_list) gid_notes_list2 = ibs.get_image_notes(gid_list) print('[TEST] gid_notes_list = %r' % gid_notes_list) print('[TEST] gid_notes_list2 = %r' % gid_notes_list2) assert gid_notes_list == gid_notes_list2, 'images notes lists do not match' """ set_annot_bboxes / get_annot_bboxes """ aid_list = ibs.get_valid_aids() assert aid_list, 'aid_list is empty' bbox_list_orig = ibs.get_annot_bboxes(aid_list) bbox_list = [(1, 2, 3, 4)] * len(aid_list) ibs.set_annot_bboxes(aid_list, bbox_list) bbox_list2 = ibs.get_annot_bboxes(aid_list) print('[TEST] aid_list = %r' % (aid_list, )) print('[TEST] bbox_list = %r' % (bbox_list, )) print('[TEST] bbox_list2 = %r' % (bbox_list2, )) assert bbox_list == bbox_list2, 'bbox lists do not match' # put bboxes back to original state # (otherwise other tests will fail on the second run of run_tests.sh) ibs.set_annot_bboxes(aid_list, bbox_list_orig) """ set_annot_verts / get_annot_verts """ aid_list = ibs.get_valid_aids() assert aid_list, 'aid_list is empty' bbox_list_orig = ibs.get_annot_bboxes(aid_list) vert_list_orig = ibs.get_annot_verts(aid_list) vert_list = [((1, 2), (3, 4), (5, 6), (7, 8))] * len(aid_list) print('[TEST] vert_list = %r' % vert_list) assert len(aid_list) == len( vert_list), 'lengths do not match, malformed input' ibs.set_annot_verts(aid_list, vert_list) vert_list2 = ibs.get_annot_verts(aid_list) assert vert_list == vert_list2, 'vert lists do not match' """ set_annot_verts / get_annot_bboxes """ bbox_list = ibs.get_annot_bboxes(aid_list) bbox_list2 = geometry.bboxes_from_vert_list(vert_list2) assert bbox_list == bbox_list2, 'bbox lists do not match' vert_list = [((10, 10), (120, 10), (120, 120), (10, 120))] * len(aid_list) ibs.set_annot_verts(aid_list, vert_list) bbox_list3 = [(10, 10, 110, 110)] * len(aid_list) bbox_list4 = ibs.get_annot_bboxes(aid_list) assert bbox_list3 == bbox_list4, 'bbox lists do not match' # finish this test here """ set_annot_bboxes / get_annot_verts """ bbox_list = [(10, 10, 110, 110)] * len(aid_list) ibs.set_annot_bboxes(aid_list, bbox_list) # test that setting the bounding boxes overrides the vertices vert_list = [((10, 10), (120, 10), (120, 120), (10, 120))] * len(aid_list) vert_list2 = ibs.get_annot_verts(aid_list) assert vert_list == vert_list2, 'vert lists do not match' # put verts back to original state # (otherwise other tests will fail on the second run of run_tests.sh) ibs.set_annot_verts(aid_list, vert_list_orig) assert vert_list_orig == ibs.get_annot_verts( aid_list), 'Verts were not reset to original state' assert bbox_list_orig == ibs.get_annot_bboxes( aid_list), 'Bboxes were not reset to original state' """ set_image_gps / get_image_gps """ gid_list = ibs.get_valid_gids() assert gids, 'gid_list is empty' gps_list_orig = ibs.get_image_gps(gid_list) gps_list = [(x, y) for (x, y) in zip(range(len(gid_list)), range(len(gid_list)))] ibs.set_image_gps(gid_list, gps_list) gps_list2 = ibs.get_image_gps(gid_list) assert gps_list == gps_list2, 'gps lists do not match' ibs.set_image_gps(gid_list, gps_list_orig) assert gps_list_orig == ibs.get_image_gps( gid_list), 'gps was not reset to original state' """ set imageset imagesettext / get imageset imagesettext """ imgsetid_list = ibs.get_valid_imgsetids() enc_text_list_orig = ibs.get_imageset_text(imgsetid_list) enc_text_list = [str(x) for x in range(len(imgsetid_list))] assert imgsetid_list, 'imgsetid_list is empty' print('len imgsetid_list: %d' % len(imgsetid_list)) ibs.set_imageset_text(imgsetid_list, enc_text_list) enc_text_list2 = ibs.get_imageset_text(imgsetid_list) print('enc_text_list = %r' % enc_text_list) print('enc_text_list2 = %r' % enc_text_list2) assert enc_text_list == enc_text_list2, 'imageset text lists do not match' ibs.set_imageset_text(imgsetid_list, enc_text_list_orig) assert enc_text_list_orig == ibs.get_imageset_text( imgsetid_list), 'enc text was not reset' """ set annotation names / get_annot_names """ aid_list = ibs.get_valid_aids() assert aid_list, 'aid_list is empty' orig_names = ibs.get_annot_names(aid_list) new_names = ['TESTNAME_' + str(x) for x in range(len(aid_list))] ibs.set_annot_names(aid_list, new_names) new_names2 = ibs.get_annot_names(aid_list) try: assert new_names == new_names2, 'new_names == new_names2 failed!' except AssertionError as ex: utool.printex(ex, key_list=['new_names', 'new_names2']) raise ibs.set_annot_names(aid_list, orig_names) try: test_names = ibs.get_annot_names(aid_list) assert orig_names == test_names except AssertionError as ex: utool.printex(ex, key_list=['orig_names', 'test_names']) raise """ set annotation species / get annotation species """ aid_list = ibs.get_valid_aids() assert aid_list, 'aid_list is empty' orig_species = ibs.get_annot_species_texts(aid_list) print('orig_species = %r' % (orig_species, )) valid_species = ibs.get_all_species_texts() new_species = [ valid_species[x % len(valid_species)] for x in range(len(aid_list)) ] print('new_species = %r' % (new_species, )) ibs.set_annot_species(aid_list, new_species) try: new_species2 = ibs.get_annot_species_texts(aid_list) assert new_species == new_species2, 'new_species == new_species2 failed!' except AssertionError as ex: utool.printex(ex, key_list=['new_species', 'new_species2']) raise ibs.set_annot_species(aid_list, orig_species) assert orig_species == ibs.get_annot_species_texts( aid_list), 'species were not reset' """ set alr confidence / get alr confidence """ if False: # NOT USING ALR TABLE CURRENTLY aid_list = ibs.get_valid_aids() assert aid_list, 'aid_list is empty' alrids_list = ibs.get_annot_alrids(aid_list) assert alrids_list, 'alrids_list is empty' alrid_list = utool.flatten(alrids_list) orig_confidences = ibs.get_alr_confidence(alrid_list) new_confidences = list(range(len(alrid_list))) #ibs.print_alr_table() ibs.set_alr_confidence(alrid_list, new_confidences) #ibs.print_alr_table() new_confidences2 = ibs.get_alr_confidence(alrid_list) assert new_confidences == new_confidences2, 'new_confidences == new_confidences2 failed' ibs.set_alr_confidence(alrid_list, orig_confidences) assert orig_confidences == ibs.get_alr_confidence( alrid_list), 'alr confidences were not reset' """ test metadata """ #ibs.print_tables() #ibs.print_lblannot_table() #ibs.print_alr_table() return locals()
def TEST_IBS_CONTROL(ibs): ibs.delete_all_encounters() ibs.compute_encounters() """ get_image_eids / get_encounter_gids """ eid_list = ibs.get_valid_eids() assert eid_list, 'eid_list is empty' gids_list = ibs.get_encounter_gids(eid_list) # print('[TEST] gids_list = %r' % gids_list) assert gids_list, 'gids_list is empty' for gids, eid in izip(gids_list, eid_list): eid_list2 = ibs.get_image_eids(gids) try: assert ([[eid]] * len(eid_list2)) == eid_list2 except AssertionError as ex: utool.printex(ex, key_list=['eid_list2', 'eid']) raise """ set_annot_notes / get_annot_notes """ aid_list = ibs.get_valid_aids() annotation_notes_list = len(aid_list) * ["test text"] assert aid_list, 'aid_list is empty' ibs.set_annot_notes(aid_list, annotation_notes_list) annotation_notes_list2 = ibs.get_annot_notes(aid_list) assert annotation_notes_list2, 'get_annot_notes returned an empty list' #print('[TEST] annotation_notes_list = %r' % annotation_notes_list) #print('[TEST] annotation_notes_list2 = %r' % annotation_notes_list2) assert annotation_notes_list == annotation_notes_list2, 'annotation notes lists do not match' """ set_name_notes / get_name_notes """ nid_list = ibs.get_valid_nids() assert nid_list, 'nid_list is empty' nid_notes_list = len(nid_list) * ['nid notes test'] ibs.set_name_notes(nid_list, nid_notes_list) nid_notes_list2 = ibs.get_name_notes(nid_list) print('[TEST] nid_notes_list = %r' % nid_notes_list) print('[TEST] nid_notes_list2 = %r' % nid_notes_list2) assert nid_notes_list == nid_notes_list2, 'nid notes lists do not match' """ set_image_notes / get_image_notes """ gid_list = ibs.get_valid_gids() assert gid_list, 'gid_list is empty' gid_notes_list = len(gid_list) * ['image note test'] ibs.set_image_notes(gid_list, gid_notes_list) gid_notes_list2 = ibs.get_image_notes(gid_list) print('[TEST] gid_notes_list = %r' % gid_notes_list) print('[TEST] gid_notes_list2 = %r' % gid_notes_list2) assert gid_notes_list == gid_notes_list2, 'images notes lists do not match' """ set_annot_bboxes / get_annot_bboxes """ aid_list = ibs.get_valid_aids() assert aid_list, 'aid_list is empty' bbox_list_orig = ibs.get_annot_bboxes(aid_list) bbox_list = [(1, 2, 3, 4)] * len(aid_list) ibs.set_annot_bboxes(aid_list, bbox_list) bbox_list2 = ibs.get_annot_bboxes(aid_list) print('[TEST] aid_list = %r' % (aid_list,)) print('[TEST] bbox_list = %r' % (bbox_list,)) print('[TEST] bbox_list2 = %r' % (bbox_list2,)) assert bbox_list == bbox_list2, 'bbox lists do not match' # put bboxes back to original state # (otherwise other tests will fail on the second run of run_tests.sh) ibs.set_annot_bboxes(aid_list, bbox_list_orig) """ set_annot_verts / get_annot_verts """ aid_list = ibs.get_valid_aids() assert aid_list, 'aid_list is empty' bbox_list_orig = ibs.get_annot_bboxes(aid_list) vert_list_orig = ibs.get_annot_verts(aid_list) vert_list = [((1, 2), (3, 4), (5, 6), (7, 8))] * len(aid_list) print('[TEST] vert_list = %r' % vert_list) assert len(aid_list) == len(vert_list), 'lengths do not match, malformed input' ibs.set_annot_verts(aid_list, vert_list) vert_list2 = ibs.get_annot_verts(aid_list) assert vert_list == vert_list2, 'vert lists do not match' """ set_annot_verts / get_annot_bboxes """ bbox_list = ibs.get_annot_bboxes(aid_list) bbox_list2 = geometry.bboxes_from_vert_list(vert_list2) assert bbox_list == bbox_list2, 'bbox lists do not match' vert_list = [((10, 10), (120, 10), (120, 120), (10, 120))] * len(aid_list) ibs.set_annot_verts(aid_list, vert_list) bbox_list3 = [(10, 10, 110, 110)] * len(aid_list) bbox_list4 = ibs.get_annot_bboxes(aid_list) assert bbox_list3 == bbox_list4, 'bbox lists do not match' # finish this test here """ set_annot_bboxes / get_annot_verts """ bbox_list = [(10, 10, 110, 110)] * len(aid_list) ibs.set_annot_bboxes(aid_list, bbox_list) # test that setting the bounding boxes overrides the vertices vert_list = [((10, 10), (120, 10), (120, 120), (10, 120))] * len(aid_list) vert_list2 = ibs.get_annot_verts(aid_list) assert vert_list == vert_list2, 'vert lists do not match' # put verts back to original state # (otherwise other tests will fail on the second run of run_tests.sh) ibs.set_annot_verts(aid_list, vert_list_orig) assert vert_list_orig == ibs.get_annot_verts(aid_list), 'Verts were not reset to original state' assert bbox_list_orig == ibs.get_annot_bboxes(aid_list), 'Bboxes were not reset to original state' """ set_image_gps / get_image_gps """ gid_list = ibs.get_valid_gids() assert gids, 'gid_list is empty' gps_list_orig = ibs.get_image_gps(gid_list) gps_list = [(x, y) for (x, y) in zip(range(len(gid_list)), range(len(gid_list)))] ibs.set_image_gps(gid_list, gps_list) gps_list2 = ibs.get_image_gps(gid_list) assert gps_list == gps_list2, 'gps lists do not match' ibs.set_image_gps(gid_list, gps_list_orig) assert gps_list_orig == ibs.get_image_gps(gid_list), 'gps was not reset to original state' """ set encounter enctext / get encounter enctext """ eid_list = ibs.get_valid_eids() enc_text_list_orig = ibs.get_encounter_enctext(eid_list) enc_text_list = [str(x) for x in range(len(eid_list))] assert eid_list, 'eid_list is empty' print('len eid_list: %d' % len(eid_list)) ibs.set_encounter_enctext(eid_list, enc_text_list) enc_text_list2 = ibs.get_encounter_enctext(eid_list) print('enc_text_list = %r' % enc_text_list) print('enc_text_list2 = %r' % enc_text_list2) assert enc_text_list == enc_text_list2, 'encounter text lists do not match' ibs.set_encounter_enctext(eid_list, enc_text_list_orig) assert enc_text_list_orig == ibs.get_encounter_enctext(eid_list), 'enc text was not reset' """ set annotation names / get_annot_names """ aid_list = ibs.get_valid_aids() assert aid_list, 'aid_list is empty' orig_names = ibs.get_annot_names(aid_list) new_names = ['TESTNAME_' + str(x) for x in xrange(len(aid_list))] ibs.set_annot_names(aid_list, new_names) new_names2 = ibs.get_annot_names(aid_list) try: assert new_names == new_names2, 'new_names == new_names2 failed!' except AssertionError as ex: utool.printex(ex, key_list=['new_names', 'new_names2']) raise ibs.set_annot_names(aid_list, orig_names) try: test_names = ibs.get_annot_names(aid_list) assert orig_names == test_names except AssertionError as ex: utool.printex(ex, key_list=['orig_names', 'test_names']) raise """ set annotation species / get annotation species """ aid_list = ibs.get_valid_aids() assert aid_list, 'aid_list is empty' orig_species = ibs.get_annot_species(aid_list) print('orig_species = %r' % (orig_species,)) new_species = [constants.VALID_SPECIES[x % len(constants.VALID_SPECIES)] for x in range(len(aid_list))] print('new_species = %r' % (new_species,)) ibs.set_annot_species(aid_list, new_species) try: new_species2 = ibs.get_annot_species(aid_list) assert new_species == new_species2, 'new_species == new_species2 failed!' except AssertionError as ex: utool.printex(ex, key_list=['new_species', 'new_species2']) raise ibs.set_annot_species(aid_list, orig_species) assert orig_species == ibs.get_annot_species(aid_list), 'species were not reset' """ set alr confidence / get alr confidence """ aid_list = ibs.get_valid_aids() assert aid_list, 'aid_list is empty' alrids_list = ibs.get_annot_alrids(aid_list) assert alrids_list, 'alrids_list is empty' alrid_list = utool.flatten(alrids_list) orig_confidences = ibs.get_alr_confidence(alrid_list) new_confidences = range(len(alrid_list)) #ibs.print_alr_table() ibs.set_alr_confidence(alrid_list, new_confidences) #ibs.print_alr_table() new_confidences2 = ibs.get_alr_confidence(alrid_list) assert new_confidences == new_confidences2, 'new_confidences == new_confidences2 failed' ibs.set_alr_confidence(alrid_list, orig_confidences) assert orig_confidences == ibs.get_alr_confidence(alrid_list), 'alr confidences were not reset' """ test metadata """ #ibs.print_tables() ibs.print_lblannot_table() ibs.print_alr_table() return locals()
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 print('[ibs] WARNING: 0 annotations are beign added!') print(ut.dict_str(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 = [const.__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)
def TEST_IBS_CONTROL(ibs): ibs.delete_all_imagesets() ibs.compute_occurrences() """ get_image_imgsetids / get_imageset_gids """ imgsetid_list = ibs.get_valid_imgsetids() assert imgsetid_list, "imgsetid_list is empty" gids_list = ibs.get_imageset_gids(imgsetid_list) # print('[TEST] gids_list = %r' % gids_list) assert gids_list, "gids_list is empty" for gids, imgsetid in zip(gids_list, imgsetid_list): imgsetid_list2 = ibs.get_image_imgsetids(gids) try: assert ([[imgsetid]] * len(imgsetid_list2)) == imgsetid_list2 except AssertionError as ex: utool.printex(ex, key_list=["imgsetid_list2", "imgsetid"]) raise """ set_annot_notes / get_annot_notes """ aid_list = ibs.get_valid_aids() annotation_notes_list = len(aid_list) * ["test text"] assert aid_list, "aid_list is empty" ibs.set_annot_notes(aid_list, annotation_notes_list) annotation_notes_list2 = ibs.get_annot_notes(aid_list) assert annotation_notes_list2, "get_annot_notes returned an empty list" # print('[TEST] annotation_notes_list = %r' % annotation_notes_list) # print('[TEST] annotation_notes_list2 = %r' % annotation_notes_list2) assert annotation_notes_list == annotation_notes_list2, "annotation notes lists do not match" """ set_name_notes / get_name_notes """ nid_list = ibs.get_valid_nids() assert nid_list, "nid_list is empty" nid_notes_list = len(nid_list) * ["nid notes test"] ibs.set_name_notes(nid_list, nid_notes_list) nid_notes_list2 = ibs.get_name_notes(nid_list) print("[TEST] nid_notes_list = %r" % nid_notes_list) print("[TEST] nid_notes_list2 = %r" % nid_notes_list2) utool.assert_lists_eq(nid_notes_list, nid_notes_list2, "nid notes lists do not match", verbose=True) assert nid_notes_list == nid_notes_list2, "nid notes lists do not match" """ set_image_notes / get_image_notes """ gid_list = ibs.get_valid_gids() assert gid_list, "gid_list is empty" gid_notes_list = len(gid_list) * ["image note test"] ibs.set_image_notes(gid_list, gid_notes_list) gid_notes_list2 = ibs.get_image_notes(gid_list) print("[TEST] gid_notes_list = %r" % gid_notes_list) print("[TEST] gid_notes_list2 = %r" % gid_notes_list2) assert gid_notes_list == gid_notes_list2, "images notes lists do not match" """ set_annot_bboxes / get_annot_bboxes """ aid_list = ibs.get_valid_aids() assert aid_list, "aid_list is empty" bbox_list_orig = ibs.get_annot_bboxes(aid_list) bbox_list = [(1, 2, 3, 4)] * len(aid_list) ibs.set_annot_bboxes(aid_list, bbox_list) bbox_list2 = ibs.get_annot_bboxes(aid_list) print("[TEST] aid_list = %r" % (aid_list,)) print("[TEST] bbox_list = %r" % (bbox_list,)) print("[TEST] bbox_list2 = %r" % (bbox_list2,)) assert bbox_list == bbox_list2, "bbox lists do not match" # put bboxes back to original state # (otherwise other tests will fail on the second run of run_tests.sh) ibs.set_annot_bboxes(aid_list, bbox_list_orig) """ set_annot_verts / get_annot_verts """ aid_list = ibs.get_valid_aids() assert aid_list, "aid_list is empty" bbox_list_orig = ibs.get_annot_bboxes(aid_list) vert_list_orig = ibs.get_annot_verts(aid_list) vert_list = [((1, 2), (3, 4), (5, 6), (7, 8))] * len(aid_list) print("[TEST] vert_list = %r" % vert_list) assert len(aid_list) == len(vert_list), "lengths do not match, malformed input" ibs.set_annot_verts(aid_list, vert_list) vert_list2 = ibs.get_annot_verts(aid_list) assert vert_list == vert_list2, "vert lists do not match" """ set_annot_verts / get_annot_bboxes """ bbox_list = ibs.get_annot_bboxes(aid_list) bbox_list2 = geometry.bboxes_from_vert_list(vert_list2) assert bbox_list == bbox_list2, "bbox lists do not match" vert_list = [((10, 10), (120, 10), (120, 120), (10, 120))] * len(aid_list) ibs.set_annot_verts(aid_list, vert_list) bbox_list3 = [(10, 10, 110, 110)] * len(aid_list) bbox_list4 = ibs.get_annot_bboxes(aid_list) assert bbox_list3 == bbox_list4, "bbox lists do not match" # finish this test here """ set_annot_bboxes / get_annot_verts """ bbox_list = [(10, 10, 110, 110)] * len(aid_list) ibs.set_annot_bboxes(aid_list, bbox_list) # test that setting the bounding boxes overrides the vertices vert_list = [((10, 10), (120, 10), (120, 120), (10, 120))] * len(aid_list) vert_list2 = ibs.get_annot_verts(aid_list) assert vert_list == vert_list2, "vert lists do not match" # put verts back to original state # (otherwise other tests will fail on the second run of run_tests.sh) ibs.set_annot_verts(aid_list, vert_list_orig) assert vert_list_orig == ibs.get_annot_verts(aid_list), "Verts were not reset to original state" assert bbox_list_orig == ibs.get_annot_bboxes(aid_list), "Bboxes were not reset to original state" """ set_image_gps / get_image_gps """ gid_list = ibs.get_valid_gids() assert gids, "gid_list is empty" gps_list_orig = ibs.get_image_gps(gid_list) gps_list = [(x, y) for (x, y) in zip(range(len(gid_list)), range(len(gid_list)))] ibs.set_image_gps(gid_list, gps_list) gps_list2 = ibs.get_image_gps(gid_list) assert gps_list == gps_list2, "gps lists do not match" ibs.set_image_gps(gid_list, gps_list_orig) assert gps_list_orig == ibs.get_image_gps(gid_list), "gps was not reset to original state" """ set imageset imagesettext / get imageset imagesettext """ imgsetid_list = ibs.get_valid_imgsetids() enc_text_list_orig = ibs.get_imageset_text(imgsetid_list) enc_text_list = [str(x) for x in range(len(imgsetid_list))] assert imgsetid_list, "imgsetid_list is empty" print("len imgsetid_list: %d" % len(imgsetid_list)) ibs.set_imageset_text(imgsetid_list, enc_text_list) enc_text_list2 = ibs.get_imageset_text(imgsetid_list) print("enc_text_list = %r" % enc_text_list) print("enc_text_list2 = %r" % enc_text_list2) assert enc_text_list == enc_text_list2, "imageset text lists do not match" ibs.set_imageset_text(imgsetid_list, enc_text_list_orig) assert enc_text_list_orig == ibs.get_imageset_text(imgsetid_list), "enc text was not reset" """ set annotation names / get_annot_names """ aid_list = ibs.get_valid_aids() assert aid_list, "aid_list is empty" orig_names = ibs.get_annot_names(aid_list) new_names = ["TESTNAME_" + str(x) for x in range(len(aid_list))] ibs.set_annot_names(aid_list, new_names) new_names2 = ibs.get_annot_names(aid_list) try: assert new_names == new_names2, "new_names == new_names2 failed!" except AssertionError as ex: utool.printex(ex, key_list=["new_names", "new_names2"]) raise ibs.set_annot_names(aid_list, orig_names) try: test_names = ibs.get_annot_names(aid_list) assert orig_names == test_names except AssertionError as ex: utool.printex(ex, key_list=["orig_names", "test_names"]) raise """ set annotation species / get annotation species """ aid_list = ibs.get_valid_aids() assert aid_list, "aid_list is empty" orig_species = ibs.get_annot_species_texts(aid_list) print("orig_species = %r" % (orig_species,)) valid_species = ibs.get_all_species_texts() new_species = [valid_species[x % len(valid_species)] for x in range(len(aid_list))] print("new_species = %r" % (new_species,)) ibs.set_annot_species(aid_list, new_species) try: new_species2 = ibs.get_annot_species_texts(aid_list) assert new_species == new_species2, "new_species == new_species2 failed!" except AssertionError as ex: utool.printex(ex, key_list=["new_species", "new_species2"]) raise ibs.set_annot_species(aid_list, orig_species) assert orig_species == ibs.get_annot_species_texts(aid_list), "species were not reset" """ set alr confidence / get alr confidence """ if False: # NOT USING ALR TABLE CURRENTLY aid_list = ibs.get_valid_aids() assert aid_list, "aid_list is empty" alrids_list = ibs.get_annot_alrids(aid_list) assert alrids_list, "alrids_list is empty" alrid_list = utool.flatten(alrids_list) orig_confidences = ibs.get_alr_confidence(alrid_list) new_confidences = list(range(len(alrid_list))) # ibs.print_alr_table() ibs.set_alr_confidence(alrid_list, new_confidences) # ibs.print_alr_table() new_confidences2 = ibs.get_alr_confidence(alrid_list) assert new_confidences == new_confidences2, "new_confidences == new_confidences2 failed" ibs.set_alr_confidence(alrid_list, orig_confidences) assert orig_confidences == ibs.get_alr_confidence(alrid_list), "alr confidences were not reset" """ test metadata """ # ibs.print_tables() # ibs.print_lblannot_table() # ibs.print_alr_table() return locals()