File size: 4,958 Bytes
69221ba 6a2680d 5de271e 69221ba 721c976 69221ba 721c976 5de271e 950aea1 721c976 57e9c17 e296907 03a5a23 e296907 69221ba e296907 3c6eb02 69221ba 5de271e 3c6eb02 69221ba 3c6eb02 69221ba 3c6eb02 69221ba 44f1bf5 69221ba 950aea1 44f1bf5 3c6eb02 e50eaad 721c976 e25d313 6a0ff1d ae80140 ab461f2 ae80140 6a0ff1d 721c976 6a0ff1d 964c83f 1fb143e |
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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
import streamlit as st
from PIL import Image
import google.generativeai as genai
from gtts import gTTS
import os
import io
# 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
# Respuestas automatizadas basadas en palabras clave
def respuestas_automatizadas(texto):
texto = texto.lower()
# Respuestas para preguntas específicas
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')
tts.save("respuesta.mp3")
os.system("mpg321 respuesta.mp3")
except Exception as e:
st.error("Hubo un error al generar el audio. Por favor, recarga la página y vuelve a intentar.")
# Cargar y aplicar CSS personalizado
with open("./style.css") as f:
st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)
# Título centrado
st.markdown("<h1 style='text-align: center;'>🤖 ¡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? 😊")
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.write(f"**Respuesta:** {resultado}")
if st.button("🔊 Escuchar respuesta"):
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(imagen)
espacio_contenido_generado.write(f"**Respuesta de la imagen:** {respuesta}")
st.write("¡Gracias por usar Soph-IA! 😊")
# Pie de página
st.markdown("<p style='text-align: center;'>© 2024 Jeysshon</p>", unsafe_allow_html=True)
|