Update app.py
Browse files
app.py
CHANGED
|
@@ -9,19 +9,15 @@ import subprocess
|
|
| 9 |
# Crear carpetas necesarias
|
| 10 |
INPUT_DIR = "batch_images"
|
| 11 |
OUTPUT_DIR = "batch_results"
|
| 12 |
-
RESULTS_DIR = "comparaciones"
|
| 13 |
os.makedirs(INPUT_DIR, exist_ok=True)
|
| 14 |
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
| 15 |
-
os.makedirs(RESULTS_DIR, exist_ok=True)
|
| 16 |
|
| 17 |
def face_swap_batch(rb_img, lote_imgs):
|
| 18 |
# Limpiar carpetas anteriores
|
| 19 |
shutil.rmtree(INPUT_DIR, ignore_errors=True)
|
| 20 |
shutil.rmtree(OUTPUT_DIR, ignore_errors=True)
|
| 21 |
-
shutil.rmtree(RESULTS_DIR, ignore_errors=True)
|
| 22 |
os.makedirs(INPUT_DIR, exist_ok=True)
|
| 23 |
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
| 24 |
-
os.makedirs(RESULTS_DIR, exist_ok=True)
|
| 25 |
|
| 26 |
# Guardar rostro base
|
| 27 |
rb_path = os.path.join(INPUT_DIR, "RB.jpg")
|
|
@@ -49,23 +45,15 @@ def face_swap_batch(rb_img, lote_imgs):
|
|
| 49 |
"--frame-processor", "face_swapper", "face_enhancer"
|
| 50 |
])
|
| 51 |
|
| 52 |
-
#
|
| 53 |
resultados = []
|
| 54 |
for path in img_paths:
|
| 55 |
filename = os.path.basename(path)
|
| 56 |
-
original = Image.open(path).resize((256, 256))
|
| 57 |
generado_path = os.path.join(OUTPUT_DIR, f"swapped_{filename}")
|
| 58 |
-
if
|
| 59 |
-
|
| 60 |
-
generado = Image.open(generado_path).resize((256, 256))
|
| 61 |
-
combinado = Image.new("RGB", (512, 256))
|
| 62 |
-
combinado.paste(original, (0, 0))
|
| 63 |
-
combinado.paste(generado, (256, 0))
|
| 64 |
-
out_path = os.path.join(RESULTS_DIR, f"comparado_{filename}")
|
| 65 |
-
combinado.save(out_path)
|
| 66 |
-
resultados.append(out_path)
|
| 67 |
|
| 68 |
-
#
|
| 69 |
if len(resultados) == 1:
|
| 70 |
return resultados[0]
|
| 71 |
else:
|
|
@@ -82,7 +70,7 @@ gr.Interface(
|
|
| 82 |
gr.Image(label="🧠 Rostro base", type="pil"),
|
| 83 |
gr.File(label="🖼️ Imágenes por lote", file_types=["image"], file_count="multiple")
|
| 84 |
],
|
| 85 |
-
outputs=gr.File(label="📦 Descargar
|
| 86 |
title="Deep Fake Lote - Yepo Hz",
|
| 87 |
-
description="Sube una imagen de rostro base y varias imágenes objetivo. El sistema aplicará el cambio de rostro en lote
|
| 88 |
).launch()
|
|
|
|
| 9 |
# Crear carpetas necesarias
|
| 10 |
INPUT_DIR = "batch_images"
|
| 11 |
OUTPUT_DIR = "batch_results"
|
|
|
|
| 12 |
os.makedirs(INPUT_DIR, exist_ok=True)
|
| 13 |
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
|
|
|
| 14 |
|
| 15 |
def face_swap_batch(rb_img, lote_imgs):
|
| 16 |
# Limpiar carpetas anteriores
|
| 17 |
shutil.rmtree(INPUT_DIR, ignore_errors=True)
|
| 18 |
shutil.rmtree(OUTPUT_DIR, ignore_errors=True)
|
|
|
|
| 19 |
os.makedirs(INPUT_DIR, exist_ok=True)
|
| 20 |
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
|
|
|
| 21 |
|
| 22 |
# Guardar rostro base
|
| 23 |
rb_path = os.path.join(INPUT_DIR, "RB.jpg")
|
|
|
|
| 45 |
"--frame-processor", "face_swapper", "face_enhancer"
|
| 46 |
])
|
| 47 |
|
| 48 |
+
# Devolver solo las imágenes generadas
|
| 49 |
resultados = []
|
| 50 |
for path in img_paths:
|
| 51 |
filename = os.path.basename(path)
|
|
|
|
| 52 |
generado_path = os.path.join(OUTPUT_DIR, f"swapped_{filename}")
|
| 53 |
+
if os.path.exists(generado_path):
|
| 54 |
+
resultados.append(generado_path)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 55 |
|
| 56 |
+
# ZIP o imagen suelta
|
| 57 |
if len(resultados) == 1:
|
| 58 |
return resultados[0]
|
| 59 |
else:
|
|
|
|
| 70 |
gr.Image(label="🧠 Rostro base", type="pil"),
|
| 71 |
gr.File(label="🖼️ Imágenes por lote", file_types=["image"], file_count="multiple")
|
| 72 |
],
|
| 73 |
+
outputs=gr.File(label="📦 Descargar resultado"),
|
| 74 |
title="Deep Fake Lote - Yepo Hz",
|
| 75 |
+
description="Sube una imagen de rostro base y varias imágenes objetivo. El sistema aplicará el cambio de rostro en lote y te permitirá descargar las imágenes finales."
|
| 76 |
).launch()
|