Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -62,19 +62,22 @@ def procesar_video(video):
|
|
| 62 |
collage_path = os.path.join(temp_dir, "collage.jpg")
|
| 63 |
collage.save(collage_path)
|
| 64 |
|
| 65 |
-
# Generaci贸n del ZIP
|
| 66 |
base_name = os.path.splitext(original_name)[0]
|
| 67 |
zip_filename = f"{base_name}.zip"
|
| 68 |
final_zip_path = os.path.join(temp_dir, zip_filename)
|
| 69 |
|
| 70 |
with zipfile.ZipFile(final_zip_path, mode="w") as zipf:
|
|
|
|
| 71 |
for img_path in frame_paths:
|
| 72 |
zipf.write(img_path, os.path.basename(img_path))
|
| 73 |
|
|
|
|
| 74 |
chain_content = (
|
| 75 |
f"Nombre del archivo: {original_name}\n"
|
| 76 |
f"Fecha de carga y extracci贸n: {timestamp}\n"
|
| 77 |
f"N煤mero de fotogramas: {frame_count}\n"
|
|
|
|
| 78 |
)
|
| 79 |
zipf.writestr("cadena_custodia.txt", chain_content)
|
| 80 |
|
|
@@ -90,7 +93,7 @@ def limpiar_cache(temp_dir):
|
|
| 90 |
os.rmdir(temp_dir)
|
| 91 |
|
| 92 |
with gr.Blocks(title="Extracci贸n de Fotogramas Forenses") as demo:
|
| 93 |
-
gr.Markdown("# Herramienta de Extracci贸n de Fotogramas Forenses")
|
| 94 |
gr.Markdown("**Carga un video para extraer TODOS los fotogramas y generar un collage de muestra.**")
|
| 95 |
gr.Markdown("Desarrollado por Jos茅 R. Leonett para el Grupo de Peritos Forenses Digitales de Guatemala - [www.forensedigital.gt](https://www.forensedigital.gt)")
|
| 96 |
|
|
@@ -101,7 +104,7 @@ with gr.Blocks(title="Extracci贸n de Fotogramas Forenses") as demo:
|
|
| 101 |
with gr.Column():
|
| 102 |
gallery_output = gr.Image(label="Collage de Muestra")
|
| 103 |
download_btn = gr.Button("DESCARGAR FOTOGRAMAS", interactive=False)
|
| 104 |
-
download_file = gr.File(label="Archivo ZIP generado", visible=
|
| 105 |
|
| 106 |
temp_dir_state = gr.State(None)
|
| 107 |
zip_path_state = gr.State(None)
|
|
@@ -131,9 +134,12 @@ with gr.Blocks(title="Extracci贸n de Fotogramas Forenses") as demo:
|
|
| 131 |
)
|
| 132 |
|
| 133 |
def trigger_download(zip_path):
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
|
|
|
|
|
|
|
|
|
| 137 |
|
| 138 |
download_btn.click(
|
| 139 |
fn=trigger_download,
|
|
|
|
| 62 |
collage_path = os.path.join(temp_dir, "collage.jpg")
|
| 63 |
collage.save(collage_path)
|
| 64 |
|
| 65 |
+
# Generaci贸n del ZIP
|
| 66 |
base_name = os.path.splitext(original_name)[0]
|
| 67 |
zip_filename = f"{base_name}.zip"
|
| 68 |
final_zip_path = os.path.join(temp_dir, zip_filename)
|
| 69 |
|
| 70 |
with zipfile.ZipFile(final_zip_path, mode="w") as zipf:
|
| 71 |
+
# A帽adir todos los frames
|
| 72 |
for img_path in frame_paths:
|
| 73 |
zipf.write(img_path, os.path.basename(img_path))
|
| 74 |
|
| 75 |
+
# A帽adir TXT de cadena de custodia
|
| 76 |
chain_content = (
|
| 77 |
f"Nombre del archivo: {original_name}\n"
|
| 78 |
f"Fecha de carga y extracci贸n: {timestamp}\n"
|
| 79 |
f"N煤mero de fotogramas: {frame_count}\n"
|
| 80 |
+
f"Hash MD5 del video: {hashlib.md5(open(video_path, 'rb').read()).hexdigest()}\n"
|
| 81 |
)
|
| 82 |
zipf.writestr("cadena_custodia.txt", chain_content)
|
| 83 |
|
|
|
|
| 93 |
os.rmdir(temp_dir)
|
| 94 |
|
| 95 |
with gr.Blocks(title="Extracci贸n de Fotogramas Forenses") as demo:
|
| 96 |
+
gr.Markdown("# 馃摲 Herramienta de Extracci贸n de Fotogramas Forenses")
|
| 97 |
gr.Markdown("**Carga un video para extraer TODOS los fotogramas y generar un collage de muestra.**")
|
| 98 |
gr.Markdown("Desarrollado por Jos茅 R. Leonett para el Grupo de Peritos Forenses Digitales de Guatemala - [www.forensedigital.gt](https://www.forensedigital.gt)")
|
| 99 |
|
|
|
|
| 104 |
with gr.Column():
|
| 105 |
gallery_output = gr.Image(label="Collage de Muestra")
|
| 106 |
download_btn = gr.Button("DESCARGAR FOTOGRAMAS", interactive=False)
|
| 107 |
+
download_file = gr.File(label="Archivo ZIP generado", visible=True) # Cambiado a visible
|
| 108 |
|
| 109 |
temp_dir_state = gr.State(None)
|
| 110 |
zip_path_state = gr.State(None)
|
|
|
|
| 134 |
)
|
| 135 |
|
| 136 |
def trigger_download(zip_path):
|
| 137 |
+
try:
|
| 138 |
+
with open(zip_path, "rb") as f:
|
| 139 |
+
file_bytes = f.read()
|
| 140 |
+
return os.path.basename(zip_path), file_bytes
|
| 141 |
+
except Exception as e:
|
| 142 |
+
raise gr.Error(f"Error al generar descarga: {str(e)}")
|
| 143 |
|
| 144 |
download_btn.click(
|
| 145 |
fn=trigger_download,
|