示例#1
0
    def cli(frame_sequence, camera, track_destination, point_cloud_destination,
            file_to_load_corners, show, camera_poses_file, frame_1, frame_2):
        """
        FRAME_SEQUENCE path to a video file or shell-like wildcard describing
        multiple images\n
        CAMERA intrinsic parameters of camera\n
        TRACK_DESTINATION path to file for dumping result camera track\n
        POINT_CLOUD_DESTINATION path to file for dumping result point cloud
        """
        sequence = frameseq.read_grayscale_f32(frame_sequence)
        if file_to_load_corners is not None:
            corner_storage = load(file_to_load_corners)
        else:
            corner_storage = build(sequence)

        if camera_poses_file is not None and frame_1 is not None and frame_2 is not None:
            known_camera_poses = read_poses(camera_poses_file)
            known_view_1 = frame_1, known_camera_poses[frame_1]
            known_view_2 = frame_2, known_camera_poses[frame_2]
        else:
            known_view_1 = None
            known_view_2 = None

        camera_parameters = read_camera_parameters(camera)
        poses, point_cloud = track_and_calc_colors(
            camera_parameters,
            corner_storage,
            frame_sequence,
            known_view_1,
            known_view_2
        )
        write_poses(poses, track_destination)
        write_point_cloud(point_cloud, point_cloud_destination)

        if show:
            click.echo(
                "Press 'q' to stop, 'd' to go forward, 'a' to go backward, "
                "'r' to restart"
            )
            frame = 0
            while True:
                grayscale = sequence[frame]
                bgra = draw_residuals(grayscale, corner_storage[frame],
                                      point_cloud, camera_parameters,
                                      poses[frame])
                cv2.imshow('Frame', bgra)
                key = chr(cv2.waitKey(20) & 0xFF)
                if key == 'r':
                    frame = 0
                if key == 'a' and frame > 0:
                    frame -= 1
                if key == 'd' and frame + 1 < len(corner_storage):
                    frame += 1
                if key == 'q':
                    break
示例#2
0
def cli(camera_parameters, poses, point_cloud):
    script_path = os.path.abspath(os.path.dirname(__file__))
    camera_model_files = (os.path.join(script_path,
                                       'camera_model/geometry.obj'),
                          os.path.join(script_path,
                                       'camera_model/texture.jpg'))

    renderer = CameraTrackRendererApp(
        camera_model_files, read_camera_parameters(camera_parameters),
        read_poses(poses), read_point_cloud(point_cloud))
    renderer.show()
示例#3
0
def _read_camera_parameters(parameters_path):
    with open(parameters_path, 'r') as camera_file:
        return data3d.read_camera_parameters(camera_file)