def detect_image(): filepaths = save_files(request.files) output_paths = [] for file in filepaths: image = Image(file) image.detect_features() output_filename = os.path.join(OUTPUT_IMAGE_PATH, str(uuid.uuid4()) + "_kps.jpg") output = image.draw_keypoints(output_filename, orientation=True, gray=True) output_paths.append(output_filename[output_filename.find("/static"):]) print output_paths return json.dumps({"output_paths": output_paths})
def main(args): if len(args) < 2: print_help() exit() parser = argparse.ArgumentParser() parser.add_argument('mode', default=None, type=str) parser.add_argument('manual_identifier', default=None, nargs='?', type=str) parser.add_argument('-i', default=[], action='append', nargs='?', type=str) parser.add_argument('-f', default=None, type=str) parser.add_argument('-o', default='output.jpg', type=str) parser.add_argument('--scene_output', default=None, type=str) #type=argparse.FileType('w')) parser.add_argument('--projection_output', default=None, type=str) #type=argparse.FileType('w')) parser.add_argument('--silent', action='store_true') parser.add_argument('--cv', action='store_true') args = parser.parse_args(args[1:]) # current_dir = os.path.dirname(os.path.realpath(__file__)) current_dir = os.getcwd() if args.f: files = filter( lambda x: any([i in x.lower() for i in ACCEPTED_FILETYPES]), os.listdir(args.f)) files = map(lambda x: os.path.join(args.f, x), files) args.i += files args.i = map(lambda x: os.path.join(current_dir, x), args.i) mode = args.mode if mode == 'detect': if not args.silent: print 'Detecting images: {}'.format(", ".join(args.i)) print 'Outputting to: {}'.format(args.o) # if there is more than one output image if len(args.i) > 1: for x in range(len(args.i)): image = Image(args.i[x]) image.detect_features() output = image.draw_keypoints(CVFuncs.addPostToPath(args.o, x), orientation=True, gray=True) else: image = Image(args.i[0]) image.detect_features() output = image.draw_keypoints(args.o, orientation=True, gray=True) elif mode == 'match': if not args.silent: print 'Matching images: {}'.format(", ".join(args.i)) print 'Outputting to: {}'.format(args.o) imList = [] for imageLocation in args.i: image1 = Image(imageLocation) image1.detect_features() imList.append(image1) for x in range(0, len(imList)): for y in range(x + 1, len(imList)): points1, points2, matches = CVFuncs.findMatchesKnn(imList[x], imList[y], filter=True, ratio=True) # if there is more than one output image if len(imList) > 2: CVFuncs.drawMatches( imList[x], imList[y], matches, CVFuncs.addPostToPath(args.o, str(x) + "-" + str(y))) else: CVFuncs.drawMatches(imList[x], imList[y], matches, args.o) elif mode == 'triangulate': if not args.silent: print 'Triangulating images: {}'.format(args.i) if args.scene_output: print 'Outputting scene to: {}'.format(args.scene_output) if args.projection_output: print 'Outputting projections to: {}'.format( args.projection_output) track = TrackCreator(args.i) track.triangulateImages(scene_file=args.scene_output, projections_file=args.projection_output, silent=args.silent) elif mode == 'manual_pts': manual_location = args.manual_identifier triangulateManual.triangulateManualAndOutput( args.i[0], args.i[1], manual_location, output_file=args.scene_output, projections_file=args.projection_output)
def main(args): if len(args) < 2: print_help() exit() parser = argparse.ArgumentParser() parser.add_argument("mode", default=None, type=str) parser.add_argument("manual_identifier", default=None, nargs="?", type=str) parser.add_argument("-i", default=[], action="append", nargs="?", type=str) parser.add_argument("-f", default=None, type=str) parser.add_argument("-o", default="output.jpg", type=str) parser.add_argument("--scene_output", default=None, type=str) # type=argparse.FileType('w')) parser.add_argument("--projection_output", default=None, type=str) # type=argparse.FileType('w')) parser.add_argument("--silent", action="store_true") parser.add_argument("--cv", action="store_true") args = parser.parse_args(args[1:]) # current_dir = os.path.dirname(os.path.realpath(__file__)) current_dir = os.getcwd() if args.f: files = filter(lambda x: any([i in x.lower() for i in ACCEPTED_FILETYPES]), os.listdir(args.f)) files = map(lambda x: os.path.join(args.f, x), files) args.i += files args.i = map(lambda x: os.path.join(current_dir, x), args.i) mode = args.mode if mode == "detect": if not args.silent: print "Detecting images: {}".format(", ".join(args.i)) print "Outputting to: {}".format(args.o) # if there is more than one output image if len(args.i) > 1: for x in range(len(args.i)): image = Image(args.i[x]) image.detect_features() output = image.draw_keypoints(CVFuncs.addPostToPath(args.o, x), orientation=True, gray=True) else: image = Image(args.i[0]) image.detect_features() output = image.draw_keypoints(args.o, orientation=True, gray=True) elif mode == "match": if not args.silent: print "Matching images: {}".format(", ".join(args.i)) print "Outputting to: {}".format(args.o) imList = [] for imageLocation in args.i: image1 = Image(imageLocation) image1.detect_features() imList.append(image1) for x in range(0, len(imList)): for y in range(x + 1, len(imList)): points1, points2, matches = CVFuncs.findMatchesKnn(imList[x], imList[y], filter=True, ratio=True) # if there is more than one output image if len(imList) > 2: CVFuncs.drawMatches( imList[x], imList[y], matches, CVFuncs.addPostToPath(args.o, str(x) + "-" + str(y)) ) else: CVFuncs.drawMatches(imList[x], imList[y], matches, args.o) elif mode == "triangulate": if not args.silent: print "Triangulating images: {}".format(args.i) if args.scene_output: print "Outputting scene to: {}".format(args.scene_output) if args.projection_output: print "Outputting projections to: {}".format(args.projection_output) track = TrackCreator(args.i) track.triangulateImages( scene_file=args.scene_output, projections_file=args.projection_output, silent=args.silent ) elif mode == "manual_pts": manual_location = args.manual_identifier triangulateManual.triangulateManualAndOutput( args.i[0], args.i[1], manual_location, output_file=args.scene_output, projections_file=args.projection_output, )