File size: 2,274 Bytes
1cd3497
 
3f4e0ec
79883d7
3f4e0ec
79883d7
 
 
3f4e0ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79883d7
 
 
 
 
 
1cd3497
 
 
 
 
 
 
 
 
 
 
30dd27d
 
 
 
 
 
1cd3497
 
 
 
 
79883d7
 
f66117f
79883d7
 
f66117f
1cd3497
 
 
 
 
9b98523
1cd3497
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import gradio as gr
import subprocess
import cv2

def convert_video(input_file, output_file, codec='mp4v'):
    try:
        # Define input and output files
        input_path = input_file
        output_path = output_file

        # Open input video file
        cap = cv2.VideoCapture(input_path)

        # Get video codec and frame dimensions
        fourcc = cv2.VideoWriter_fourcc(*codec)
        width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

        # Create output video writer
        out = cv2.VideoWriter(output_path, fourcc, 20.0, (width, height))

        # Read and write video frames
        while(cap.isOpened()):
            ret, frame = cap.read()
            if ret:
                out.write(frame)
            else:
                break

        # Release video objects
        cap.release()
        out.release()

        print(f"Video converted successfully: {output_path}")

    except Exception as e:
        print(f"Error converting video: {e}")


def execute_command(command: str) -> None:
    subprocess.run(command, check=True)

def infer():

    output_name = "acknowledgement_english@M030_front_neutral_level1_001@male_face"

    command = [
        f"python",
        f"inference_for_demo_video.py",
        f"--wav_path=data/audio/acknowledgement_english.m4a",
        f"--style_clip_path=data/style_clip/3DMM/M030_front_neutral_level1_001.mat",
        f"--pose_path=data/pose/RichardShelby_front_neutral_level1_001.mat",
        f"--image_path=data/src_img/uncropped/male_face.png",
        f"--cfg_scale=1.0",
        f"--max_gen_len=30",
        f"--output_name={output_name}"
    ]

    execute_command(command)

    # Convert video to compatible codecs
    input_file_path = f"output_video/{output_name}.mp4"
    output_file_path = f"{output_name}"
    convert_video(input_file_path, output_file_path)

    return f"{output_file_path}.mp4"

with gr.Blocks() as demo:
    with gr.Column():
        with gr.Row():
            with gr.Column():
                run_btn = gr.Button("Run")
            with gr.Column():
                output_video = gr.Video()
    
    run_btn.click(
        fn = infer,
        inputs = [],
        outputs = [output_video]
    )

demo.launch()