Ejemplo n.º 1
0
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})
Ejemplo n.º 2
0
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,
        )