Spaces:
Build error
Build error
File size: 4,804 Bytes
ecd33ad c024d90 2204461 ecd33ad 7e22ad0 889d98d 2204461 c024d90 2204461 e504696 ecd33ad 889d98d ecd33ad 7ff89aa e504696 7ff89aa e504696 7ff89aa 889d98d c9d4da2 889d98d ecd33ad 889d98d 2204461 ecd33ad c024d90 ecd33ad 9ea5bb2 eb58bb5 ecd33ad c024d90 eb58bb5 ecd33ad e504696 ecd33ad 6b9313d | 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 | import gradio as gr
import google.generativeai as genai
import os
from dotenv import load_dotenv
from gradio import Markdown
import textwrap
# Cargar variables de entorno
load_dotenv()
# Configurar la API de Google Gemini
genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
def upload_to_gemini(path, mime_type=None):
"""Sube el archivo a Google Gemini."""
file = genai.upload_file(path, mime_type=mime_type)
print(f"Uploaded file '{file.display_name}' as: {file.uri}")
return file
def to_markdown(text):
text = text.replace('•', ' *')
return Markdown(textwrap.indent(text, '> ', predicate=lambda _: True))
def identify_plant(image, model_name, temperature, top_p, top_k, max_output_tokens):
if image is None:
return "Por favor, carga una imagen."
# Subir la imagen a Gemini
uploaded_file = upload_to_gemini(image, mime_type="image/jpeg")
# Configurar el modelo seleccionado
generation_config = {
"temperature": temperature,
"top_p": top_p,
"top_k": top_k,
"max_output_tokens": max_output_tokens,
"response_mime_type": "text/plain",
}
model = genai.GenerativeModel(
model_name=model_name,
generation_config=generation_config,
)
# Crear una sesión de chat para interactuar con Gemini
chat_session = model.start_chat(
history=[
{
"role": "user",
"parts": [
uploaded_file, # El archivo subido a Gemini
"""
Analiza esta imagen de una planta e identifica su especie. Proporciona la siguiente información:
1. Nombre común
2. Nombre científico
3. Familia
4. Características principales
5. Cuidados básicos
6. Simbolismo histórico (Este apartado analizará el significado cultural e histórico de la planta, explorando cómo se ha utilizado en mitologías, rituales o medicinas tradicionales en diferentes culturas. ¡Una manera de conectar con el pasado a través de la naturaleza!)
7. Compatibilidad emocional (Esta sección explora cómo la planta podría influir en el ambiente emocional de un espacio. Basado en la cromoterapia, la energía vital de la planta, o su apariencia, podríamos descubrir qué emociones o vibraciones aporta, lo cual podría interesar a los usuarios que buscan mejorar el bienestar personal o la atmósfera en sus hogares.)
8. Interacción con la tecnología (Una visión futurista sobre cómo la planta podría tener un papel en el avance de tecnologías emergentes, como la biotecnología, la ingeniería genética, o incluso su rol en ambientes que dependen de IA. ¡Una conexión interesante entre la naturaleza y el futuro tecnológico!)
""",
],
},
]
)
# Enviar el mensaje y obtener la respuesta
response = chat_session.send_message("Analiza la planta")
# Usar to_markdown para formatear la respuesta
return to_markdown(response.text)
# Configurar la interfaz de Gradio
css = """
<style>
body { font-family: Arial, sans-serif; }
.gradio-container { max-width: 800px; margin: auto; }
.image-upload { border: 2px dashed #ccc; padding: 20px; text-align: center; }
.output-text { background-color: #f0f0f0; padding: 15px; border-radius: 5px; }
</style>
"""
with gr.Blocks(css=css) as iface:
gr.HTML("<h1 class='text-3xl font-bold text-center mb-6'>Identificador de Plantas</h1>")
with gr.Row():
with gr.Column():
input_image = gr.Image(label="Sube una imagen de una planta", type="filepath")
model_selector = gr.Dropdown(choices=["gemini-1.5-pro", "gemini-1.5-flash"], value="gemini-1.5-pro", label="Selecciona el modelo")
# Agrupar parámetros en un desplegable
with gr.Accordion("Configuración del Modelo", open=False):
temperature = gr.Slider(minimum=0.0, maximum=1.0, value=0.9, label="Temperature", step=0.1)
top_p = gr.Slider(minimum=0.0, maximum=1.0, value=0.95, label="Top P", step=0.01)
top_k = gr.Slider(minimum=1, maximum=100, value=64, label="Top K", step=1)
max_output_tokens = gr.Slider(minimum=1, maximum=2048, value=1024, label="Max Output Tokens", step=1)
with gr.Column():
output_text = gr.Markdown(label="Información de la Planta")
submit_btn = gr.Button("Identificar Planta", variant="primary")
submit_btn.click(fn=identify_plant, inputs=[input_image, model_selector, temperature, top_p, top_k, max_output_tokens], outputs=output_text)
# Lanzar la interfaz
iface.launch()
|