File size: 1,888 Bytes
5bb262a
 
 
3407e5f
5243630
3407e5f
 
 
5bb262a
210fe54
 
5bb262a
1e6acc9
3407e5f
5bb262a
 
5243630
 
 
3407e5f
78fb537
 
210fe54
3407e5f
 
5243630
3407e5f
5bb262a
210fe54
 
 
 
3407e5f
 
 
5243630
 
3407e5f
5bb262a
3407e5f
5243630
 
 
 
5bb262a
3407e5f
5bb262a
 
210fe54
 
5bb262a
210fe54
 
5bb262a
3407e5f
210fe54
3407e5f
5243630
3407e5f
210fe54
5bb262a
 
 
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
import gradio as gr
from PIL import Image
from transformers import pipeline
import torch
from diffusers import AudioLDMPipeline

device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Usando dispositivo: {device}")

# Imagen -> Texto
modelo_imagen_texto = pipeline(
    "image-to-text",
    model="Salesforce/blip-image-captioning-base",
    device=0 if device=="cuda" else -1
)

# Texto -> Audio (AudioLDMPipeline)
pipe_audio = AudioLDMPipeline.from_pretrained(
    "cvssp/audioldm-s-full-v2",
    torch_dtype=torch.float16 if device=="cuda" else torch.float32
).to(device)

def imagen_a_audio(imagen):
    """
    1. Convierte la imagen en descripción de texto.
    2. Convierte la descripción en audio usando AudioLDMPipeline.
    """
    # Imagen -> Texto
    resultado = modelo_imagen_texto(Image.fromarray(imagen))
    descripcion = resultado[0]["generated_text"]
    print(f"Descripción generada: {descripcion}")

    # Texto -> Audio
    audio_result = pipe_audio(
        prompt=descripcion,
        num_inference_steps=50,
        audio_length_in_s=5.0
    )

    # El resultado contiene .audios
    audio_array = audio_result.audios[0]
    
    # AudioLDMPipeline usa 22050 Hz como sampling rate por defecto
    sampling_rate = 22050

    return descripcion, (sampling_rate, audio_array)

demo = gr.Interface(
    fn=imagen_a_audio,
    inputs=gr.Image(type="numpy", label="Sube una imagen"),
    outputs=[
        gr.Textbox(label="Descripción de la imagen"),
        gr.Audio(label="Audio generado")
    ],
    title="Imagen a Audio para accesibilidad",
    description=(
        "Esta aplicación analiza una imagen y genera una descripción textual. "
        "Luego crea un audio a partir de esa descripción usando AudioLDMPipeline, "
        "para ayudar a personas con discapacidad visual a percibir el contenido visual."
    ),
)

demo.launch(share=True)