appinitdev commited on
Commit
430c1d4
·
verified ·
1 Parent(s): 31bf7bc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -49
app.py CHANGED
@@ -1,56 +1,30 @@
1
- import os
2
- import traceback
3
  import gradio as gr
4
- from gradio_client import Client, handle_file
 
 
 
 
5
 
6
- def fusionar_cosplay_bridge(imagen_real, imagen_ref):
7
- hf_token = os.getenv("HF_TOKEN")
8
- if not hf_token:
9
- print("[-] ERROR: El HF_TOKEN no está configurado en los Secrets del Space.")
10
- raise gr.Error("Falta el token HF_TOKEN en el servidor.")
11
 
12
- try:
13
- print("[+] Petición recibida desde Android. Conectando al clúster de Qwen...")
14
- hf_client = Client("joyfox/Qwen-Image-Edit-Cosplay", token=hf_token)
15
-
16
- # Aseguramos los prefijos Data URI limpios
17
- data_uri_real = imagen_real if imagen_real.startswith("data:") else f"data:image/jpeg;base64,{imagen_real}"
18
- data_uri_ref = imagen_ref if imagen_ref.startswith("data:") else f"data:image/jpeg;base64,{imagen_ref}"
19
-
20
- prompt_texto = "把图2中动漫人物中的发型,服饰和装扮道具迁移到图1的真实人物,图1真实人物保持高度人脸一致性"
21
-
22
- print("[+] Empaquetando strings Base64 con el formateador de archivos nativo de Gradio 6...")
23
-
24
- # 🌟 LA SOLUCIÓN DEFINITIVA:
25
- # Usamos handle_file para envolver el string Base64 en el objeto JSON estructurado que gr.Image
26
- # espera recibir, evitando el fallo de decodificación y mapeo del endpoint.
27
- input_real = handle_file(data_uri_real)
28
- input_ref = handle_file(data_uri_ref)
29
 
30
- print("[+] Ejecutando inferencia en el pipeline (fn_index=0)...")
31
- resultado = hf_client.predict(
32
- input_real, # Imagen Real (gr.Image estructurada)
33
- input_ref, # Imagen Referencia (gr.Image estructurada)
34
- prompt_texto, # Texto Prompt (gr.Textbox)
35
- fn_index=0
36
- )
37
-
38
- print("[+] Fusión completada con éxito.")
39
- return {"data": resultado}
40
-
41
- except Exception as e:
42
- print("\n================= CRASH EN EL PUENTE =================")
43
- traceback.print_exc()
44
- print("=====================================================\n")
45
- raise gr.Error(f"Crash interno en el cliente del modelo: {str(e)}")
46
-
47
- # Mapeamos la interfaz universal para Android
48
  demo = gr.Interface(
49
- fn=fusionar_cosplay_bridge,
50
- inputs=[gr.Textbox(label="Real"), gr.Textbox(label="Ref")],
51
- outputs=gr.JSON(label="Resultado"),
52
- api_name="predict"
53
  )
54
 
55
- if __name__ == "__main__":
56
- demo.launch(ssr_mode=False)
 
 
 
1
  import gradio as gr
2
+ import torch
3
+ from diffusers import DiffusionPipeline # Ajustar según el modelo específico
4
+ from PIL import Image
5
+ import base64
6
+ import io
7
 
8
+ # 1. Cargar el modelo en memoria al iniciar el Space
9
+ device = "cuda" if torch.cuda.is_available() else "cpu"
10
+ # Este es un ejemplo, debes ajustar el ID según el modelo de Qwen que uses
11
+ model_id = "joyfox/Qwen-Image-Edit-Cosplay"
12
+ pipe = DiffusionPipeline.from_pretrained(model_id).to(device)
13
 
14
+ def procesar_cosplay(imagen_real, imagen_ref, prompt):
15
+ # 2. Tu lógica para convertir Base64 a imagen real
16
+ # (Tu función de decodificación actual ya es correcta)
17
+
18
+ # 3. Ejecutar la inferencia localmente
19
+ resultado = pipe(prompt=prompt, image=imagen_real, ref_image=imagen_ref).images[0]
20
+
21
+ return resultado
 
 
 
 
 
 
 
 
 
22
 
23
+ # 4. Interfaz Gradio
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  demo = gr.Interface(
25
+ fn=procesar_cosplay,
26
+ inputs=[gr.Image(type="pil"), gr.Image(type="pil"), gr.Textbox()],
27
+ outputs="image"
 
28
  )
29
 
30
+ demo.launch()