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)
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()
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()