Beispiel #1
0
def main(argv):
    parser = argparse.ArgumentParser(
        description=
        '\nReplicates list of images using new face data in argumentlist.  Ex: xml_extract_list -o auto_test.xml gold_test.xml allBears_faces.xml',
        formatter_class=lambda prog: argparse.HelpFormatter(
            prog, max_help_position=50))
    # parser.formatter.max_help_position = 50
    parser.add_argument('orig_file', help='file to replicate')
    parser.add_argument('files', nargs='+')
    parser.add_argument(
        '-o',
        '--output',
        default="",
        help='Output filename. Defaults to "copy_<date><time>_"')
    parser.add_argument('--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2],
                        help=argparse.SUPPRESS)
    # help="increase output verbosity"
    args = parser.parse_args()

    verbose = args.verbosity
    # pdb.set_trace ()
    if not args.output:
        args.output = datetime.datetime.now().strftime("copy_%Y%m%d_%H%M.xml")
    if verbose > 0:
        print "output  : ", args.output
        print 'orig file : ', args.orig_file
        print 'files : ', args.files
    xml_files = u.generate_xml_file_list(args.files)
    u.set_argv(argv)
    u.set_exec_name('extract_list')
    u.replicate_file([args.orig_file], xml_files, args.output)
Beispiel #2
0
def main(argv):
    parser = argparse.ArgumentParser(
        description=
        '\Generate new file with non-existent chips removed.  Ex: xml_validate_chips -o valid_chips folds/*.xml',
        formatter_class=lambda prog: argparse.HelpFormatter(
            prog, max_help_position=50))
    # parser.formatter.max_help_position = 50
    parser.add_argument('xml_file')
    parser.add_argument(
        '-o',
        '--output',
        default="",
        help='Output file postfix. Defaults to "valid_chips_<date><time>_"')
    parser.add_argument('--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2],
                        help=argparse.SUPPRESS)
    # help="increase output verbosity"
    args = parser.parse_args()

    verbose = args.verbosity
    # pdb.set_trace ()
    if not args.output:
        args.output = datetime.datetime.now().strftime(
            "valid_chips_%Y%m%d_%H%M.xml")
    if verbose > 0:
        print('input   : ', args.xml_file)
        print("output  : ", args.output)
    u.set_argv(argv)
    u.set_exec_name('xml_validate_chips')
    u.validate_file(args.xml_file, args.output)
Beispiel #3
0
def main(argv):
    parser = argparse.ArgumentParser(
        description=
        '\nWrite xml file for each of zero, one and multi faces.\n\n\tExample: xml_group_by_face_count -out bc2018  bc2018_faces.xml',
        formatter_class=RawTextHelpFormatter)

    parser.add_argument('files', nargs='+')
    parser.add_argument('-out',
                        '--output',
                        default="images",
                        help='write files using this base name.')
    parser.add_argument('-v',
                        '--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2, 3],
                        help='')
    # help="increase output verbosity"
    u.set_argv(argv)
    args = parser.parse_args()
    u.set_verbosity(args.verbosity)
    u.set_argv(argv)
    u.set_filetype('faces')
    verbose = 0
    if verbose > 0:
        print("files: ", args.files)

    #TODO : prevent clobbering previous default output
    # if args.output == 'images' :
    # args.output = u.get_new_filename (args.output)
    u.split_faces_by_count(args.files, args.output)
Beispiel #4
0
def main(argv):
    parser = argparse.ArgumentParser(
        description='\nWrite html to display images grouped by day per label',
        formatter_class=RawTextHelpFormatter)

    parser.add_argument('file')
    parser.add_argument('-out',
                        '--output',
                        default="same_dates.html",
                        help='write files using this base name.')
    parser.add_argument('-v',
                        '--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2, 3],
                        help='')
    # help="increase output verbosity"
    u.set_argv(argv)
    args = parser.parse_args()
    u.set_verbosity(args.verbosity)
    u.set_argv(argv)
    verbose = 0
    if verbose > 0:
        print("files: ", args.files)

    #TODO : prevent clobbering previous default output
    # if args.output == 'images' :
    # args.output = u.get_new_filename (args.output)
    u.html_same_date_from_csv(args.file, args.output)
Beispiel #5
0
def main(argv):
    parser = argparse.ArgumentParser(
        description='Create file with matched and unmatched chip pairs.',
        formatter_class=lambda prog: argparse.HelpFormatter(
            prog, max_help_position=50))
    # parser.formatter.max_help_position = 50
    parser.add_argument('-m',
                        '--matched',
                        default=0,
                        help='Number of matched pairs. 0 for all.')
    parser.add_argument('-u',
                        '--unmatched',
                        default=0,
                        help='Number of unmatched pairs. 0 for all.')
    parser.add_argument(
        '-t',
        '--triplets',
        default=0,
        help=
        'Number of triplets of un/matched sets. Overides --unmatched and --matched.'
    )
    parser.add_argument('chipfile', nargs='+')
    parser.add_argument(
        '-out',
        '--output',
        default="",
        help='Output file basename. Defaults to "part_<date><time>_"')
    parser.add_argument('-v',
                        '--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2, 3],
                        help=argparse.SUPPRESS)
    u.set_argv(argv)
    args = parser.parse_args()
    u.set_verbosity(args.verbosity)
    u.set_filetype('pairs')
    verbose = args.verbosity
    if not args.output:
        args.output = datetime.datetime.now().strftime("pairs_%Y%m%d_%H%M.xml")
    if verbose > 0:
        print("matched   : ", args.matched)
        print("unmatched : ", args.unmatched)
        print("triplets  : ", args.triplets)
        print("output    : ", args.output)
        print("chipfile  : ", args.chipfile)
    '''
	filetype = args.filetype
	if (filetype != "chips") and (filetype != "faces") :
		print 'unrecognized filetype :', filetype, ', setting filetype to "chips".'
		filetype = "chips"
	'''
    if (args.triplets > 0) and ((args.matched > 0) or (args.unmatched > 0)):
        print(
            'triplets argument will override matched and unmatched arguments')
    xml_files = u.generate_xml_file_list(args.chipfile)
    u.generate_chip_pairs(xml_files, int(args.matched), int(args.unmatched),
                          int(args.triplets), args.output)
Beispiel #6
0
def main(argv):
    parser = argparse.ArgumentParser(description='Partitions data.',
                                     formatter_class=lambda prog: argparse.
                                     HelpFormatter(prog, max_help_position=50))
    # parser.formatter.max_help_position = 50
    parser.add_argument('n', default=5, help='Number of paritions to create. ')
    parser.add_argument('files', nargs='+')
    parser.add_argument('-out',
                        '--output',
                        default="",
                        help='Output file basename.')
    parser.add_argument(
        '-m',
        '--mode',
        type=int,
        default=0,
        choices=[0, 1, 2],
        help=
        'Mode for split chips.  0: shuffle all, then split. 1: split each label evenly. 2: split by label - i.e. each label is only in one fold.'
    )
    parser.add_argument('-v',
                        '--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2, 3],
                        help='')
    # help="increase output verbosity"
    args = parser.parse_args()
    u.set_verbosity(args.verbosity)
    u.set_argv(argv)
    u.set_filetype('chips')
    # pdb.set_trace ()
    verbose = args.verbosity
    if verbose > 0:
        print("n: ", args.n)
        print("output: ", args.output)
        print("files: ", args.files)
        if args.mode == 0:
            print("mode 0: splitting after shuffling all...")
        elif args.mode == 1:
            print("mode 1: splitting each label evenly...")
        elif args.mode == 2:
            print("mode 2: separting each into different fold ... ")

    if not args.output:
        args.output = datetime.datetime.now().strftime("%Y%m%d_%H%M")
        if verbose > 0:
            print("new output: ", args.output)
    xml_files = u.generate_xml_file_list(args.files)
    u.do_generate_folds(xml_files, args.n, args.output, args.mode)
Beispiel #7
0
def main(argv):
    parser = argparse.ArgumentParser(
        description='write faces from different locale to different xmls.',
        formatter_class=RawTextHelpFormatter)
    parser.add_argument('files', nargs='+')
    parser.add_argument('-v',
                        '--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2, 3],
                        help='')
    # help="increase output verbosity"
    u.set_argv(argv)
    args = parser.parse_args()
    u.set_verbosity(args.verbosity)
    u.set_argv(argv)
    u.set_filetype('faces')
    verbose = 0
    if verbose > 0:
        print("files: ", args.files)

    u.split_objects_by_locales(args.files)
Beispiel #8
0
def main(argv):
    parser = argparse.ArgumentParser(
        description=
        '    Downscale images and writes them to parallel directories.\n    Also write new xml with updated content.\n\n    Example: \n\tdownscale_images -xy 640 480 -replace imageSource imageSourceTiny x.xml',
        formatter_class=RawTextHelpFormatter)
    grp = parser.add_mutually_exclusive_group()
    parser.add_argument('files', nargs='+')
    grp.add_argument('-xy', '--xy_max', nargs=2, help='max x and y of image.')
    grp.add_argument('-max',
                     '--max_area',
                     default=30000,
                     help='max size of image.')
    parser.add_argument('-replace',
                        '--replace_path',
                        nargs=2,
                        default=['', './'],
                        help='replace old with new.')
    parser.add_argument('-v',
                        '--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2, 3],
                        help='')
    # help="increase output verbosity"
    u.set_argv(argv)
    args = parser.parse_args()
    u.set_verbosity(args.verbosity)
    u.set_filetype('faces')
    verbose = 0
    if verbose > 0:
        print("files: ", args.files)
    if args.xy_max:
        args.max_area = int(args.xy_max[0]) * int(args.xy_max[1])
    # print ('max_area: ', args.max_area)
    # print ('replace_path: ', args.replace_path)
    # print ('replace_path: ', args.replace_path[0], args.replace_path[1])
    for face_xml in args.files:
        u.downscale_face_file(face_xml, args.max_area, args.replace_path)
Beispiel #9
0
def main(argv):
    parser = argparse.ArgumentParser(
        description=
        '\n\tCreate new file using original file updated with new sources. Unmatched content will also be written out.\n\n\tUsage: xml_update_from_xml <orig_file> <new_sources>  \n\n\tEx: xml_update_from_xml -o test.xml resize_test.xml',
        formatter_class=RawTextHelpFormatter)
    # parser.formatter.max_help_position = 50
    parser.add_argument('orig_file', help='file with search content')
    parser.add_argument('new_sources', nargs='+')
    parser.add_argument('-filetype',
                        '--filetype',
                        default="faces",
                        help='type of xml file: <images,chips,faces,pairs> .')
    parser.add_argument(
        '-o',
        '--output',
        default="",
        help='Output filename. Defaults to "copy_<date><time>_"')
    parser.add_argument('--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2],
                        help=argparse.SUPPRESS)
    # help="increase output verbosity"
    args = parser.parse_args()

    verbose = args.verbosity
    # pdb.set_trace ()
    if not args.output:
        args.output = datetime.datetime.now().strftime("copy_%Y%m%d_%H%M.xml")
    if verbose > 0:
        print("output  : ", args.output)
        print('orig file : ', args.orig_file)
        print('files : ', args.files)
    xml_files = u.generate_xml_file_list(args.files)
    u.set_argv(argv)
    u.set_exec_name(sys.argv[0])
    u.update_path([args.orig_file], xml_files, args.output, args.filetype)
Beispiel #10
0
def main(argv):
    parser = argparse.ArgumentParser(
        description=
        'Downscale face images, cropping to maintain face close to mininum size.\n\tCreates new images to parallel directories and generates new xml with updated content.\n\n\tExample:\n\tresize_images.py -x_max 640 -y_max 480 faces.xml',
        formatter_class=RawTextHelpFormatter)
    parser.add_argument('files', nargs='+')
    parser.add_argument('-x_max',
                        '--x_max',
                        default=1500,
                        help='max width of image, defaults to 1500.')
    parser.add_argument('-y_max',
                        '--y_max',
                        default=2000,
                        help='max heigth of image, defaults to 2000.')
    parser.add_argument('-min_face',
                        '--min_face',
                        default=200,
                        help='max heigth of image, defaults to 2000.')
    parser.add_argument('-v',
                        '--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2, 3],
                        help='')
    # help="increase output verbosity"
    u.set_argv(argv)
    args = parser.parse_args()
    u.set_verbosity(args.verbosity)
    u.set_argv(argv)
    u.set_filetype('faces')
    verbose = 0
    if verbose > 0:
        print("files: ", args.files)

    for face_xml in args.files:
        u.resize_face_file(face_xml, args.x_max, args.y_max, args.min_face)
Beispiel #11
0
def main(argv):
    parser = argparse.ArgumentParser(
        description='Plot dimension-reduced embeddings.',
        formatter_class=lambda prog: argparse.HelpFormatter(
            prog, max_help_position=50))
    parser.add_argument('files', nargs='+')
    parser.add_argument('-v',
                        '--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2, 3],
                        help='')
    # help="increase output verbosity"
    u.set_argv(argv)
    args = parser.parse_args()
    u.set_verbosity(args.verbosity)
    u.set_argv(argv)
    u.set_filetype('embeddings')
    verbose = 0
    if verbose > 0:
        print("files: ", args.files)

    xml_files = u.generate_xml_file_list(args.files)
    u.plot_embeddings(xml_files)
Beispiel #12
0
def main(argv):
    parser = argparse.ArgumentParser(
        description=
        '\nFilter chips with given circle (center & radius). Defaults to average nose and half the distance between the eyes.  Ex: filter -pt [23 45] -dist 40 <files>',
        formatter_class=lambda prog: argparse.HelpFormatter(
            prog, max_help_position=50))
    # parser.formatter.max_help_position = 50
    parser.add_argument('files', nargs='+')
    parser.add_argument(
        '-pt',
        '--pt',
        default="",
        help='"x y" for center of circle. Defaults to average of noses.')
    parser.add_argument(
        '-d',
        '--distance',
        default=0,
        help='Radius of circle. Defaults to half distance between eyes.')
    parser.add_argument(
        '-o',
        '--output',
        default="",
        help='Output file basename. Defaults to "part_<date><time>_"')
    parser.add_argument('--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2],
                        help=argparse.SUPPRESS)
    # help="increase output verbosity"
    u.set_argv(argv)
    args = parser.parse_args()

    verbose = args.verbosity
    center = [0, 0]
    if args.pt:
        pt = (args.pt).split(' ')
        if len(pt) != 2:
            print(
                "Input error for -pt: needs exactly 2 numbers.  Using default."
            )
        elif not pt[0].isdigit() or not pt[1].isdigit():
            print(
                "Input error for -pt: needs to be 2 numbers.  Using default.")
        else:
            center[0] = int(pt[0])
            center[1] = int(pt[1])
    # pdb.set_trace ()
    if not args.output:
        args.output = datetime.datetime.now().strftime(
            "chip_filtered_%Y%m%d_%H%M.xml")

    distance = 0
    if args.distance:
        if not (args.distance).isdigit():
            print(
                "Input error for --distance: needs to be a number.  Using default."
            )
        else:
            distance = int(args.distance)

    if verbose > 0:
        print("output  : ", args.output)
        print("center  : ", center)
        print("distance: ", distance)
    xml_files = u.generate_xml_file_list(args.files)
    u.filter_chips(xml_files, center, distance, args.output)
Beispiel #13
0
def main(argv):
    parser = argparse.ArgumentParser(
        description=
        'Partitions chips into x and y.  If shuffle is set to 0, the partition will be per label.  x and y can be set to 100 and 0, respectively, for no partitioning.',
        formatter_class=lambda prog: argparse.HelpFormatter(
            prog, max_help_position=50))
    # parser.formatter.max_help_position = 50
    parser.add_argument('x', default=80, help='Percent of first set.')
    parser.add_argument('y', default=20, help='Percent of second set.')
    parser.add_argument('input', nargs='+')
    parser.add_argument(
        '-shuffle',
        '--shuffle',
        default="",
        action="store_true",
        help='Shuffles labels before partition. Defaults to False')
    parser.add_argument(
        '-test_count_minimum',
        '--test_count_minimum',
        default=0,
        help=
        'Minimum test images per label, overrides partition percentage. Defaults to 0.'
    )
    parser.add_argument(
        '-image_count_minimum',
        '--image_count_minimum',
        default=0,
        help='Minimum number of images per label. Defaults to 0.')
    parser.add_argument('-image_size_minimum',
                        '--image_size_minimum',
                        default=0,
                        help='Minimum size of image. Defaults to 0.')
    parser.add_argument(
        '-filetype',
        '--filetype',
        default="chips",
        help='Type of file to partition. <faces|chips>.Defaults to "chips".')
    parser.add_argument(
        '-o',
        '--output',
        default="",
        help='Output file basename. Defaults to "part_<date><time>_"')
    parser.add_argument('--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2],
                        help=argparse.SUPPRESS)
    u.set_argv(argv)
    args = parser.parse_args()
    verbose = args.verbosity
    ### --------------
    #  TODO check & WARN that if shuffle is set, will ignore
    #    image_count_minimum, test_count_minimum
    ### --------------
    if verbose > 2:
        print()
        print("x: ", args.x)
        print("y: ", args.y)
        print("sum: ", int(args.y) + int(args.x))
        print("output: ", args.output)
        print("input: ", args.input)

    if int(args.x) + int(args.y) != 100:
        print("error: (x + y) needs to be 100")
        return
    if not args.output:
        args.output = datetime.datetime.now().strftime("part_%Y%m%d_%H%M")
        if verbose > 0:
            print("new output: ", args.output)

    filetype = args.filetype
    if (filetype != "chips") and (filetype != "faces"):
        print('unrecognized filetype :', filetype,
              ', setting filetype to "chips".')
        filetype = "chips"

    xml_files = u.generate_xml_file_list(args.input)
    u.generate_partitions(xml_files, args.x, args.y, args.output, args.shuffle,
                          int(args.image_count_minimum),
                          int(args.test_count_minimum),
                          int(args.image_size_minimum), filetype)
Beispiel #14
0
def main(argv):
    parser = argparse.ArgumentParser(
        description=
        'Partitions objects into x and y percents.\nIf shuffle is set to False, each label will be split as specified.\nIf -group is set, will use db argument to partition after grouped by date.\nx and y can be set to 100 and 0, respectively, for no partitioning (to combine multiple XMLs.)\n\nExample: generate_partition -shuffle False -file faces 80 20 images.xml\n\t generate_partition -group all.csv 75 25 chips.xml',
        formatter_class=RawTextHelpFormatter)
    # parser.formatter.max_help_position = 50
    parser.add_argument('x', default=80, help='Percent of first set.')
    parser.add_argument('y', default=20, help='Percent of second set.')
    parser.add_argument('input', nargs='+')
    parser.add_argument(
        '-shuffle',
        '--shuffle',
        default=True,
        help=
        'Determines whether all objects are mixed before partition. If set to False, each label wil be split as specified.  Defaults to True.'
    )
    parser.add_argument(
        '--test_count_minimum',
        default=0,
        help=
        'Minimum test images per label, overrides partition percentage. Defaults to 0.'
    )
    parser.add_argument(
        '-image_count_minimum',
        '--image_count_minimum',
        default=0,
        help='Minimum number of images per label. Defaults to 0.')
    parser.add_argument('-image_size_minimum',
                        '--image_size_minimum',
                        default=0,
                        help='Minimum size of image. Defaults to 0.')
    parser.add_argument(
        '-filetype',
        '--filetype',
        default="chips",
        help='Type of file to partition. <faces|chips>. Defaults to "chips".')
    parser.add_argument(
        '-group',
        '--group_date_db',
        help=
        'Group images with same date and label together before partitioning using csv (\';\' separated) for date/label information.'
    )
    parser.add_argument(
        '-out',
        '--output',
        default="",
        help='Output file basename. Defaults to "part_<date><time>_"')
    parser.add_argument('-v',
                        '--verbosity',
                        type=int,
                        default=1,
                        choices=[0, 1, 2],
                        help=argparse.SUPPRESS)
    u.set_argv(argv)
    args = parser.parse_args()
    verbose = args.verbosity
    ### --------------
    #  TODO check & WARN that if shuffle is set, will ignore
    #    image_count_minimum, test_count_minimum
    ### --------------

    ### -------------- validate arguments -------- ###
    try:
        x = int(args.x)
    except ValueError:
        print('Error: number expected for x, got:', args.x)
        return
    try:
        y = int(args.y)
    except ValueError:
        print('Error: number expected for y, got:', args.y)
        return
    if x + y != 100:
        print("Error: (x + y) needs to be 100")
        return
    filetypes = ['chips', 'faces']
    filetype = args.filetype
    if filetype not in filetypes:
        print('unrecognized filetype :', filetype, 'should be one of:',
              filetypes)
        return

    if not args.output:
        args.output = datetime.datetime.now().strftime("part_%Y%m%d_%H%M")
    do_grouping = False
    if args.group_date_db != None:
        do_grouping = True
    if verbose > 2:
        print()
        print("x: ", x)
        print("y: ", y)
        print("sum: ", x + y)
        if do_grouping:
            print("------- partitioning grouped by date ------")
            print("group date db: ", args.group_date_db)
        print("output: ", args.output)
        print("input: ", args.input)

    xml_files = u.generate_xml_file_list(args.input)
    u.generate_partitions(xml_files, x, y, args.output, args.shuffle,
                          int(args.image_count_minimum),
                          int(args.test_count_minimum),
                          int(args.image_size_minimum), filetype, do_grouping,
                          args.group_date_db)