def export_subdatabase_all_annots_new(ibs):
    """
    Exports a set with some number of annotations that has good demo examples.
    multiple annotations per name and large time variation within names.

    Args:
        ibs (IBEISController):  ibeis controller object

    CommandLine:
        python -m ibeis.other.ibsfuncs --test-export_subdatabase_all_annots_new --db GIR_Tanya

    Example:
        >>> # DISABLE_DOCTEST
        >>> from ibeis.other.ibsfuncs import *  # NOQA
        >>> import ibeis
        >>> ibs = ibeis.opendb()
        >>> print(ibs.get_dbinfo_str())
        >>> result = export_subdatabase_all_annots_new(ibs)
        >>> # verify results
        >>> print(result)

    min_num_annots = 500
    """
    aid_list = ibs.get_valid_aids()
    gid_list = list(set(ibs.get_annot_gids(aid_list)))

    from ibeis.dbio import export_subset

    def new_nonconflicting_dbpath(ibs):
        dpath, dbname = split(ibs.get_dbdir())
        base_fmtstr = dbname + '_demo' + 'all_annots' + '_export%d'
        new_dbpath = ut.get_nonconflicting_path(base_fmtstr, dpath)
        return new_dbpath

    #ut.embed()

    dbpath = new_nonconflicting_dbpath(ibs)
    ibs_dst = ibeis.opendb(dbdir=dbpath, allow_newdir=True)
    ibs_src = ibs
    export_subset.merge_databases(ibs_src, ibs_dst, gid_list=gid_list)
示例#2
0
def export_subdatabase_all_annots_new(ibs):
    """
    Exports a set with some number of annotations that has good demo examples.
    multiple annotations per name and large time variation within names.

    Args:
        ibs (IBEISController):  ibeis controller object

    CommandLine:
        python -m ibeis.other.ibsfuncs --test-export_subdatabase_all_annots_new --db GIR_Tanya

    Example:
        >>> # DISABLE_DOCTEST
        >>> from ibeis.other.ibsfuncs import *  # NOQA
        >>> import ibeis
        >>> ibs = ibeis.opendb()
        >>> print(ibs.get_dbinfo_str())
        >>> result = export_subdatabase_all_annots_new(ibs)
        >>> # verify results
        >>> print(result)

    min_num_annots = 500
    """
    aid_list = ibs.get_valid_aids()
    gid_list = list(set(ibs.get_annot_gids(aid_list)))

    from ibeis.dbio import export_subset

    def new_nonconflicting_dbpath(ibs):
        dpath, dbname = split(ibs.get_dbdir())
        base_fmtstr = dbname + '_demo' + 'all_annots' + '_export%d'
        new_dbpath = ut.get_nonconflicting_path(base_fmtstr, dpath)
        return new_dbpath

    #ut.embed()

    dbpath = new_nonconflicting_dbpath(ibs)
    ibs_dst = ibeis.opendb(dbdir=dbpath, allow_newdir=True)
    ibs_src = ibs
    export_subset.merge_databases(ibs_src, ibs_dst, gid_list=gid_list)
示例#3
0
def slow_merge_test():
    r"""
    CommandLine:
        python -m ibeis.dbio.export_subset --test-slow_merge_test

    Example:
        >>> # SLOW_DOCTEST
        >>> from ibeis.dbio.export_subset import *  # NOQA
        >>> result = slow_merge_test()
        >>> print(result)
    """
    from ibeis.dbio import export_subset
    import ibeis
    ibs1 = ibeis.opendb('testdb2')
    ibs1.fix_invalid_annotmatches()
    ibs_dst = ibeis.opendb(
        db='testdb_dst2', allow_newdir=True, delete_ibsdir=True)
    export_subset.merge_databases(ibs1, ibs_dst)
    #ibs_src = ibs1
    check_merge(ibs1, ibs_dst)

    ibs2 = ibeis.opendb('testdb1')
    ibs1.print_dbinfo()
    ibs2.print_dbinfo()
    ibs_dst.print_dbinfo()

    ibs_dst.print_dbinfo()

    export_subset.merge_databases(ibs2, ibs_dst)
    #ibs_src = ibs2
    check_merge(ibs2, ibs_dst)

    ibs3 = ibeis.opendb('PZ_MTEST')
    export_subset.merge_databases(ibs3, ibs_dst)
    #ibs_src = ibs2
    check_merge(ibs3, ibs_dst)

    ibs_dst.print_dbinfo()
    return ibs_dst
def export_testset_for_chuck(ibs, min_num_annots):
    """
    Exports a set with some number of annotations that has good demo examples.
    multiple annotations per name and large time variation within names.

    Args:
        ibs (IBEISController):  ibeis controller object

    CommandLine:
        python -m ibeis.other.ibsfuncs --test-export_testset_for_chuck --dbdir /raid/work2/Turk/PZ_Master --min-num-annots 100
        python -m ibeis.other.ibsfuncs --test-export_testset_for_chuck --dbdir /raid/work2/Turk/PZ_Master --min-num-annots 500

        python -m ibeis.other.ibsfuncs --test-export_testset_for_chuck --dbdir /raid/work2/Turk/GZ_Master --min-num-annots 100
        python -m ibeis.other.ibsfuncs --test-export_testset_for_chuck --dbdir
        /raid/work2/Turk/GZ_Master --min-num-annots 500_DOCTEST


        python -m ibeis.other.ibsfuncs --test-export_testset_for_chuck --db GIR_Tanya --min-num-annots 100

    Example:
        >>> # DISABLE_DOCTEST
        >>> from ibeis.other.ibsfuncs import *  # NOQA
        >>> import ibeis
        >>> # build test data
        >>> #dbdir = ut.get_argval(('--dbdir',), type_=str, default='testdb1')
        >>> min_num_annots = ut.get_argval(('--min-num-annots',), type_=int, default=500)
        >>> #ibs = ibeis.opendb('testdb1')
        >>> #ibs = ibeis.opendb(dbdir='/raid/work2/Turk/PZ_Master')
        >>> ibs = ibeis.opendb()  # dbdir=dbdir)
        >>> #ibs = ibeis.opendb(dbdir='/raid/work2/Turk/GZ_Master')
        >>> print(ibs.get_dbinfo_str())
        >>> #ibs = ibeis.opendb('testdb1')
        >>> # execute function
        >>> result = export_testset_for_chuck(ibs, min_num_annots)
        >>> # verify results
        >>> print(result)

    min_num_annots = 500
    """
    import numpy as np

    min_num_annots_per_name = 3
    max_annot_per_image = 5
    #3

    #min_num_annots_per_name = 1
    #max_annot_per_image = 3000

    nid_list = ibs.get_valid_nids()
    aids_list = ibs.get_name_aids(nid_list)
    nAids_list = list(map(len, aids_list))
    nOther_aids_list = ibs.unflat_map(ibs.get_annot_num_contact_aids, aids_list)

    invalid_by_num_annots = [num < min_num_annots_per_name for num in nAids_list]
    invalid_by_num_others = [any([num > max_annot_per_image for num in nums])
                             for nums in nOther_aids_list]
    invalid_list = ut.or_lists(invalid_by_num_annots, invalid_by_num_others)

    valid_nids = ut.filterfalse_items(nid_list, invalid_list)

    def get_name_time_variation(ibs, nid_list):
        aids_list      = ibs.get_name_aids(nid_list)
        unixtimes_list = ibs.unflat_map(ibs.get_annot_image_unixtimes, aids_list)
        unixtimes_arrs = list(map(np.array, unixtimes_list))
        fixtimes_list  = [arr[arr > 0] for arr in unixtimes_arrs]
        std_list       = [np.std(arr) if len(arr) > 1 else 0 for arr in fixtimes_list]
        return std_list

    std_list = get_name_time_variation(ibs, valid_nids)
    sorted_nids = ut.sortedby(valid_nids, std_list, reverse=True)

    # Find which names to include
    num_annot_cumsum = np.cumsum(ibs.get_name_num_annotations(sorted_nids))
    pos_list = np.where(num_annot_cumsum >= min_num_annots)[0]
    assert len(pos_list) > 0

    nid_list_chosen = sorted_nids[:pos_list[0] + 1]
    print('using names:')
    print(ibs.get_name_texts(nid_list_chosen))
    aids_list_chosen = ibs.get_name_aids(nid_list_chosen)
    aid_list_chosen = ut.flatten(aids_list_chosen)
    gid_list_chosen = ibs.get_annot_gids(aid_list_chosen)
    #ut.debug_duplicate_items(gid_list_chosen)

    # make sure not too many other annots are along for the ride
    other_aids = ibs.get_annot_contact_aids(aid_list_chosen)
    unexpected_aids = list(set(ut.flatten(other_aids)).difference(set(aid_list_chosen)))
    print('got %d unexpected_aids' % (len(unexpected_aids),))

    from ibeis.dbio import export_subset

    def new_nonconflicting_dbpath(ibs):
        dpath, dbname = split(ibs.get_dbdir())
        base_fmtstr = dbname + '_demo' + str(min_num_annots) + '_export%d'
        new_dbpath = ut.get_nonconflicting_path(base_fmtstr, dpath)
        return new_dbpath

    #ut.embed()

    dbpath = new_nonconflicting_dbpath(ibs)
    ibs_dst = ibeis.opendb(dbdir=dbpath, allow_newdir=True)
    ibs_src = ibs
    gid_list = gid_list_chosen
    export_subset.merge_databases(ibs_src, ibs_dst, gid_list=gid_list)

    DEBUG_NAME = False
    if DEBUG_NAME:
        ibs.get_name_num_annotations(sorted_nids[0:10])
        import plottool as pt
        ibeis.viz.viz_name.show_name(ibs, sorted_nids[0])
        pt.update()
示例#5
0
def export_testset_for_chuck(ibs, min_num_annots):
    """
    Exports a set with some number of annotations that has good demo examples.
    multiple annotations per name and large time variation within names.

    Args:
        ibs (IBEISController):  ibeis controller object

    CommandLine:
        python -m ibeis.other.ibsfuncs --test-export_testset_for_chuck --dbdir /raid/work2/Turk/PZ_Master --min-num-annots 100
        python -m ibeis.other.ibsfuncs --test-export_testset_for_chuck --dbdir /raid/work2/Turk/PZ_Master --min-num-annots 500

        python -m ibeis.other.ibsfuncs --test-export_testset_for_chuck --dbdir /raid/work2/Turk/GZ_Master --min-num-annots 100
        python -m ibeis.other.ibsfuncs --test-export_testset_for_chuck --dbdir
        /raid/work2/Turk/GZ_Master --min-num-annots 500_DOCTEST


        python -m ibeis.other.ibsfuncs --test-export_testset_for_chuck --db GIR_Tanya --min-num-annots 100

    Example:
        >>> # DISABLE_DOCTEST
        >>> from ibeis.other.ibsfuncs import *  # NOQA
        >>> import ibeis
        >>> # build test data
        >>> #dbdir = ut.get_argval(('--dbdir',), type_=str, default='testdb1')
        >>> min_num_annots = ut.get_argval(('--min-num-annots',), type_=int, default=500)
        >>> #ibs = ibeis.opendb('testdb1')
        >>> #ibs = ibeis.opendb(dbdir='/raid/work2/Turk/PZ_Master')
        >>> ibs = ibeis.opendb()  # dbdir=dbdir)
        >>> #ibs = ibeis.opendb(dbdir='/raid/work2/Turk/GZ_Master')
        >>> print(ibs.get_dbinfo_str())
        >>> #ibs = ibeis.opendb('testdb1')
        >>> # execute function
        >>> result = export_testset_for_chuck(ibs, min_num_annots)
        >>> # verify results
        >>> print(result)

    min_num_annots = 500
    """
    import numpy as np

    min_num_annots_per_name = 3
    max_annot_per_image = 5
    #3

    #min_num_annots_per_name = 1
    #max_annot_per_image = 3000

    nid_list = ibs.get_valid_nids()
    aids_list = ibs.get_name_aids(nid_list)
    nAids_list = list(map(len, aids_list))
    nOther_aids_list = ibs.unflat_map(ibs.get_annot_num_contact_aids,
                                      aids_list)

    invalid_by_num_annots = [
        num < min_num_annots_per_name for num in nAids_list
    ]
    invalid_by_num_others = [
        any([num > max_annot_per_image for num in nums])
        for nums in nOther_aids_list
    ]
    invalid_list = ut.or_lists(invalid_by_num_annots, invalid_by_num_others)

    valid_nids = ut.filterfalse_items(nid_list, invalid_list)

    def get_name_time_variation(ibs, nid_list):
        aids_list = ibs.get_name_aids(nid_list)
        unixtimes_list = ibs.unflat_map(ibs.get_annot_image_unixtimes,
                                        aids_list)
        unixtimes_arrs = list(map(np.array, unixtimes_list))
        fixtimes_list = [arr[arr > 0] for arr in unixtimes_arrs]
        std_list = [
            np.std(arr) if len(arr) > 1 else 0 for arr in fixtimes_list
        ]
        return std_list

    std_list = get_name_time_variation(ibs, valid_nids)
    sorted_nids = ut.sortedby(valid_nids, std_list, reverse=True)

    # Find which names to include
    num_annot_cumsum = np.cumsum(ibs.get_name_num_annotations(sorted_nids))
    pos_list = np.where(num_annot_cumsum >= min_num_annots)[0]
    assert len(pos_list) > 0

    nid_list_chosen = sorted_nids[:pos_list[0] + 1]
    print('using names:')
    print(ibs.get_name_texts(nid_list_chosen))
    aids_list_chosen = ibs.get_name_aids(nid_list_chosen)
    aid_list_chosen = ut.flatten(aids_list_chosen)
    gid_list_chosen = ibs.get_annot_gids(aid_list_chosen)
    #ut.debug_duplicate_items(gid_list_chosen)

    # make sure not too many other annots are along for the ride
    other_aids = ibs.get_annot_contact_aids(aid_list_chosen)
    unexpected_aids = list(
        set(ut.flatten(other_aids)).difference(set(aid_list_chosen)))
    print('got %d unexpected_aids' % (len(unexpected_aids), ))

    from ibeis.dbio import export_subset

    def new_nonconflicting_dbpath(ibs):
        dpath, dbname = split(ibs.get_dbdir())
        base_fmtstr = dbname + '_demo' + str(min_num_annots) + '_export%d'
        new_dbpath = ut.get_nonconflicting_path(base_fmtstr, dpath)
        return new_dbpath

    #ut.embed()

    dbpath = new_nonconflicting_dbpath(ibs)
    ibs_dst = ibeis.opendb(dbdir=dbpath, allow_newdir=True)
    ibs_src = ibs
    gid_list = gid_list_chosen
    export_subset.merge_databases(ibs_src, ibs_dst, gid_list=gid_list)

    DEBUG_NAME = False
    if DEBUG_NAME:
        ibs.get_name_num_annotations(sorted_nids[0:10])
        import plottool as pt
        ibeis.viz.viz_name.show_name(ibs, sorted_nids[0])
        pt.update()