File size: 4,047 Bytes
3250ceb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ae3a82b
3250ceb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ae3a82b
3250ceb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9e3153a
e2a2064
3250ceb
 
 
 
 
 
 
f27af24
 
7dfbf3a
3250ceb
7dfbf3a
 
ae3a82b
 
7dfbf3a
5b493cb
b48a9dc
7dfbf3a
 
ae3a82b
3d20903
ae3a82b
3250ceb
ae3a82b
 
 
 
 
 
b48a9dc
ae3a82b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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 cuda"
    print(command)
    time.sleep(1)
    proc = os.popen(command)
    output = proc.read()

    print("Output (resultado de la ejecuci贸n del c贸digo):")
    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 = "no-result.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