示例#1
0
def main():
    record = True
    plr = Player(colour=True, record=False)

    # initialize placeholder point clouds
    pc_left = rs.pointcloud()
    pc_right = rs.pointcloud()

    # create prefix and directories for naming files
    current_time = datetime.datetime.now()
    prefix = current_time.strftime("%Y-%m-%d:%H:%M")

    npy_dir = "data/" + prefix + "/npys/"
    ply_dir = "data/" + prefix + "/plys/"

    os.makedirs(npy_dir)
    os.makedirs(ply_dir)

    # initialise counters for naming files
    ply_counter = npy_counter = 0

    try:
        while True:
            [frame_left, frame_right] = plr.getFrames()
            if not frame_left or not frame_right:
                continue
            depth_frame_left = frame_left.get_depth_frame()
            depth_frame_right = frame_right.get_depth_frame()

            depth_color_frame_left = rs.colorizer().colorize(depth_frame_left)
            depth_color_frame_right = rs.colorizer().colorize(
                depth_frame_right)

            # Convert depth_frame to numpy array to render image
            depth_color_image_left = np.asanyarray(
                depth_color_frame_left.get_data())
            depth_color_image_right = np.asanyarray(
                depth_color_frame_right.get_data())

            depth_color_image = np.hstack(
                (depth_color_image_left, depth_color_image_right))

            # resize to fit screen, change as desired
            image = cv2.resize(depth_color_image, (1440, 720))

            # Render image in opencv window
            cv2.imshow("Depth Stream", image)
            key = cv2.waitKey(1)

            # if s is pressed save .npy
            if key == ord('s') and not record:

                points_left = pc_left.calculate(depth_frame_left)
                points_right = pc_right.calculate(depth_frame_right)

                np.save(npy_dir + str(npy_counter) + "left",
                        np.array(points_left.get_vertices()))
                print("File saved to " + npy_dir + str(npy_counter) +
                      "left.npy")

                np.save(npy_dir + str(npy_counter) + "right",
                        np.array(points_right.get_vertices()))
                print("File saved to " + npy_dir + str(npy_counter) +
                      "right.npy")

                npy_counter += 1
            if record:
                # convert and save left file
                points_left = pc_left.calculate(depth_frame_left)
                points_left = np.array(points_left.get_vertices())
                # print(points_left.shape)
                points_left = points_left[np.nonzero(points_left)]
                np.save(npy_dir + str(npy_counter) + "left", points_left)
                print("File saved to " + npy_dir + str(npy_counter) +
                      "left.npy")

                # convert and save right file
                points_right = pc_right.calculate(depth_frame_right)
                points_right = np.array(points_right.get_vertices())
                points_right = points_right[np.nonzero(points_right)]
                np.save(npy_dir + str(npy_counter) + "right", points_right)
                print("File saved to " + npy_dir + str(npy_counter) +
                      "right.npy")

                npy_counter += 1
                if npy_counter > 200:
                    raise Exception("finished recording")
                # time.sleep(0.1)

            # if a is pressed save .ply
            if key == ord('a'):

                color_frame_left = frame_left.get_color_frame()
                color_frame_right = frame_right.get_color_frame()

                # ply's require a colour mapping
                pc_left.map_to(color_frame_left)
                pc_right.map_to(color_frame_right)

                points_left = pc_left.calculate(depth_frame_left)
                points_right = pc_right.calculate(depth_frame_right)

                points_left.export_to_ply(
                    ply_dir + str(ply_counter) + "left.ply", color_frame_left)
                print("File saved to " + ply_dir + str(ply_counter) +
                      "left.ply")

                points_right.export_to_ply(
                    ply_dir + str(ply_counter) + "right.ply",
                    color_frame_right)
                print("File saved to " + ply_dir + str(ply_counter) +
                      "right.ply")

                ply_counter += 1

            # if pressed escape exit program
            if key == 27:
                cv2.destroyAllWindows()
                break
    finally:
        print("Stopping pipelines.")
        plr.stop()
        print("Compacting files.")