Spaces:
Build error
Build error
Update app.py
Browse files
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
| 179 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
|