Josedcape commited on
Commit
bf7aa4c
·
verified ·
1 Parent(s): ca89374

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -4
app.py CHANGED
@@ -7,6 +7,7 @@ import time
7
  import base64
8
  import tempfile
9
  import random
 
10
  from google.cloud import texttospeech
11
  from google.cloud.speech import SpeechClient, RecognitionAudio, RecognitionConfig
12
  from streamlit_webrtc import webrtc_streamer, WebRtcMode, AudioProcessorBase
@@ -76,16 +77,29 @@ st.markdown("Bienvenido al Asistente Teológico, donde puedes preguntar sobre in
76
  st.sidebar.title("Navegación")
77
  page = st.sidebar.selectbox("Selecciona una página", ["Chat Asistente", "Gestión de Pedidos", "Generador de Frases Bíblicas"])
78
 
 
 
 
79
  # Función para buscar imágenes en Pexels
80
  def buscar_imagenes(query):
81
  search_url = "https://api.pexels.com/v1/search"
82
- headers = {"Authorization":"sWMvMKk7Mvv5o6Q90XGMfP2vliUiagc9rESBAO9DVZQdmlcla0LMJ8O3"}
83
  params = {"query": query, "per_page": 10}
84
  response = requests.get(search_url, headers=headers, params=params)
85
  response.raise_for_status()
86
  search_results = response.json()
87
  images = [photo["src"]["original"] for photo in search_results["photos"]]
88
- return random.choice(images) if images else None
 
 
 
 
 
 
 
 
 
 
89
 
90
  # Función para generar reflexión y consulta de imagen con OpenAI
91
  def generar_reflexion_y_consulta(keyword):
@@ -103,6 +117,18 @@ def generar_reflexion_y_consulta(keyword):
103
  consulta_imagen = partes[1].strip() if len(partes) > 1 else keyword
104
  return reflexion, consulta_imagen
105
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  if page == "Chat Asistente":
107
  # Chat con el asistente
108
  st.subheader("🗣️ Chat con el Asistente")
@@ -175,8 +201,12 @@ elif page == "Generador de Frases Bíblicas":
175
  def generar_imagen_y_reflexion(keyword):
176
  try:
177
  reflexion, consulta_imagen = generar_reflexion_y_consulta(keyword)
178
- image_url = buscar_imagenes(consulta_imagen)
179
- return image_url, reflexion
 
 
 
 
180
  except Exception as e:
181
  st.error(f"Error al generar la imagen o reflexión: {e}")
182
  return None, None
@@ -197,6 +227,16 @@ elif page == "Generador de Frases Bíblicas":
197
  st.image(imagen_url)
198
  st.subheader("Reflexión:")
199
  st.markdown(reflexion)
 
 
 
 
 
 
 
 
 
 
200
  else:
201
  st.warning("Por favor, ingresa un versículo o una palabra antes de generar.")
202
 
 
7
  import base64
8
  import tempfile
9
  import random
10
+ from transformers import pipeline
11
  from google.cloud import texttospeech
12
  from google.cloud.speech import SpeechClient, RecognitionAudio, RecognitionConfig
13
  from streamlit_webrtc import webrtc_streamer, WebRtcMode, AudioProcessorBase
 
77
  st.sidebar.title("Navegación")
78
  page = st.sidebar.selectbox("Selecciona una página", ["Chat Asistente", "Gestión de Pedidos", "Generador de Frases Bíblicas"])
79
 
80
+ # Cargar el modelo de clasificación de imágenes
81
+ clasificador = pipeline("zero-shot-image-classification")
82
+
83
  # Función para buscar imágenes en Pexels
84
  def buscar_imagenes(query):
85
  search_url = "https://api.pexels.com/v1/search"
86
+ headers = {"Authorization": "sWMvMKk7Mvv5o6Q90XGMfP2vliUiagc9rESBAO9DVZQdmlcla0LMJ8O3"}
87
  params = {"query": query, "per_page": 10}
88
  response = requests.get(search_url, headers=headers, params=params)
89
  response.raise_for_status()
90
  search_results = response.json()
91
  images = [photo["src"]["original"] for photo in search_results["photos"]]
92
+ return images
93
+
94
+ # Función para verificar la adecuación de la imagen
95
+ def verificar_imagen(image_url, label):
96
+ image_data = requests.get(image_url).content
97
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as temp_file:
98
+ temp_file.write(image_data)
99
+ temp_file_path = temp_file.name
100
+ results = clasificador(temp_file_path, candidate_labels=[label])
101
+ os.remove(temp_file_path)
102
+ return results[0]['label'] == label
103
 
104
  # Función para generar reflexión y consulta de imagen con OpenAI
105
  def generar_reflexion_y_consulta(keyword):
 
117
  consulta_imagen = partes[1].strip() if len(partes) > 1 else keyword
118
  return reflexion, consulta_imagen
119
 
120
+ # Función para obtener un audio aleatorio de la carpeta "reflexiones"
121
+ def obtener_audio_aleatorio():
122
+ carpeta_reflexiones = "reflexiones"
123
+ archivos = os.listdir(carpeta_reflexiones)
124
+ archivos_mp3 = [archivo for archivo in archivos if archivo.endswith(".mp3")]
125
+ if archivos_mp3:
126
+ audio_seleccionado = random.choice(archivos_mp3)
127
+ with open(os.path.join(carpeta_reflexiones, audio_seleccionado), "rb") as audio_file:
128
+ audio_bytes = audio_file.read()
129
+ return base64.b64encode(audio_bytes).decode("utf-8")
130
+ return None
131
+
132
  if page == "Chat Asistente":
133
  # Chat con el asistente
134
  st.subheader("🗣️ Chat con el Asistente")
 
201
  def generar_imagen_y_reflexion(keyword):
202
  try:
203
  reflexion, consulta_imagen = generar_reflexion_y_consulta(keyword)
204
+ image_urls = buscar_imagenes(consulta_imagen)
205
+ for image_url in image_urls:
206
+ if verificar_imagen(image_url, keyword):
207
+ return image_url, reflexion
208
+ st.warning("No se encontraron imágenes adecuadas. Intenta nuevamente.")
209
+ return None, reflexion
210
  except Exception as e:
211
  st.error(f"Error al generar la imagen o reflexión: {e}")
212
  return None, None
 
227
  st.image(imagen_url)
228
  st.subheader("Reflexión:")
229
  st.markdown(reflexion)
230
+
231
+ # Obtener y reproducir un audio aleatorio
232
+ audio_base64 = obtener_audio_aleatorio()
233
+ if audio_base64:
234
+ audio_html = f"""
235
+ <audio autoplay>
236
+ <source src="data:audio/mp3;base64,{audio_base64}" type="audio/mp3">
237
+ </audio>
238
+ """
239
+ st.markdown(audio_html, unsafe_allow_html=True)
240
  else:
241
  st.warning("Por favor, ingresa un versículo o una palabra antes de generar.")
242