Soph-IA / app.py
jeysshon's picture
Update app.py
e9dd6a1 verified
raw
history blame
6.21 kB
import streamlit as st
from PIL import Image
import google.generativeai as genai
from gtts import gTTS
import os
import io
import base64
# Configuración de la página de Streamlit
st.set_page_config(page_title="🤖 Soph-IA", layout="wide")
# Obtener la API key desde los secretos de Hugging Face
api_key = st.secrets["API_KEY"] # Accede al secreto
# Estilo CSS para diseño atractivo
st.markdown("""
<style>
body {
background-color: #1a1a1a;
color: #ffffff;
font-family: 'Arial', sans-serif;
}
h1 {
color: #ffcc00;
text-align: center;
}
.response {
background-color: #333333;
border-radius: 5px;
padding: 10px;
margin-top: 10px;
}
.footer {
text-align: center;
color: #ffcc00;
margin-top: 20px;
}
.audio-button {
background-color: #ffcc00;
color: #1a1a1a;
border: none;
border-radius: 5px;
padding: 5px 10px;
cursor: pointer;
margin-top: 5px;
}
</style>
""", unsafe_allow_html=True)
# Respuestas automatizadas basadas en palabras clave
def respuestas_automatizadas(texto):
texto = texto.lower()
respuestas = {
"quien te creo": "Fui creada por un Bioingeniero llamado Jeysshon Bustos Jimenez, mi creador.",
"quien es tu creador": "Fui creada por un Bioingeniero llamado Jeysshon Bustos Jimenez, mi creador.",
"quien creo": "Fui creada por un Bioingeniero llamado Jeysshon Bustos Jimenez, mi creador.",
"quien soy": "Soy Soph-IA, una inteligencia artificial avanzada basada en redes neuronales profundas y procesamiento de lenguaje natural.",
"quien eres": "Soy Soph-IA, una inteligencia artificial avanzada basada en redes neuronales profundas y procesamiento de lenguaje natural.",
"que eres": "Soy Soph-IA, una inteligencia artificial avanzada basada en redes neuronales profundas y procesamiento de lenguaje natural."
}
for clave, respuesta in respuestas.items():
if clave in texto:
return respuesta
return None
def procesar_texto(texto):
respuesta_predefinida = respuestas_automatizadas(texto)
if respuesta_predefinida:
return respuesta_predefinida
try:
genai.configure(api_key=api_key)
modelo = genai.GenerativeModel('gemini-1.5-pro-latest')
respuesta = modelo.generate_content(texto)
return respuesta.text
except Exception as e:
return "Hubo un error procesando tu solicitud. Por favor, recarga la página y vuelve a intentar."
def procesar_imagen(imagen):
try:
genai.configure(api_key=api_key)
modelo = genai.GenerativeModel('gemini-1.5-pro-latest')
if isinstance(imagen, Image.Image):
respuesta = modelo.generate_content(imagen)
return respuesta.text
else:
return "La imagen no es del tipo esperado."
except Exception as e:
return "Hubo un error procesando la imagen. Por favor, recarga la página y vuelve a intentar."
def hablar_texto(texto):
try:
tts = gTTS(text=texto, lang='es', slow=False)
with io.BytesIO() as audio_file:
tts.save(audio_file)
audio_file.seek(0)
audio_base64 = base64.b64encode(audio_file.read()).decode()
return f"data:audio/mp3;base64,{audio_base64}"
except Exception as e:
st.error("Hubo un error al generar el audio. Por favor, recarga la página y vuelve a intentar.")
return None
# Título centrado
st.markdown("<h1>🤖 ¡Bienvenido a Soph-IA!</h1>", unsafe_allow_html=True)
# Explicación técnica de Soph-IA
st.markdown("""
<p style='text-align: justify;'>
Soy <strong>Soph-IA</strong>, una inteligencia artificial basada en redes neuronales profundas, derivada de la arquitectura
<strong>VGG16</strong>. Combino técnicas avanzadas de procesamiento de lenguaje natural y visión por computadora.
Para el análisis de texto, utilizo transformadores que permiten comprender el contexto y generar respuestas precisas.
En el caso de imágenes, empleo redes convolucionales para extraer características clave y ofrecer respuestas acordes a la
información visual procesada.
</p>
""", unsafe_allow_html=True)
espacio_contenido_generado = st.empty()
st.write("¡Hola! Soy Soph-IA, tu asistente virtual. ¿Cómo puedo ayudarte hoy? 😊")
# Columnas para selección de entrada
col1, col2 = st.columns([1, 3])
with col1:
tipo_entrada = st.selectbox("Selecciona el tipo de entrada", ["Haz una pregunta ❓", "🖼️ Subir imagen"])
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.markdown(f"<div class='response'>**Respuesta:** {resultado}</div>", unsafe_allow_html=True)
audio_data = hablar_texto(resultado)
if audio_data:
st.markdown(f"""
<audio controls>
<source src="{audio_data}" type="audio/mpeg">
Tu navegador no soporta el elemento de audio.
</audio>
""", unsafe_allow_html=True)
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(imagen)
espacio_contenido_generado.markdown(f"<div class='response'>**Respuesta de la imagen:** {respuesta}</div>", unsafe_allow_html=True)
st.write("¡Gracias por usar Soph-IA! 😊")
# Pie de página
st.markdown("<p class='footer'>© 2024 Jeysshon</p>", unsafe_allow_html=True)