jeysshon commited on
Commit
c0347bb
·
verified ·
1 Parent(s): c884a0c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -30
app.py CHANGED
@@ -3,22 +3,26 @@ from PIL import Image
3
  import speech_recognition as sr
4
  import google.generativeai as genai
5
  from gtts import gTTS
6
- import os
7
 
8
  # Configuración de la página de Streamlit
9
  st.set_page_config(layout="wide")
10
 
11
  # Configuración de la API key para Google Generative AI
12
- api_key = "AIzaSyDJZ3r6VRhRivR0pb96cBRg_VvGg_fXq5k" # Reemplaza con tu API Key
13
 
14
- # Función para procesar texto con Google Generative AI
15
  def procesar_texto(texto):
16
  genai.configure(api_key=api_key)
17
  modelo = genai.GenerativeModel('gemini-1.5-pro-latest')
18
  respuesta = modelo.generate_content(texto)
19
  return respuesta.text
20
 
21
- # Función para reconocer voz desde un archivo de audio
 
 
 
 
 
22
  def reconocer_voz_desde_archivo(archivo_audio):
23
  reconocedor = sr.Recognizer()
24
  with sr.AudioFile(archivo_audio) as fuente:
@@ -31,37 +35,55 @@ def reconocer_voz_desde_archivo(archivo_audio):
31
  except sr.RequestError as e:
32
  return f"No se pudieron solicitar resultados del servicio de reconocimiento de voz de Google; {e}"
33
 
34
- # Función para convertir texto a voz
35
  def hablar_texto(texto):
36
- tts = gTTS(texto, lang='es')
37
- archivo_audio = "respuesta.mp3"
38
- tts.save(archivo_audio)
39
- st.audio(archivo_audio)
40
- os.remove(archivo_audio) # Elimina el archivo después de reproducirlo
41
 
42
- # Contenido principal de la aplicación
43
  st.title("🤖 ChatBot")
44
 
45
- tipo_entrada = st.selectbox("Selecciona el tipo de entrada", ["Haz una pregunta❓", "🖼️ Subir imagen", "🎤 Subir archivo de audio"])
 
 
 
 
 
 
 
 
 
 
46
 
47
- if tipo_entrada == "Haz una pregunta❓":
48
- entrada_texto = st.text_input("Ingresa tu pregunta aquí")
49
- if entrada_texto:
50
- with st.spinner("Generando respuesta..."):
51
- resultado = procesar_texto(entrada_texto)
52
- st.write(resultado)
53
- if st.button("🔊 Hablar", key="hablar_entrada_texto"):
54
- hablar_texto(resultado)
 
55
 
56
- elif tipo_entrada == "🖼️ Subir imagen":
57
- entrada_imagen = st.file_uploader("Sube una imagen", type=["jpg", "png", "jpeg"])
58
- if entrada_imagen:
59
- imagen = Image.open(entrada_imagen)
60
- st.image(imagen, caption='Imagen subida.', use_column_width=True)
 
 
 
61
 
62
- elif tipo_entrada == "🎤 Subir archivo de audio":
63
- archivo_audio = st.file_uploader("Sube un archivo de audio", type=["wav", "mp3"])
64
- if archivo_audio:
65
- with st.spinner("Procesando audio..."):
66
- texto_de_voz = reconocer_voz_desde_archivo(archivo_audio)
67
  st.text_input("Texto reconocido", value=texto_de_voz)
 
 
 
 
 
 
 
3
  import speech_recognition as sr
4
  import google.generativeai as genai
5
  from gtts import gTTS
6
+ import io
7
 
8
  # Configuración de la página de Streamlit
9
  st.set_page_config(layout="wide")
10
 
11
  # Configuración de la API key para Google Generative AI
12
+ api_key = "AIzaSyDJZ3r6VRhRivR0pb96cBRg_VvGg_fXq5k" # API key proporcionada
13
 
 
14
  def procesar_texto(texto):
15
  genai.configure(api_key=api_key)
16
  modelo = genai.GenerativeModel('gemini-1.5-pro-latest')
17
  respuesta = modelo.generate_content(texto)
18
  return respuesta.text
19
 
20
+ def procesar_imagen(imagen):
21
+ genai.configure(api_key=api_key)
22
+ modelo = genai.GenerativeModel('gemini-1.5-pro-latest')
23
+ respuesta = modelo.generate_content(imagen.name) # Puedes ajustar esto si la API espera contenido de imagen real
24
+ return respuesta.text
25
+
26
  def reconocer_voz_desde_archivo(archivo_audio):
27
  reconocedor = sr.Recognizer()
28
  with sr.AudioFile(archivo_audio) as fuente:
 
35
  except sr.RequestError as e:
36
  return f"No se pudieron solicitar resultados del servicio de reconocimiento de voz de Google; {e}"
37
 
 
38
  def hablar_texto(texto):
39
+ tts = gTTS(text=texto, lang='es')
40
+ archivo_audio = io.BytesIO()
41
+ tts.write_to_fp(archivo_audio)
42
+ archivo_audio.seek(0)
43
+ st.audio(archivo_audio, format="audio/mp3")
44
 
 
45
  st.title("🤖 ChatBot")
46
 
47
+ espacio_contenido_generado = st.empty()
48
+
49
+ # Cargar y aplicar CSS personalizado
50
+ with open("./style.css") as f:
51
+ st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)
52
+
53
+ # Contenido principal
54
+ col1, col2 = st.columns([1, 3])
55
+
56
+ with col1:
57
+ tipo_entrada = st.selectbox("Selecciona el tipo de entrada", ["Haz una pregunta❓", "🖼️ Subir imagen", "🎤 Subir archivo de audio"])
58
 
59
+ with col2:
60
+ if tipo_entrada == "Haz una pregunta":
61
+ entrada_texto = st.text_input("Ingresa tu pregunta aquí")
62
+ if entrada_texto:
63
+ with st.spinner("Generando respuesta..."):
64
+ resultado = procesar_texto(entrada_texto)
65
+ espacio_contenido_generado.write(resultado)
66
+ if st.button("🔊 Hablar", key="hablar_entrada_texto"):
67
+ hablar_texto(resultado)
68
 
69
+ elif tipo_entrada == "🖼️ Subir imagen":
70
+ entrada_imagen = st.file_uploader("Sube una imagen", type=["jpg", "png", "jpeg"])
71
+ if entrada_imagen:
72
+ imagen = Image.open(entrada_imagen)
73
+ st.image(imagen, caption='Imagen subida.', use_column_width=True)
74
+ with st.spinner("Procesando imagen..."):
75
+ respuesta = procesar_imagen(entrada_imagen)
76
+ espacio_contenido_generado.write(respuesta)
77
 
78
+ elif tipo_entrada == "🎤 Subir archivo de audio":
79
+ archivo_audio = st.file_uploader("Sube un archivo de audio", type=["wav", "mp3"])
80
+ if archivo_audio:
81
+ with st.spinner("Procesando audio..."):
82
+ texto_de_voz = reconocer_voz_desde_archivo(archivo_audio)
83
  st.text_input("Texto reconocido", value=texto_de_voz)
84
+ if texto_de_voz:
85
+ with st.spinner("Generando respuesta..."):
86
+ resultado = procesar_texto(texto_de_voz)
87
+ espacio_contenido_generado.write(resultado)
88
+ if st.button("🔊 Hablar", key="hablar_entrada_audio"):
89
+ hablar_texto(resultado)