def detect_duplicate_images(imgpath_list): import sys global DUPLICATE_HASH_PRECISION nImg = len(imgpath_list) lbl = 'checking duplicate' duplicates = {} mark_progress, end_progress = helpers.progress_func(nImg, lbl=lbl) for count, gpath in enumerate(imgpath_list): mark_progress(count) img = imread(gpath) img_hash = helpers.hashstr(img, DUPLICATE_HASH_PRECISION) if not img_hash in duplicates: duplicates[img_hash] = [] duplicates[img_hash].append(gpath) if '--strict' in sys.argv: # Be very safe: Check for collisions for hashstr, gpath_list in duplicates.iteritems(): img1 = imread(gpath_list[0]) for gpath in gpath_list: img2 = imread(gpath) if not np.all(img1 == img2): DUPLICATE_HASH_PRECISION += 8 raise Exception("hash collision. try again") end_progress() return duplicates
def __args2_fpath(dpath, fname, uid, ext): if len(ext) > 0 and ext[0] != '.': raise Exception('Fatal Error: Please be explicit and use a dot in ext') fname_uid = fname + uid if len(fname_uid) > 128: fname_uid = fname + '_' + helpers.hashstr(fname_uid, 8) fpath = join(dpath, fname_uid + ext) fpath = normpath(fpath) return fpath
def __args2_fpath(dpath, fname, uid, ext): if len(ext) > 0 and ext[0] != '.': raise Exception('Fatal Error: Please be explicit and use a dot in ext') fname_uid = fname + uid if len(fname_uid) > 128: fname_uid = helpers.hashstr(fname_uid) fpath = join(dpath, fname_uid + ext) fpath = realpath(fpath) fpath = normpath(fpath) return fpath
def get_oxsty_mAP_score_from_res(hs, res, SV, oxsty_qres_dpath, compute_ap_exe, oxford_gt_dir): # find oxford ground truth directory cwd = os.getcwd() # build groundtruth query qcx = res.qcx qnx = hs.tables.cx2_nx[qcx] cx2_oxnum = hs.tables.prop_dict['oxnum'] qoxnum = cx2_oxnum[qcx] qname = hs.tables.nx2_name[qnx] # build ranked list cx2_score = res.cx2_score_V if SV else res.cx2_score top_cx = cx2_score.argsort()[::-1] top_gx = hs.tables.cx2_gx[top_cx] top_gname = hs.tables.gx2_gname[top_gx] # build mAP args if qoxnum == '': print("HACK: Adding a dummy qoxynum") qoxnum = '1' ground_truth_query = qname+'_'+qoxnum # build ranked list of gnames (remove duplicates) seen = set([]) ranked_list = [] for gname in iter(top_gname): gname_ = gname.replace('.jpg','') if not gname_ in seen: seen.add(gname_) ranked_list.append(gname_) ranked_list2 = [gname.replace('.jpg','') for gname in top_gname] # Write the ranked list of images names cx_aug = 'qcx_'+str(qcx) ranked_list_fname = 'ranked_list_' + cx_aug + ground_truth_query + '.txt' ranked_list_fpath = join(oxsty_qres_dpath, ranked_list_fname) helpers.write_to(ranked_list_fpath, '\n'.join(ranked_list)) # execute external mAP code: # ./compute_ap [GROUND_TRUTH] [RANKED_LIST] os.chdir(oxford_gt_dir) def filename(path): return os.path.split(path)[1] if OXSTY_VERBOSE: printable_cmd = ' '.join((filename(compute_ap_exe), ground_truth_query, filename(ranked_list_fpath))) print('Executing: %r' % printable_cmd) else: helpers.print_('.') args = (compute_ap_exe, ground_truth_query, ranked_list_fpath) cmdstr = ' '.join(args) try: proc_out = run_process(args) out = proc_out.out except OSError as ex: out = -1 if OXSTY_VERBOSE: print(repr(ex)) if repr(ex) == "OSError(12, 'Cannot allocate memory')": args_hash = helpers.hashstr(args) proc_err_fname = 'proc_err'+args_hash proc_err_cmd = proc_err_fname+'.cmd' proc_err_out = proc_err_fname+'.out' helpers.write_to(proc_err_cmd, repr(args)) if helpers.checkpath(proc_err_out): out = helpers.read_from(proc_err_out) mAP = float(out.strip()) os.chdir(cwd) return mAP