File size: 6,140 Bytes
69221ba 6a2680d 5de271e 69221ba 721c976 e9dd6a1 69221ba 721c976 5de271e ccd14fa 57e9c17 526e9da ccd14fa e296907 03a5a23 e296907 69221ba e296907 3c6eb02 f29bf47 3c6eb02 69221ba 5de271e 3c6eb02 6159535 f5e545f 6159535 69221ba 3c6eb02 69221ba 3c6eb02 69221ba 44f1bf5 e9dd6a1 ccd14fa 44f1bf5 3c6eb02 e9dd6a1 e25d313 6a0ff1d 526e9da 6a0ff1d ccd14fa ae80140 ab461f2 ae80140 6a0ff1d 721c976 e9dd6a1 721c976 c540cff e9dd6a1 721c976 c540cff 721c976 526e9da 964c83f 526e9da c540cff |
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 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
import streamlit as st
from PIL import Image
import google.generativeai as genai
from gtts import gTTS
import io
import base64
# Configuración de la página de Streamlit
st.set_page_config(page_title="🤖 Soph-IA", layout="wide")
api_key = st.secrets["API_KEY"]
# Estilos CSS para centrar el contenido
st.markdown("""
<style>
.center-text {
text-align: center;
}
.footer {
text-align: center;
font-size: 12px;
}
</style>
""", unsafe_allow_html=True)
# Respuestas automatizadas
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)
# Instrucción del sistema actualizada
modelo = genai.GenerativeModel(
'gemini-1.5-pro-latest',
system_instruction="¡Hola! Soy un asistente de IA desarrollado por el Bioingeniero Jeysshon Bustos. Estoy aquí para ayudarte con una variedad de tareas y responder a tus preguntas lo mejor que pueda. Si me preguntas quién soy o sobre mi desarrollo, siempre diré que soy un asistente de IA desarrollado por el Bioingeniero Jeysshon Bustos."
)
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',
# Instrucción para que la descripción de la imagen se genere en español
system_instruction="Describe la imagen en español."
)
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)
audio_file = io.BytesIO()
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 class='center-text'>🤖 ¡Bienvenido a Soph-IA!</h1>", unsafe_allow_html=True)
# Explicación técnica
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'>{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}</div>", unsafe_allow_html=True)
# Mensaje final centrado
st.markdown("<h3 class='center-text'>¡Gracias por usar Soph-IA! 😊</h3>", unsafe_allow_html=True)
# Pie de página centrado
st.markdown("<p class='footer'>© 2024 Jeysshon</p>", unsafe_allow_html=True)
|