File size: 3,519 Bytes
6a2680d 552467f a443e72 9e93c24 6a2680d f60ce12 9b54f00 c0347bb 9b54f00 fe1ed8d 552467f 1b77b6e 6a2680d c0347bb 9e93c24 c0347bb 9e93c24 fe1ed8d 9e93c24 6a2680d fe1ed8d 6a2680d fe1ed8d 6a2680d fe1ed8d 6a2680d fe1ed8d 68f8a40 9e93c24 68f8a40 6a2680d c0347bb 9e93c24 fe1ed8d c0347bb fe1ed8d c0347bb 1b77b6e 9e93c24 c0347bb 9e93c24 |
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 |
import streamlit as st
from PIL import Image
import speech_recognition as sr
import google.generativeai as genai
from gtts import gTTS
import os
# 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)
return respuesta.text
def reconocer_voz():
reconocedor = sr.Recognizer()
with sr.Microphone() as fuente:
st.write("Escuchando...")
audio = reconocedor.listen(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):
try:
tts = gTTS(text=texto, lang='es')
archivo_audio = "respuesta.mp3"
tts.save(archivo_audio)
os.system(f"mpg321 {archivo_audio}") # Usa otro reproductor si es necesario
except Exception as e:
st.error(f"Error al generar audio: {e}")
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", "🎤 Usar micrófono"])
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 == "🎤 Usar micrófono":
if st.button("Grabar"):
with st.spinner("Escuchando y procesando..."):
texto_de_voz = reconocer_voz()
if texto_de_voz:
entrada_texto = st.text_input("Habla", value=texto_de_voz)
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_voz"):
hablar_texto(resultado)
|