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()