Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -64,6 +64,8 @@ cleanup_thread.start()
|
|
64 |
@spaces.GPU
|
65 |
def fn(vid, bg_type="Color", bg_image=None, bg_video=None, color="#00FF00", fps=0, video_handling="slow_down", fast_mode=False):
|
66 |
try:
|
|
|
|
|
67 |
# Load the video using moviepy
|
68 |
video = mp.VideoFileClip(vid)
|
69 |
|
@@ -79,7 +81,7 @@ def fn(vid, bg_type="Color", bg_image=None, bg_video=None, color="#00FF00", fps=
|
|
79 |
|
80 |
# Process each frame for background removal
|
81 |
processed_frames = []
|
82 |
-
yield gr.update(visible=True), gr.update(visible=False)
|
83 |
|
84 |
if bg_type == "Video":
|
85 |
background_video = mp.VideoFileClip(bg_video)
|
@@ -115,7 +117,8 @@ def fn(vid, bg_type="Color", bg_image=None, bg_video=None, color="#00FF00", fps=
|
|
115 |
processed_image = pil_image # Default to original image if no background is selected
|
116 |
|
117 |
processed_frames.append(np.array(processed_image))
|
118 |
-
|
|
|
119 |
|
120 |
# Create a new video from the processed frames
|
121 |
processed_video = mp.ImageSequenceClip(processed_frames, fps=fps)
|
@@ -130,14 +133,16 @@ def fn(vid, bg_type="Color", bg_image=None, bg_video=None, color="#00FF00", fps=
|
|
130 |
temp_filepath = os.path.join(temp_dir, unique_filename)
|
131 |
processed_video.write_videofile(temp_filepath, codec="libx264")
|
132 |
|
133 |
-
|
|
|
134 |
# Return the path to the temporary file
|
135 |
-
yield processed_image, temp_filepath
|
136 |
|
137 |
except Exception as e:
|
138 |
print(f"Error: {e}")
|
139 |
-
|
140 |
-
yield
|
|
|
141 |
|
142 |
|
143 |
def process(image, bg, fast_mode=False):
|
@@ -192,6 +197,7 @@ with gr.Blocks(theme=gr.themes.Ocean()) as demo:
|
|
192 |
video_handling_radio = gr.Radio(["slow_down", "loop"], label="Video Handling", value="slow_down", interactive=True)
|
193 |
fast_mode_checkbox = gr.Checkbox(label="Fast Mode (Use BiRefNet_lite)", value=False, interactive=True)
|
194 |
|
|
|
195 |
|
196 |
def update_visibility(bg_type):
|
197 |
if bg_type == "Color":
|
@@ -214,7 +220,7 @@ with gr.Blocks(theme=gr.themes.Ocean()) as demo:
|
|
214 |
["rickroll-2sec.mp4", "Color", None, None],
|
215 |
],
|
216 |
inputs=[in_video, bg_type, bg_image, bg_video],
|
217 |
-
outputs=[stream_image, out_video],
|
218 |
fn=fn,
|
219 |
cache_examples=True,
|
220 |
cache_mode="eager",
|
@@ -224,7 +230,7 @@ with gr.Blocks(theme=gr.themes.Ocean()) as demo:
|
|
224 |
submit_button.click(
|
225 |
fn,
|
226 |
inputs=[in_video, bg_type, bg_image, bg_video, color_picker, fps_slider, video_handling_radio, fast_mode_checkbox],
|
227 |
-
outputs=[stream_image, out_video],
|
228 |
)
|
229 |
|
230 |
if __name__ == "__main__":
|
|
|
64 |
@spaces.GPU
|
65 |
def fn(vid, bg_type="Color", bg_image=None, bg_video=None, color="#00FF00", fps=0, video_handling="slow_down", fast_mode=False):
|
66 |
try:
|
67 |
+
start_time = time.time() # Start the timer
|
68 |
+
|
69 |
# Load the video using moviepy
|
70 |
video = mp.VideoFileClip(vid)
|
71 |
|
|
|
81 |
|
82 |
# Process each frame for background removal
|
83 |
processed_frames = []
|
84 |
+
yield gr.update(visible=True), gr.update(visible=False), f"Processing started... Elapsed time: 0 seconds"
|
85 |
|
86 |
if bg_type == "Video":
|
87 |
background_video = mp.VideoFileClip(bg_video)
|
|
|
117 |
processed_image = pil_image # Default to original image if no background is selected
|
118 |
|
119 |
processed_frames.append(np.array(processed_image))
|
120 |
+
elapsed_time = time.time() - start_time
|
121 |
+
yield processed_image, None, f"Processing frame {i+1}... Elapsed time: {elapsed_time:.2f} seconds"
|
122 |
|
123 |
# Create a new video from the processed frames
|
124 |
processed_video = mp.ImageSequenceClip(processed_frames, fps=fps)
|
|
|
133 |
temp_filepath = os.path.join(temp_dir, unique_filename)
|
134 |
processed_video.write_videofile(temp_filepath, codec="libx264")
|
135 |
|
136 |
+
elapsed_time = time.time() - start_time
|
137 |
+
yield gr.update(visible=False), gr.update(visible=True), f"Processing complete! Elapsed time: {elapsed_time:.2f} seconds"
|
138 |
# Return the path to the temporary file
|
139 |
+
yield processed_image, temp_filepath, f"Processing complete! Elapsed time: {elapsed_time:.2f} seconds"
|
140 |
|
141 |
except Exception as e:
|
142 |
print(f"Error: {e}")
|
143 |
+
elapsed_time = time.time() - start_time
|
144 |
+
yield gr.update(visible=False), gr.update(visible=True), f"Error processing video: {e}. Elapsed time: {elapsed_time:.2f} seconds"
|
145 |
+
yield None, f"Error processing video: {e}", f"Error processing video: {e}. Elapsed time: {elapsed_time:.2f} seconds"
|
146 |
|
147 |
|
148 |
def process(image, bg, fast_mode=False):
|
|
|
197 |
video_handling_radio = gr.Radio(["slow_down", "loop"], label="Video Handling", value="slow_down", interactive=True)
|
198 |
fast_mode_checkbox = gr.Checkbox(label="Fast Mode (Use BiRefNet_lite)", value=False, interactive=True)
|
199 |
|
200 |
+
time_textbox = gr.Textbox(label="Time Elapsed", interactive=False) # Add time textbox
|
201 |
|
202 |
def update_visibility(bg_type):
|
203 |
if bg_type == "Color":
|
|
|
220 |
["rickroll-2sec.mp4", "Color", None, None],
|
221 |
],
|
222 |
inputs=[in_video, bg_type, bg_image, bg_video],
|
223 |
+
outputs=[stream_image, out_video, time_textbox],
|
224 |
fn=fn,
|
225 |
cache_examples=True,
|
226 |
cache_mode="eager",
|
|
|
230 |
submit_button.click(
|
231 |
fn,
|
232 |
inputs=[in_video, bg_type, bg_image, bg_video, color_picker, fps_slider, video_handling_radio, fast_mode_checkbox],
|
233 |
+
outputs=[stream_image, out_video, time_textbox],
|
234 |
)
|
235 |
|
236 |
if __name__ == "__main__":
|