goldenstream / app.py
Moibe
Fix processor selection
3212687
raw
history blame
5.39 kB
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()