import os import time import pathlib from PIL import Image def mass(input1, input2): #video o cualquier otro sería para imagenes. modo = "pic" #local o huggingface plataforma = "huggingface" #face_swapper o face_enhancer o la combinación de ellos. procesador = "face_swapper" print(f"Inicio: Estamos en modo {modo}, plataforma: {plataforma} y procesador: {procesador}.") path_video = input2 print("Path_video es:", path_video) if modo == "video": if plataforma == "local": #Para local. path_parts = path_video.split("\\") else: #Para HuggingFace #Creo que no va en imagen. print("La plataforma en la que basaremos la división es HuggingFace.") path_parts = path_video.split("/") #Aquí obtendremos nom_video #Creo no va en imagen filename = path_parts[-1] nom_video = filename[:-4] print("Esto es filename alias nom_video: ", nom_video) 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) #FUTURE: Agrega por parámetro o mejor aún por enviroment el hecho de si es compu para usar cpu o si es hf para usar cuda. command = f"python run.py -s {source_path} -t {target_path} -o {result_path} --frame-processor {procesador} --execution-provider cpu" 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("Y el tipo del output es: ", type(output)) time.sleep(1) print("Terminó la impresión del output...") if "No face in source path detected" in output: #Si no se detecta un rostro, pondremos un placeholder, ésto evita que se despliegue el último result obtenido antes... #...de la operación fallida. print("No se detectó ninguna cara en la ruta de origen.") result_path = "orange.png" else: print("Si se detecto un rostro...") #Si sí se detectó un rostro, sigue su camino normal. print("Éste es el momento en el que se creo result, revisar...") path = pathlib.Path(result_path) path_abs = os.path.abspath(path) print("Éste es el path:", path) print("Y su ruta absoluta es: ", path_abs) print("Listo! Gracias!") return path