Spaces:
Running
Running
| import gradio as gr | |
| from PIL import Image | |
| import time | |
| import os | |
| import pathlib | |
| import zipfile36 as zipfile | |
| def save_images_as_zip(path_foto, filename, plataforma): | |
| print("Entr茅 a la funci贸n que hace los zips...") | |
| with zipfile.ZipFile(filename, "w") as zip_file: | |
| for foto in os.listdir(path_foto): | |
| print("La foto en os.listdir es: ", foto) | |
| #Si Local | |
| # path_foto_zippable = str(path_foto) + "\\" + foto | |
| # #Si HuggingFace | |
| # path_foto_zippable = str(path_foto) + "/" + foto | |
| path_foto_zippable = str(path_foto) + (os.sep if plataforma == "local" else "/") + foto | |
| print("La ruta textual final de esa foto en particular es: ", path_foto_zippable) | |
| # ruta = pathlib.Path(path_foto_zippable) | |
| # zip_file.write(ruta) | |
| ruta = os.path.basename(path_foto_zippable) | |
| zip_file.write(path_foto_zippable, ruta) | |
| 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) | |
| print("Esto fue el input 3 recibido...:", input3) | |
| time.sleep(3) | |
| longitud = len(input3) | |
| print(f"El arreglo tiene {longitud} elementos") | |
| time.sleep(3) | |
| if longitud == 2: | |
| procesador = "face_swapper face_enhancer" | |
| elif longitud == 0: | |
| print("La longitud si da 0") | |
| else: | |
| procesador = input3[0] | |
| print("El procesador seleccionado termin贸 siendo...", procesador) | |
| 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 imagen:", ext_imagen) | |
| 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) | |
| #脡ste es el segmento que crea la galer铆a de imagenes, que por el momento no usaremos por rendimiento. | |
| #Se reintegrar谩 si agregamos interacci贸n de poder borrar cada imagen desde la interfaz web. | |
| # for filename in os.listdir(path_foto): | |
| # if filename.endswith(".png"): | |
| # path = os.path.join(path_foto, filename) | |
| # image = Image.open(path) | |
| # images.append(image) | |
| # print("Esto es la lista de imagenes: ", images) | |
| #nombre_zip = nom_video + ".zip" | |
| #print("El nombre del zip ser谩: ", nombre_zip) | |
| 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) | |
| #path_zip = pathlib.Path(nombre_zip) | |
| #path_zip_abs = os.path.abspath(path_zip) | |
| #print("Y 茅ste es el path para el zip: ", path_zip) | |
| #print("Y su ruta absoluta es: ", path_zip_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()] | |
| # ) | |
| #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() |