Spaces:
Paused
Paused
import gradio as gr | |
from PIL import Image | |
import time | |
import os | |
import pathlib | |
import zipfile36 as zipfile | |
def perform(input1, input2, input3): | |
modo = "video" | |
#local o huggingface | |
plataforma = "huggingface" | |
#face_swapper o face_enhancer o la combinación de ellos. | |
#El default, por si el usuario no eligiera nada, es: | |
procesador = "face_swapper" | |
print("Por ahora el procesador es:", procesador) | |
#De GoldenStream se quitó la opción de hacer face enhancer, incluso más adelante remover lo de arriba. | |
print("Inicio: Estamos en modo ", modo) | |
print("Estamos en la plataforma:", plataforma) | |
print("El procesador es: ", procesador) | |
path_video = input2 | |
if plataforma == "local": | |
#Para local. | |
path_parts = path_video.split("\\") | |
else: | |
#Para HuggingFace | |
print("La plataforma en la que basaremos la división es HuggingFace.") | |
path_parts = path_video.split("/") | |
#Aquí obtendremos nom_video | |
filename = path_parts[-1] | |
nom_video = filename[:-4] | |
print("Esto es filename alias nom_video: ", nom_video) | |
time.sleep(1) | |
path_particular = "/".join(path_parts[0:len(path_parts) - 1]) | |
path_general = "/".join(path_parts[0:len(path_parts) - 2]) | |
path_general = path_general.replace("\\", "/") | |
path_particular = path_particular.replace("\\", "/") | |
print("Path general: ", path_general) | |
print("Path general: ", path_particular) | |
path = pathlib.Path("result.mp4") | |
files = os.listdir(path_general) | |
print("Estos son los files que hay:") | |
print(files) | |
ext_imagen = "png" | |
ext_video = "mp4" | |
#Selector de modo. | |
if modo == "video": | |
print("Se asigno la extensión de video:", ext_video) | |
extension = ext_video | |
else: | |
print("Se asigno la extensión de video:", ext_video) | |
extension = ext_imagen | |
#El source siempre es una imagen. | |
source_path = "source.png" | |
target_path = "target." + extension | |
result_path = "result." + extension | |
#La primera siempre será una imagen, por eso no entra en el modo selector. | |
source_image = Image.fromarray(input1) | |
print("Esto es source_image: ", source_image) | |
source_image.save(source_path) | |
#Aquí trabajaremos solo el target. | |
if modo == "video": | |
#Para Video | |
target_path = input2 | |
else: | |
#Es decir si es modo imagen | |
#Para Imagenes | |
target_image = Image.fromarray(input2) | |
print("Esto es target_image: ", target_image) | |
target_image.save(target_path) | |
print("Después de los selectores de modo los paths quedaron así:") | |
print("source_path: ", source_path) | |
print("target_path: ", target_path) | |
command = f"python run.py -s {source_path} -t {target_path} -o {result_path} --frame-processor {procesador} --execution-provider cuda" | |
print(command) | |
time.sleep(1) | |
proc = os.popen(command) | |
output = proc.read() | |
print("Output (resultado de la ejecución del código):") | |
time.sleep(1) | |
print(output) | |
print("Terminó la impresión del output...") | |
print("Éste es el momento en el que se creo result, revisar...") | |
time.sleep(1) | |
print("Ahora estamos imprimiendo las rutas para ver si apareció una nueva:") | |
files = os.listdir(path_general) | |
print("Estos son los files que hay:") | |
print(files) | |
#Creación de la galería: | |
images = [] | |
#nom_video = "whitebeauty" | |
path_foto = pathlib.Path(path_particular + "/temp/" + nom_video + "/") | |
print("Éste es el path foto: ", path_foto) | |
path_result = str(path_foto) + "/temp.mp4" | |
print("Y éste es el path del resultado: ", path_result) | |
try: | |
#save_images_as_zip(path_foto, nombre_zip, plataforma) | |
print("Ésta vez no crearemos archivo zip.") | |
except Exception as e: | |
# código que se ejecutará si se produce la excepción | |
print(e) | |
if modo == "video": | |
#Para video | |
path = pathlib.Path("result.mp4") | |
path_abs = os.path.abspath(path) | |
print("Éste es el path para video:", path) | |
print("Y su ruta absoluta es: ", path_abs) | |
return path | |
else: | |
#Para imagen | |
path = pathlib.Path("result.png") | |
print("Éste es el path para imagen:", path) | |
return path, images, images | |
print("Listo! Gracias!") | |
#Así para imagenes | |
# demo = gr.Interface( | |
# fn=greet, inputs=[gr.Image(), gr.Image()], outputs=[gr.Image(), gr.Image()] | |
# ) | |
#Así para video y 3 outputs: Video, Galería y Archivo Zip. | |
# demo = gr.Interface( | |
# fn=greet, inputs=[gr.Image(), gr.Video()], outputs=[gr.Video(), gr.Gallery(), gr.File()] | |
# ) | |
#Así para 2 outputs, video y zip. | |
# demo = gr.Interface( | |
# fn=greet, inputs=[gr.Image(), gr.Video()], outputs=[gr.Video(), gr.File()] | |
# ) | |
#Haremos lo mismo pero con blocks: | |
with gr.Blocks() as demo: | |
input_imagen_original = gr.Image() | |
input_video_destino = gr.Video() | |
btn = gr.Button(value="Submit") | |
output_video_resultado = gr.Video() | |
#Actions | |
btn.click(perform, inputs=[input_imagen_original, input_video_destino], outputs=[output_video_resultado]) | |
#1 output: video. | |
# demo = gr.Interface( | |
# fn=perform, inputs=[gr.Image(), gr.Video(), gr.CheckboxGroup(["face_swapper","face_enhancer"], label="Processor")], outputs=[gr.Video()] | |
# ) | |
demo.launch() |