コード例 #1
0
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)
コード例 #2
0
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()
コード例 #3
0
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()
コード例 #4
0
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)
コード例 #5
0
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
コード例 #6
0
ファイル: test_ibs_control.py プロジェクト: whaozl/ibeis
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()
コード例 #7
0
ファイル: test_ibs_control.py プロジェクト: byteyoo/ibeis
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()
コード例 #8
0
ファイル: preproc_annot.py プロジェクト: Erotemic/ibeis
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)
コード例 #9
0
ファイル: test_ibs_control.py プロジェクト: Erotemic/ibeis
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()