File size: 3,792 Bytes
d2e8c3f
 
 
b04e321
d2e8c3f
 
bc16e8f
 
97b862c
3520c6c
 
 
 
aa3cb1c
3520c6c
bc16e8f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ba29991
103784a
ba29991
aa1dc20
 
 
bc16e8f
 
 
 
d7be7dc
 
2ca90d5
d7be7dc
 
 
 
 
 
 
 
bc16e8f
 
adb9d22
cf30bfe
aa1dc20
 
cf30bfe
 
bc16e8f
 
 
 
 
d7be7dc
18be423
aa1dc20
bc16e8f
aa1dc20
bc16e8f
 
 
c576d1e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bc16e8f
 
 
 
 
d3660c2
9ccd6e5
bc16e8f
 
 
c576d1e
 
bc16e8f
 
 
 
 
9ccd6e5
 
 
bc16e8f
 
 
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import torch

print(torch.__version__)
print(torch.version.cuda)
print(torch.cuda.is_available())

import os, subprocess
import uuid, tempfile
from glob import glob

env_list = os.environ['PATH'].split(':')
env_list.append('/usr/local/cuda/bin')
os.environ['PATH'] = ':'.join(env_list)
os.environ['TORCH_CUDA_ARCH_LIST'] = '8.6'

import gradio as gr
from huggingface_hub import snapshot_download

os.makedirs("pretrained", exist_ok=True)
snapshot_download(
    repo_id = "jiawei011/L4GM",
    local_dir = "./pretrained"
)

# Folder containing example images
examples_folder = "data_test"

# Retrieve all file paths in the folder
video_examples = [
    os.path.join(examples_folder, file)
    for file in os.listdir(examples_folder)
    if os.path.isfile(os.path.join(examples_folder, file))
]


def generate(input_video):

    unique_id = str(uuid.uuid4())
    
    workdir = f"results_{unique_id}"
    recon_model = "pretrained/recon.safetensors"
    interp_model = "pretrained/interp.safetensors"
    num_frames = 16
    test_path = input_video
    
    try:
        # Run the inference command
        subprocess.run(
            [
                "python", "infer_3d.py", "big",
                "--workspace", f"{workdir}",
                "--resume", f"{recon_model}",
                "--num_frames", f"1",
                "--test_path", f"{test_path}",
            ],
            check=True
        )

        subprocess.run(
            [
                "python", "infer_4d.py", "big",
                "--workspace", f"{workdir}",
                "--resume", f"{recon_model}",
                "--interpresume", f"{interp_model}",
                "--num_frames", f"{num_frames}",
                "--test_path", f"{test_path}",
            ],
            check=True
        )

        output_videos = glob(os.path.join(f"{workdir}", "*.mp4"))
        print(output_videos)
        return output_videos[4]
   
    except subprocess.CalledProcessError as e:
        raise gr.Error(f"Error during inference: {str(e)}")

with gr.Blocks() as demo:
    with gr.Column():
        gr.Markdown("# L4GM: Large 4D Gaussian Reconstruction Model")
            gr.HTML("""
            <div style="display:flex;column-gap:4px;">
                <a href="https://github.com/nv-tlabs/L4GM-official/tree/main">
                    <img src='https://img.shields.io/badge/GitHub-Repo-blue'>
                </a> 
                <a href="https://research.nvidia.com/labs/toronto-ai/l4gm/">
                    <img src='https://img.shields.io/badge/Project-Page-green'>
                </a>
    			<a href="https://arxiv.org/abs/2406.10324">
                    <img src='https://img.shields.io/badge/ArXiv-Paper-red'>
                </a>
                <a href="https://huggingface.co/spaces/fffiloni/L4GM-demo?duplicate=true">
    				<img src="https://huggingface.co/datasets/huggingface/badges/resolve/main/duplicate-this-space-sm.svg" alt="Duplicate this Space">
    			</a>
    			<a href="https://huggingface.co/fffiloni">
    				<img src="https://huggingface.co/datasets/huggingface/badges/resolve/main/follow-me-on-HF-sm-dark.svg" alt="Follow me on HF">
    			</a>
            </div>
            """)
        with gr.Row():
            with gr.Column():
                input_video = gr.Video(label="Input Video")
                submit_btn = gr.Button("Submit")
            with gr.Column():
    
                output_result_4 = gr.Video(label="Result")

        gr.Examples(
            examples = video_examples,
            inputs = [input_video],
            examples_per_page = 3
        )

    submit_btn.click(
        fn = generate,
        inputs = [input_video],
        outputs = [
            output_result_4
        ]
    )

demo.queue().launch(show_api=False, show_error=True)