alexnasa commited on
Commit
85d5435
Β·
verified Β·
1 Parent(s): aeb7259

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -15
app.py CHANGED
@@ -70,7 +70,6 @@ def get_video_info(video_path):
70
  return seconds_cfg, fps_cfg
71
 
72
  # Step 1: Trim video based on user-defined duration and fps based on user-defined duration and fps
73
- @spaces.GPU()
74
  def step1_trim(video_path, seconds, fps, state):
75
  session_id = str(uuid.uuid4())
76
  base_dir = os.path.join(os.environ["PIXEL3DMM_PREPROCESSED_DATA"], session_id)
@@ -78,12 +77,22 @@ def step1_trim(video_path, seconds, fps, state):
78
 
79
  tmp = tempfile.mkdtemp()
80
  trimmed = os.path.join(tmp, f"{session_id}.mp4")
81
- subprocess.run([
 
 
 
82
  "ffmpeg", "-y", "-i", video_path,
83
  "-t", str(seconds), # user-specified duration
84
  "-r", str(fps), # user-specified fps
85
  trimmed
86
- ], check=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
 
 
 
 
 
 
 
87
  state["trimmed_path"] = trimmed
88
  return f"βœ… Step 1: Trimmed to {seconds}s @{fps}fps", state
89
 
@@ -94,8 +103,6 @@ def step2_preprocess(state):
94
  base_dir = state["base_dir"]
95
  trimmed = state["trimmed_path"]
96
 
97
-
98
-
99
  try:
100
  # capture both stdout & stderr
101
  p = subprocess.run([
@@ -105,7 +112,7 @@ def step2_preprocess(state):
105
  except subprocess.CalledProcessError as e:
106
  # e.stdout contains everything
107
  err = f"❌ Preprocess failed (exit {e.returncode}).\n\n{e.stdout}"
108
- raise RuntimeError(err)
109
 
110
  crop_dir = os.path.join(base_dir, "cropped")
111
  out = os.path.join(os.path.dirname(trimmed), f"crop_{session_id}.mp4")
@@ -127,7 +134,7 @@ def step3_normals(state):
127
  except subprocess.CalledProcessError as e:
128
  # e.stdout contains everything
129
  err = f"❌ Normal map failed (exit {e.returncode}).\n\n{e.stdout}"
130
- raise RuntimeError(err)
131
 
132
  normals_dir = os.path.join(base_dir, "p3dmm", "normals")
133
  out = os.path.join(os.path.dirname(state["trimmed_path"]), f"normals_{session_id}.mp4")
@@ -149,7 +156,7 @@ def step4_uv_map(state):
149
  except subprocess.CalledProcessError as e:
150
  # e.stdout contains everything
151
  err = f"❌ UV map failed (exit {e.returncode}).\n\n{e.stdout}"
152
- raise RuntimeError(err)
153
 
154
  uv_dir = os.path.join(base_dir, "p3dmm", "uv_map")
155
  out = os.path.join(os.path.dirname(state["trimmed_path"]), f"uv_map_{session_id}.mp4")
@@ -171,7 +178,7 @@ def step5_track(state):
171
  except subprocess.CalledProcessError as e:
172
  # e.stdout contains everything
173
  err = f"❌ Tracking failed (exit {e.returncode}).\n\n{e.stdout}"
174
- raise RuntimeError(err)
175
 
176
  # if we get here, it succeeded:
177
  tracking_dir = os.path.join(os.environ["PIXEL3DMM_TRACKING_OUTPUT"], session_id, "frames")
@@ -199,17 +206,26 @@ with demo:
199
  with gr.Row():
200
  uv_vid = gr.Video(label="UV Map", height=256)
201
  track_vid = gr.Video(label="Tracking", height=256)
202
- run_btn = gr.Button("Run Pipeline")
 
 
 
 
203
 
204
  # Update sliders after video upload
205
  video_in.change(fn=get_video_info, inputs=video_in, outputs=[seconds_slider, fps_slider])
206
 
207
  # Pipeline execution
208
- (run_btn.click(fn=step1_trim, inputs=[video_in, seconds_slider, fps_slider, state], outputs=[status, state])
209
- .then(fn=step2_preprocess, inputs=[state], outputs=[status, crop_vid, state])
210
- .then(fn=step3_normals, inputs=[state], outputs=[status, normals_vid, state])
211
- .then(fn=step4_uv_map, inputs=[state], outputs=[status, uv_vid, state])
212
- .then(fn=step5_track, inputs=[state], outputs=[status, track_vid, state])
 
 
 
 
 
213
  )
214
 
215
  # ------------------------------------------------------------------
 
70
  return seconds_cfg, fps_cfg
71
 
72
  # Step 1: Trim video based on user-defined duration and fps based on user-defined duration and fps
 
73
  def step1_trim(video_path, seconds, fps, state):
74
  session_id = str(uuid.uuid4())
75
  base_dir = os.path.join(os.environ["PIXEL3DMM_PREPROCESSED_DATA"], session_id)
 
77
 
78
  tmp = tempfile.mkdtemp()
79
  trimmed = os.path.join(tmp, f"{session_id}.mp4")
80
+
81
+ try:
82
+ # capture both stdout & stderr
83
+ p = subprocess.run([
84
  "ffmpeg", "-y", "-i", video_path,
85
  "-t", str(seconds), # user-specified duration
86
  "-r", str(fps), # user-specified fps
87
  trimmed
88
+ ], check=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
89
+
90
+ except subprocess.CalledProcessError as e:
91
+ # e.stdout contains everything
92
+ err = f"❌ Preprocess failed (exit {e.returncode}).\n\n{e.stdout}"
93
+ return err, None, state
94
+
95
+
96
  state["trimmed_path"] = trimmed
97
  return f"βœ… Step 1: Trimmed to {seconds}s @{fps}fps", state
98
 
 
103
  base_dir = state["base_dir"]
104
  trimmed = state["trimmed_path"]
105
 
 
 
106
  try:
107
  # capture both stdout & stderr
108
  p = subprocess.run([
 
112
  except subprocess.CalledProcessError as e:
113
  # e.stdout contains everything
114
  err = f"❌ Preprocess failed (exit {e.returncode}).\n\n{e.stdout}"
115
+ return err, None, state
116
 
117
  crop_dir = os.path.join(base_dir, "cropped")
118
  out = os.path.join(os.path.dirname(trimmed), f"crop_{session_id}.mp4")
 
134
  except subprocess.CalledProcessError as e:
135
  # e.stdout contains everything
136
  err = f"❌ Normal map failed (exit {e.returncode}).\n\n{e.stdout}"
137
+ return err, None, state
138
 
139
  normals_dir = os.path.join(base_dir, "p3dmm", "normals")
140
  out = os.path.join(os.path.dirname(state["trimmed_path"]), f"normals_{session_id}.mp4")
 
156
  except subprocess.CalledProcessError as e:
157
  # e.stdout contains everything
158
  err = f"❌ UV map failed (exit {e.returncode}).\n\n{e.stdout}"
159
+ return err, None, state
160
 
161
  uv_dir = os.path.join(base_dir, "p3dmm", "uv_map")
162
  out = os.path.join(os.path.dirname(state["trimmed_path"]), f"uv_map_{session_id}.mp4")
 
178
  except subprocess.CalledProcessError as e:
179
  # e.stdout contains everything
180
  err = f"❌ Tracking failed (exit {e.returncode}).\n\n{e.stdout}"
181
+ return err, None, state
182
 
183
  # if we get here, it succeeded:
184
  tracking_dir = os.path.join(os.environ["PIXEL3DMM_TRACKING_OUTPUT"], session_id, "frames")
 
206
  with gr.Row():
207
  uv_vid = gr.Video(label="UV Map", height=256)
208
  track_vid = gr.Video(label="Tracking", height=256)
209
+ run_btn_1 = gr.Button("Run Pipeline 1")
210
+ run_btn_2 = gr.Button("Run Pipeline 2")
211
+ run_btn_3 = gr.Button("Run Pipeline 3")
212
+ run_btn_4 = gr.Button("Run Pipeline 4")
213
+ run_btn_5 = gr.Button("Run Pipeline 5")
214
 
215
  # Update sliders after video upload
216
  video_in.change(fn=get_video_info, inputs=video_in, outputs=[seconds_slider, fps_slider])
217
 
218
  # Pipeline execution
219
+ run_btn_1.click(fn=step1_trim, inputs=[video_in, seconds_slider, fps_slider, state], outputs=[status, state])
220
+ run_btn_2.click(fn=step2_preprocess, inputs=[state], outputs=[status, crop_vid, state])
221
+ run_btn_3.click(fn=step3_normals, inputs=[state], outputs=[status, normals_vid, state])
222
+ run_btn_4.click(fn=step4_uv_map, inputs=[state], outputs=[status, uv_vid, state])
223
+ run_btn_5.click(fn=step5_track, inputs=[state], outputs=[status, track_vid, state])
224
+
225
+ # .then(fn=step2_preprocess, inputs=[state], outputs=[status, crop_vid, state])
226
+ # .then(fn=step3_normals, inputs=[state], outputs=[status, normals_vid, state])
227
+ # .then(fn=step4_uv_map, inputs=[state], outputs=[status, uv_vid, state])
228
+ # .then(fn=step5_track, inputs=[state], outputs=[status, track_vid, state])
229
  )
230
 
231
  # ------------------------------------------------------------------