File size: 4,251 Bytes
3250ceb
 
 
 
81f2e47
 
3250ceb
 
81f2e47
 
 
 
 
3250ceb
 
 
 
 
 
 
 
 
 
 
 
ae3a82b
3250ceb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ae3a82b
3250ceb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a49676a
 
b455efa
3250ceb
 
 
 
 
 
 
f27af24
 
7dfbf3a
3250ceb
7dfbf3a
 
ae3a82b
 
7dfbf3a
2aa9ab8
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
117
118
119
120
121
122
123
124
import os
import time
import pathlib
from PIL import Image
import envCharger


def mass(input1, input2):

    envCharger.load_env("local")
    PLATAFORMA = os.getenv('plataforma')
    print("PLATAFORMA: ", PLATAFORMA)
    time.sleep(5)
    
    #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 o azure? 
    #(choose from 'tensorrt', 'cuda', 'cpu')
    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):")
    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