def main(args):
    input_dir = check_input_dir(args.input_dir)
    output_dir = check_output_dir(args.output_dir)

    output_path = output_dir.split('/')

    if args.video_id:
        video_id = args.video_id
    else:
        video_id = output_path[-2]
    fps = None
    fps_txt = '/'.join(output_path) + output_path[-2] + "_fps.txt"
    with open(fps_txt, 'r') as f:
        line = f.readline()
        fps = int(float(line.split()[0]))

    # we want target and fps frame rate to be the same since
    # the data is not interpolated to 30 fps yet
    target_frame_rate = fps
    targets = '/'.join(output_path) + output_path[-2] + "_targets.txt"
    desired_person_at_frame = read_desired_frames(targets, fps,
                                                  target_frame_rate)

    # append '/data/' to output dir
    data_output_dir = check_output_dir(output_dir + 'data/')
    compile_all_poses(input_dir, data_output_dir, desired_person_at_frame,
                      video_id)
예제 #2
0
def get_json_names(input_dir):
    """
    Go into input dir and obtain all json file names
    """
    # confirm input dir is valid and modify input dir if it doesn't end in /
    input_dir = check_input_dir(input_dir)
    json_file_names = [
        pos_json for pos_json in os.listdir(input_dir)
        if pos_json.endswith('.json')
    ]
    json_file_names = sorted(json_file_names)
    return json_file_names
예제 #3
0
def main(args):
    # if none, then get current working dir for input_dir
    if args.input_dir:
        input_dir = check_input_dir(args.input_dir)
    else:  # assuming cwd
        input_dir = check_output_dir(args.input_dir)
    # default wil be same as input_dir

    # get frame rate
    input_path = input_dir.split('/')
    fps_txt = '/'.join(input_path) + input_path[-2] + "_fps.txt"
    fps = 30
    with open(fps_txt, 'r') as f:
        line = f.readline()
        fps = int(float(line.split()[0]))

    input_dir = check_output_dir(input_dir + 'data/')

    if not args.output_dir:
        output_dir = input_dir
    else:
        output_dir = check_output_dir(args.output_dir)

    # if specific input file is given, process only that one
    if args.input_file:
        input_filename = args.input_file.split('_')
        # load using input_dir
        compiled_poses = np.load(input_dir + args.input_file)
        processed = preprocess_poses(compiled_poses, fps)
        # compiled_{id}_line_{line}.npy
        filename = f"processed_{'_'.join(input_filename[1:])}"
        # save using output_dir
        print(f"Saved to {filename}")
        np.save(output_dir + filename, processed)
        print(processed.shape)
    else:
        # fetch every input file from input dir
        import glob
        for input_filename in glob.glob(input_dir + "compiled*.npy"):
            compiled_poses = np.load(input_filename)
            processed = preprocess_poses(compiled_poses, fps)
            input_filename = input_filename.split('/')[-1].split('_')
            output_filename = output_dir + f"processed_{'_'.join(input_filename[1:])}"
            print(f"Saved to {output_filename}")
            np.save(output_filename, processed)
            print(processed.shape)

    # generate video
    if args.write_video:
        write_to_video(processed)
예제 #4
0
def main(args):
    # need input_dir
    if args.input_dir:
        input_dir = check_input_dir(args.input_dir)
    else:
        input_dir = check_output_dir(args.input_dir)

    # get frame rate of videos
    input_path = input_dir.split('/')  # get frame rate
    video_id = input_path[-2]
    fps_txt = '/'.join(input_path) + video_id + "_fps.txt"
    target_frame_rate = 30
    frame_rate = None
    with open(fps_txt, 'r') as f:
        line = f.readline()
        frame_rate = int(float(line.split()[0]))

    # get targets
    targets = '/'.join(input_path) + video_id + "_targets.txt"
    desired_person_at_frame = read_desired_frames(targets, frame_rate,
                                                  target_frame_rate)

    # get audio filename
    if args.input_audio_filename:
        audio_filename = input_dir + args.input_audio_filename
    else:
        audio_filename = input_dir + video_id + '.mp3'

    # lastly, direct it to data folder
    input_dir = check_output_dir(input_dir + 'data/')
    # output_dir can be optional, if not specified, default will be same as input_dir
    if not args.output_dir:
        output_dir = input_dir
    else:
        output_dir = check_output_dir(args.output_dir)

    # let convert handle the file saving
    convert(audio_filename, output_dir, desired_person_at_frame, video_id)
예제 #5
0
def main(args):
    input_dir = check_input_dir(args.input_dir)
    output_dir = check_output_dir(args.output_dir)

    # write images to:
    output_dir_images = output_dir + 'images/'

    # check fps of mp4
    if args.check_fps:
        filename_array = output_dir.split('/')
        video_filename = output_dir + filename_array[-2] + '.mp4'
        print(video_filename)

        video = cv2.VideoCapture(video_filename)
        fps = video.get(cv2.CAP_PROP_FPS)

        print(fps)
        # write to fps data
        fps_name = output_dir + filename_array[-2] + "_fps.txt"
        with open(fps_name, 'w') as f:
            f.write(f'{fps}\n')

    draw_all_poses(input_dir, output_dir_images)
예제 #6
0
def main(args):
    img_array = []
    input_dir = check_input_dir(args.input_dir)
    output_dir = check_output_dir(args.output_dir)
    mp4name = output_dir + check_mp4(args.output_filename)

    filenames = sorted(glob.glob(input_dir + '*.jpg'))

    count = 0
    for filename in filenames:
        if count == 1800:
            break
        img = cv2.imread(filename)
        height, width, layers = img.shape
        size = (width, height)
        img_array.append(img)
        count += 1

    fourcc_format = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter(mp4name, fourcc_format, 30, size)

    for i in range(len(img_array)):
        out.write(img_array[i])
    out.release()