File size: 3,541 Bytes
6a2680d
 
 
552467f
a443e72
c0347bb
6a2680d
f60ce12
 
 
9b54f00
c0347bb
9b54f00
fe1ed8d
552467f
 
 
1b77b6e
6a2680d
c0347bb
 
 
 
 
 
c884a0c
fe1ed8d
c884a0c
 
6a2680d
fe1ed8d
 
6a2680d
fe1ed8d
6a2680d
fe1ed8d
6a2680d
fe1ed8d
c0347bb
 
 
 
 
6a2680d
 
 
c0347bb
 
 
 
 
 
 
 
 
 
 
fe1ed8d
c0347bb
 
 
 
 
 
 
 
 
fe1ed8d
c0347bb
 
 
 
 
 
 
 
1b77b6e
c0347bb
 
 
 
 
c884a0c
c0347bb
 
 
 
 
 
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
import streamlit as st
from PIL import Image
import speech_recognition as sr
import google.generativeai as genai
from gtts import gTTS
import io

# Configuración de la página de Streamlit
st.set_page_config(layout="wide")

# Configuración de la API key para Google Generative AI
api_key = "AIzaSyDJZ3r6VRhRivR0pb96cBRg_VvGg_fXq5k"  # API key proporcionada

def procesar_texto(texto):
    genai.configure(api_key=api_key)
    modelo = genai.GenerativeModel('gemini-1.5-pro-latest')
    respuesta = modelo.generate_content(texto)
    return respuesta.text

def procesar_imagen(imagen):
    genai.configure(api_key=api_key)
    modelo = genai.GenerativeModel('gemini-1.5-pro-latest')
    respuesta = modelo.generate_content(imagen.name)  # Puedes ajustar esto si la API espera contenido de imagen real
    return respuesta.text

def reconocer_voz_desde_archivo(archivo_audio):
    reconocedor = sr.Recognizer()
    with sr.AudioFile(archivo_audio) as fuente:
        audio = reconocedor.record(fuente)
    try:
        texto = reconocedor.recognize_google(audio)
        return texto
    except sr.UnknownValueError:
        return "El reconocimiento de voz de Google no pudo entender el audio"
    except sr.RequestError as e:
        return f"No se pudieron solicitar resultados del servicio de reconocimiento de voz de Google; {e}"

def hablar_texto(texto):
    tts = gTTS(text=texto, lang='es')
    archivo_audio = io.BytesIO()
    tts.write_to_fp(archivo_audio)
    archivo_audio.seek(0)
    st.audio(archivo_audio, format="audio/mp3")

st.title("🤖 ChatBot")

espacio_contenido_generado = st.empty()

# Cargar y aplicar CSS personalizado
with open("./style.css") as f:
    st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)

# Contenido principal
col1, col2 = st.columns([1, 3])

with col1:
    tipo_entrada = st.selectbox("Selecciona el tipo de entrada", ["Haz una pregunta❓", "🖼️ Subir imagen", "🎤 Subir archivo de audio"])

with col2:
    if tipo_entrada == "Haz una pregunta❓":
        entrada_texto = st.text_input("Ingresa tu pregunta aquí")
        if entrada_texto:
            with st.spinner("Generando respuesta..."):
                resultado = procesar_texto(entrada_texto)
            espacio_contenido_generado.write(resultado)
            if st.button("🔊 Hablar", key="hablar_entrada_texto"):
                hablar_texto(resultado)

    elif tipo_entrada == "🖼️ Subir imagen":
        entrada_imagen = st.file_uploader("Sube una imagen", type=["jpg", "png", "jpeg"])
        if entrada_imagen:
            imagen = Image.open(entrada_imagen)
            st.image(imagen, caption='Imagen subida.', use_column_width=True)
            with st.spinner("Procesando imagen..."):
                respuesta = procesar_imagen(entrada_imagen)
            espacio_contenido_generado.write(respuesta)

    elif tipo_entrada == "🎤 Subir archivo de audio":
        archivo_audio = st.file_uploader("Sube un archivo de audio", type=["wav", "mp3"])
        if archivo_audio:
            with st.spinner("Procesando audio..."):
                texto_de_voz = reconocer_voz_desde_archivo(archivo_audio)
            st.text_input("Texto reconocido", value=texto_de_voz)
            if texto_de_voz:
                with st.spinner("Generando respuesta..."):
                    resultado = procesar_texto(texto_de_voz)
                espacio_contenido_generado.write(resultado)
                if st.button("🔊 Hablar", key="hablar_entrada_audio"):
                    hablar_texto(resultado)