File size: 3,547 Bytes
06eb312
 
 
 
 
 
 
69d74b9
06eb312
2bfdeb5
 
fd3a4fc
 
d34f9a3
2bfdeb5
 
 
bea517c
 
 
06eb312
7ebfe01
 
 
33160bf
d49f5a6
 
 
 
 
 
 
 
 
 
 
 
 
06eb312
 
 
d34f9a3
c8e1295
5477f9e
06eb312
 
f617832
06eb312
c8e1295
4ee0f04
06eb312
d49f5a6
 
349b18f
69d74b9
 
 
 
 
 
06eb312
69d74b9
06eb312
bbdc3e1
d1856d2
b631da0
 
 
d1856d2
06eb312
 
d1856d2
06eb312
8d70672
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
import os
import torch
import subprocess
import spaces
import gradio as gr
from PIL import Image
import numpy as np
from moviepy.editor import VideoFileClip

os.environ['CUDA_HOME'] = "/usr/local/lib/python3.10/site-packages/nvidia/cuda_runtime/include"

os.environ['PATH'] = '/usr/local/lib/python3.10/site-packages/nvidia/cuda_nvrtc/lib:' + os.environ.get('PATH', '')
os.environ['LD_LIBRARY_PATH'] = '/usr/local/lib/python3.10/site-packages/nvidia/cuda_nvrtc/lib:' + os.environ.get('LD_LIBRARY_PATH', '')

os.environ['PATH'] = '/usr/local/lib/python3.10/site-packages/nvidia/cuda_runtime/include:' + os.environ.get('PATH', '')
os.environ['LD_LIBRARY_PATH'] = '/usr/local/lib/python3.10/site-packages/nvidia/cuda_runtime/include:' + os.environ.get('LD_LIBRARY_PATH', '')

print(os.environ['PATH'])
print(os.environ['LD_LIBRARY_PATH'])

subprocess.run(["git", "clone", "https://github.com/sniklaus/3d-ken-burns.git"])
subprocess.run(["mv", "./network-disparity.pytorch", "./3d-ken-burns/models/disparity-estimation.pytorch"])
subprocess.run(["mv", "./network-refinement.pytorch", "./3d-ken-burns/models/disparity-refinement.pytorch"])
subprocess.run(["mv", "./network-inpainting.pytorch", "./3d-ken-burns/models/pointcloud-inpainting.pytorch"])

subprocess.run(["cp", "./3d-ken-burns/autozoom.py", "./3d-ken-burns/autozoom-original.py"])

def update_parameters(fltShift=100, fltZoom=1.25, steps1=0.0, steps2=1.0, frames=240, fps=30):
  with open ('./3d-ken-burns/autozoom-original.py','r') as azo:
     script = azo.read()
     script = script.replace("'fltShift': 100.0",f"'fltShift': {fltShift}")
     script = script.replace("'fltZoom': 1.25",f"'fltZoom': {fltZoom}")
     script = script.replace("'fltSteps': numpy.linspace(0.0, 1.0, 75).tolist(),",f"'fltSteps': numpy.linspace({steps1}, {steps2}, {frames}).tolist(),")
     script = script.replace(", fps=25)",f", fps={fps})")
     with open ('./3d-ken-burns/autozoom.py','w') as az:
         az.write(script)
         az.truncate()
         az.seek(0)

@spaces.GPU
def generate_video(image):
    subprocess.run(["nvidia-smi"])
    subprocess.run(["ls","-al","/tmp"])
    image = Image.fromarray(image)
    image.save("/tmp/img.png")
    os.chdir("./3d-ken-burns")
    subprocess.run(["python", "autozoom.py", "--in", "/tmp/img.png", "--out", "/tmp/autozoom.mp4"]) 
    os.chdir("..")
    subprocess.run(["ls","-al","/tmp"])
    return "/tmp/autozoom.mp4"

def get_video(image,fltShift=100, fltZoom=1.25, steps1=0.0, steps2=1.0, frames=240, fps=30):
    update_parameters(fltShift, fltZoom, steps1, steps2, frames, fps)
    video_path = generate_video(image)
    clip = VideoFileClip("/tmp/autozoom.mp4")
    duration = clip.duration / 2
    clip = clip.subclip(0, duration)
    clip.write_videofile("/tmp/final.mp4")
    return "/tmp/final.mp4"

with gr.Blocks() as demo:
    gr.Markdown("""# 3D Zoom Video Generator!""")
    image = gr.Image()
    fltShift = gr.Slider(0, 1000, value=100, step=1, label="Flat Shift")
    fltZoom = gr.Slider(0.0, 5.0, value=1.25, step=0.1,label="Flat Zoom")
    steps1 = gr.Slider(0.0, 5.0, value=0.0, step=0.1, label="Steps1")
    steps2 = gr.Slider(0.0, 5.0, value=1.0, step=0.1, label="Steps2")
    frames = gr.Slider(50, 10000, value=240, step=1, label="Frames")
    fps = gr.Slider(10, 60, value=30, step=1, label="Frames per Second")
    submit_image = gr.Button(value="Generate Video")
    video = gr.Video()
    submit_image.click(fn=get_video,inputs=[image,fltShift,fltZoom,steps1,steps2,frames,fps],outputs=video)
    
demo.launch(show_error=True)