alexnasa commited on
Commit
9db6838
·
1 Parent(s): 2d63447

alltogether

Browse files
Files changed (1) hide show
  1. app.py +25 -37
app.py CHANGED
@@ -215,16 +215,31 @@ def step4_track(state):
215
 
216
  return "✅ Pipeline complete!", image, state, gr.update(interactive=True)
217
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
  # Build Gradio UI
219
  demo = gr.Blocks()
220
-
221
  with demo:
222
- gr.Markdown("## Image Processing Pipeline")
223
- gr.Markdown("Upload an image, then click the buttons in order. Uploading a new image will reset the process.")
224
  with gr.Row():
225
  with gr.Column():
226
  image_in = gr.Image(label="Upload Image", type="numpy", height=512)
227
- status = gr.Textbox(label="Status", lines=2, interactive=True, value="Upload an image to start.")
228
  state = gr.State({})
229
  with gr.Column():
230
  with gr.Row():
@@ -233,43 +248,16 @@ with demo:
233
  with gr.Row():
234
  uv_img = gr.Image(label="UV Map", height=256)
235
  track_img = gr.Image(label="Tracking", height=256)
 
236
 
237
- with gr.Row():
238
- preprocess_btn = gr.Button("Step 1: Preprocess", interactive=True)
239
- normals_btn = gr.Button("Step 2: Normals", interactive=True)
240
- uv_map_btn = gr.Button("Step 3: UV Map", interactive=True)
241
- track_btn = gr.Button("Step 4: Track", interactive=True)
242
-
243
- # Define component list for reset
244
- outputs_for_reset = [crop_img, normals_img, uv_img, track_img, status, state, preprocess_btn, normals_btn, uv_map_btn, track_btn]
245
-
246
- # Pipeline execution logic
247
- preprocess_btn.click(
248
- fn=preprocess_image,
249
  inputs=[image_in, state],
250
- outputs=[status, crop_img, state, preprocess_btn, normals_btn]
251
- )
252
- normals_btn.click(
253
- fn=step2_normals,
254
- inputs=[state],
255
- outputs=[status, normals_img, state, normals_btn, uv_map_btn]
256
- )
257
- uv_map_btn.click(
258
- fn=step3_uv_map,
259
- inputs=[state],
260
- outputs=[status, uv_img, state, uv_map_btn, track_btn]
261
- )
262
- track_btn.click(
263
- fn=step4_track,
264
- inputs=[state],
265
- outputs=[status, track_img, state, track_btn]
266
  )
267
 
268
- # Event to reset everything when a new image is uploaded
269
- image_in.upload(fn=reset_all, inputs=None, outputs=outputs_for_reset)
270
 
271
- # ------------------------------------------------------------------
272
- # START THE GRADIO SERVER
273
- # ------------------------------------------------------------------
274
  demo.queue()
275
  demo.launch(share=True, ssr_mode=False)
 
215
 
216
  return "✅ Pipeline complete!", image, state, gr.update(interactive=True)
217
 
218
+ # New: run all steps sequentially
219
+ @spaces.GPU()
220
+ def run_pipeline(image_array, state):
221
+ # Step 1: Preprocess
222
+ status1, crop_img, state, _, _ = preprocess_image(image_array, state)
223
+ if "❌" in status1:
224
+ return status1, None, None, None, None, {}
225
+ # Step 2: Normals
226
+ status2, normals_img, state, _, _ = step2_normals(state)
227
+ # Step 3: UV Map
228
+ status3, uv_img, state, _, _ = step3_uv_map(state)
229
+ # Step 4: Tracking
230
+ status4, track_img, state, _ = step4_track(state)
231
+ final_status = "\n".join([status1, status2, status3, status4])
232
+ return final_status, crop_img, normals_img, uv_img, track_img, state
233
+
234
  # Build Gradio UI
235
  demo = gr.Blocks()
 
236
  with demo:
237
+ gr.Markdown("## Image Processing Pipeline (Single Button)")
238
+ gr.Markdown("Upload an image and click 'Run Pipeline' to execute all steps.")
239
  with gr.Row():
240
  with gr.Column():
241
  image_in = gr.Image(label="Upload Image", type="numpy", height=512)
242
+ status = gr.Textbox(label="Status", lines=4, interactive=True, value="Upload an image to start.")
243
  state = gr.State({})
244
  with gr.Column():
245
  with gr.Row():
 
248
  with gr.Row():
249
  uv_img = gr.Image(label="UV Map", height=256)
250
  track_img = gr.Image(label="Tracking", height=256)
251
+ run_btn = gr.Button("Run Pipeline")
252
 
253
+ # Single button click
254
+ run_btn.click(
255
+ fn=run_pipeline,
 
 
 
 
 
 
 
 
 
256
  inputs=[image_in, state],
257
+ outputs=[status, crop_img, normals_img, uv_img, track_img, state]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
258
  )
259
 
260
+ image_in.upload(fn=reset_all, inputs=None, outputs=[crop_img, normals_img, uv_img, track_img, status, state])
 
261
 
 
 
 
262
  demo.queue()
263
  demo.launch(share=True, ssr_mode=False)