video-blend / app.py
Moibe
Se agreg贸 selector de procesador
a781931
raw
history blame
No virus
6.97 kB
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 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)
#脡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()