Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -141,9 +141,7 @@ with gr.Blocks(title="Extracci贸n de Fotogramas Forenses") as demo:
|
|
141 |
|
142 |
with gr.Row():
|
143 |
with gr.Column():
|
144 |
-
# Se elimina el par谩metro 'source' para que solo se permita la carga de archivos.
|
145 |
video_input = gr.Video(label="Subir Video (solo archivos de video)", interactive=True)
|
146 |
-
# Ambos botones inician desactivados
|
147 |
procesar_btn = gr.Button("Procesar Fotogramas", interactive=False)
|
148 |
with gr.Column():
|
149 |
gallery_output = gr.Image(label="Collage de Muestra")
|
@@ -154,9 +152,7 @@ with gr.Blocks(title="Extracci贸n de Fotogramas Forenses") as demo:
|
|
154 |
temp_dir_state = gr.State(None)
|
155 |
zip_path_state = gr.State(None)
|
156 |
|
157 |
-
# Al cargar un video: si es v谩lido, se activa el bot贸n "Procesar Fotogramas" y se desactiva "DESCARGAR FOTOGRAMAS"
|
158 |
def on_video_change(video):
|
159 |
-
# Verificar que se haya cargado algo y que contenga informaci贸n
|
160 |
if not video:
|
161 |
return gr.update(interactive=False), gr.update(interactive=False)
|
162 |
if isinstance(video, dict) and video.get("name"):
|
@@ -168,7 +164,6 @@ with gr.Blocks(title="Extracci贸n de Fotogramas Forenses") as demo:
|
|
168 |
allowed_extensions = ('.mp4', '.avi', '.mov', '.mkv')
|
169 |
if not original_name.lower().endswith(allowed_extensions):
|
170 |
raise gr.Error("Solo se permiten archivos de video (mp4, avi, mov, mkv)")
|
171 |
-
# Al tener un video v谩lido, activa "Procesar Fotogramas" y desactiva "DESCARGAR FOTOGRAMAS"
|
172 |
return gr.update(interactive=True), gr.update(interactive=False)
|
173 |
|
174 |
video_input.change(
|
@@ -178,8 +173,6 @@ with gr.Blocks(title="Extracci贸n de Fotogramas Forenses") as demo:
|
|
178 |
queue=False
|
179 |
)
|
180 |
|
181 |
-
# Al pulsar "Procesar Fotogramas": se procesa el video, se genera el collage y el ZIP, se desactiva el bot贸n de procesar
|
182 |
-
# y se activa el bot贸n de descarga.
|
183 |
def procesar_y_mostrar(video):
|
184 |
btn_proc_update = gr.update(interactive=False)
|
185 |
if temp_dir_state.value:
|
@@ -194,9 +187,9 @@ with gr.Blocks(title="Extracci贸n de Fotogramas Forenses") as demo:
|
|
194 |
outputs=[gallery_output, download_file, temp_dir_state, zip_path_state, download_btn, procesar_btn],
|
195 |
)
|
196 |
|
197 |
-
#
|
198 |
def trigger_download(zip_path):
|
199 |
-
return
|
200 |
|
201 |
download_btn.click(
|
202 |
fn=trigger_download,
|
|
|
141 |
|
142 |
with gr.Row():
|
143 |
with gr.Column():
|
|
|
144 |
video_input = gr.Video(label="Subir Video (solo archivos de video)", interactive=True)
|
|
|
145 |
procesar_btn = gr.Button("Procesar Fotogramas", interactive=False)
|
146 |
with gr.Column():
|
147 |
gallery_output = gr.Image(label="Collage de Muestra")
|
|
|
152 |
temp_dir_state = gr.State(None)
|
153 |
zip_path_state = gr.State(None)
|
154 |
|
|
|
155 |
def on_video_change(video):
|
|
|
156 |
if not video:
|
157 |
return gr.update(interactive=False), gr.update(interactive=False)
|
158 |
if isinstance(video, dict) and video.get("name"):
|
|
|
164 |
allowed_extensions = ('.mp4', '.avi', '.mov', '.mkv')
|
165 |
if not original_name.lower().endswith(allowed_extensions):
|
166 |
raise gr.Error("Solo se permiten archivos de video (mp4, avi, mov, mkv)")
|
|
|
167 |
return gr.update(interactive=True), gr.update(interactive=False)
|
168 |
|
169 |
video_input.change(
|
|
|
173 |
queue=False
|
174 |
)
|
175 |
|
|
|
|
|
176 |
def procesar_y_mostrar(video):
|
177 |
btn_proc_update = gr.update(interactive=False)
|
178 |
if temp_dir_state.value:
|
|
|
187 |
outputs=[gallery_output, download_file, temp_dir_state, zip_path_state, download_btn, procesar_btn],
|
188 |
)
|
189 |
|
190 |
+
# Soluci贸n para que el bot贸n de descarga retorne la ruta del ZIP
|
191 |
def trigger_download(zip_path):
|
192 |
+
return zip_path
|
193 |
|
194 |
download_btn.click(
|
195 |
fn=trigger_download,
|