Spaces:
Build error
Build error
| 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() | |