import numpy as np import util as u parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--true-db', type=str, required=True, help='true labels') parser.add_argument('--predicted-db', type=str, required=True, help='predicted labels') opts = parser.parse_args() assert opts.true_db != opts.predicted_db true_db = LabelDB(label_db_file=opts.true_db) predicted_db = LabelDB(label_db_file=opts.predicted_db) # iterate over predicted_db; we expect true_db to be a super set of it. print("\t".join(["img", "#1_total", "#2_total", "ad", "#1_left", "#2_left"])) total_TP = total_FP = total_FN = 0 for img in predicted_db.imgs(): if not true_db.has_labels(img): # note: this can imply 0 labels raise Exception("img %s is in --predicted-db but not --true-db") true_labels = true_db.get_labels(img) predicted_labels = predicted_db.get_labels(img) TP, FP, FN = u.compare_sets(true_labels, predicted_labels) print("img", img, TP, FP, FN) total_TP += TP total_FP += FP total_FN += FN precision = total_TP / ( total_TP + total_FP ) recall = total_TP / ( total_TP + total_FN )
import os import sys import util as u # TODO: make this multiprocess, too slow as is... parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--label-db', type=str, help='label_db to materialise bitmaps from') parser.add_argument('--directory', type=str, help='directory to store bitmaps') opts = parser.parse_args() print(opts) label_db = LabelDB(label_db_file=opts.label_db) if not os.path.exists(opts.directory): os.makedirs(opts.directory) fnames = list(label_db.imgs()) for i, fname in enumerate(fnames): bitmap = u.xys_to_bitmap(xys=label_db.get_labels(fname), height=1024, width=768, rescale=0.5) single_channel_img = u.bitmap_to_single_channel_pil_image(bitmap) single_channel_img.save("%s/%s" % (opts.directory, fname.replace(".jpg", ".png"))) sys.stdout.write("%d/%d \r" % (i, len(fnames)))
# super clumsy :/ parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--from-db', type=str, required=True, help='db to take entries from') parser.add_argument('--into-db', type=str, required=True, help='db to add entries to') opts = parser.parse_args() assert opts.from_db != opts.into_db from_db = LabelDB(label_db_file=opts.from_db) into_db = LabelDB(label_db_file=opts.into_db) num_ignored = 0 num_added = 0 for img in from_db.imgs(): if into_db.has_labels(img): print("ignore", img, "; already in into_db") num_ignored += 1 else: into_db.set_labels(img, from_db.get_labels(img)) num_added += 1 print("num_ignored", num_ignored, "num_added", num_added)