def main(imagedir, sim=0.5): """Example main app using this library. Parameters ---------- imagedir : str path to directory with images sim : float (0..1) similarity index (see imagecluster.cluster()) """ dbfn = pj(imagedir, ic_base_dir, 'fingerprints.pk') # print("dbfn= " + dbfn) if not os.path.exists(dbfn): os.makedirs(os.path.dirname(dbfn), exist_ok=True) print("no fingerprints database {} found".format(dbfn)) files = co.get_files(imagedir) model = ic.get_model() print("running all images through NN model ...".format(dbfn)) fps = ic.fingerprints(files, model, size=(224, 224)) # print(fps) co.write_pk(fps, dbfn) else: print("loading fingerprints database {} ...".format(dbfn)) fps = co.read_pk(dbfn) print("clustering ...") print(len(fps)) clusters = ic.cluster(fps, sim) help(imagedir, clusters) ic.make_links(ic.cluster(fps, sim), pj(imagedir, ic_base_dir, 'clusters'))
def linkParts(ic_base_dir=ic_base_dir, sim=sim): """ Link all divided part by each divided finger-print :param ic_base_dir: :param sim: :return: """ for dirpath, dirnames, filenames in os.walk(ic_base_dir): dircs = dirnames break if dircs.__len__() == 0: print('Try to link images , no former folder found !') spiltFP(fpdir=fingerPrintDir, ic_base_dir=ic_base_dir) for dirpath, dirnames, filenames in os.walk(ic_base_dir): dircs = dirnames break i = 0 for f_dir in dircs: fpdict = co.read_pk(ic_base_dir + '/' + f_dir + '/fingerprints.pk') print("[dict%d] with %d is clusting [sim=%f]" % (i, fpdict.__len__(), sim)) ic.make_links(ic.cluster(dict(fpdict), sim, method='average'), ic_base_dir + '/part' + str(i) + '/cluster') i += 1 del fpdict
def main(imagedir, processingDir, similarity=.4): imageFeaturePath = pathJoin(processingDir, 'imagefeatures.pk') if not os.path.exists(imageFeaturePath): common.makeDir(imageFeaturePath) print("No imagefeatures database {} found".format(imageFeaturePath)) files = common.get_files(imagedir) model = imagecluster.get_model() fps = imagecluster.fingerprints(files, model, size=(224, 224)) common.write_pk(fps, imageFeaturePath) else: print("loading fingerprints database {} ...".format(imageFeaturePath)) fps = common.read_pk(imageFeaturePath) print("clustering ...") imagecluster.make_links(imagecluster.cluster(fps, similarity), pathJoin(imagedir, processingDir, 'clusters'))
def spiltFP(fpdir=fingerPrintDir, ic_base_dir=ic_base_dir): """ Spilt a large finger-print file to several smaller ones :param fpdir: The source finger-print file direction :param ic_base_dir: Divided ones root location :param spiltnum: The num to spilt the source file :return: nothing """ fps = co.read_pk(fpdir + '/fingerprints.pk') print('total num of fingerprints : %d' % fps.__len__()) step = stepNum # Pre-set step len = fps.__len__() spiltnum = len / step if spiltnum > 1 and (len - step * (spiltnum - 1)) < step / 2: spiltnum -= 1 step = math.ceil(len * 1.0 / spiltnum) dicts = [{}] i = 0 count = 0 for k, v in fps.items(): dicts[i][k] = v count += 1 if (count == step): i += 1 count = 0 dicts.append({}) print('Spilt fps in %d dicts ' % (i + 1)) i = 0 for fpdict in dicts: fp_newdir = ic_base_dir + '/part' + str(i) + '/fingerprints.pk' print("[dict%d] has %d element writen in %s " % (i, fpdict.__len__(), fp_newdir)) if not os.path.exists(ic_base_dir + '/part' + str(i)): os.makedirs(ic_base_dir + '/part' + str(i)) co.write_pk(fpdict, fp_newdir) i += 1 del fps, dicts
def init_df(): # initialize dataframe and run pipeline dbfn = os.path.join(imagedir, ic_base_dir, 'db.pk') if not os.path.exists(dbfn): os.makedirs(os.path.dirname(dbfn), exist_ok=True) print("no fingerprints database found in {}".format(dbfn)) #fps = ic.fingerprints(files, model, size=(input_size,input_size), modelname=modelname) df_exists = 'df' in locals() or 'df' in globals() if not df_exists: print("Running processing pipeline ...") df = process_dataset(imagedir) else: print("df exists already.") print("writing {}".format(dbfn)) co.write_pk(df, dbfn) else: print("loading fingerprints database {} ...".format(dbfn)) df = co.read_pk(dbfn) print("done.") return df, dbfn
def linkTest(ic_base_dir=ic_base_dir, sim=sim): """ Random link a divided part by its divided finger-print :param ic_base_dir: :param sim: :return: """ for dirpath, dirnames, filenames in os.walk(ic_base_dir): dircs = dirnames break if dircs.__len__() == 0: print('no former folder found !') spiltFP() print('Link test') f_dir = dircs[random.randint(0, dircs.__len__() - 1)] fpdict = co.read_pk(ic_base_dir + '/' + f_dir + '/fingerprints.pk') print("[%s] with %d is clusting " % (f_dir, fpdict.__len__())) ic.make_links(ic.cluster(dict(fpdict), sim, method='average'), ic_base_dir + '/' + f_dir + '/cluster') del fpdict gc.collect()