Analizador de plantas con IA! 馃尡

Analizador de plantas con IA! 馃尡

Tabla de contenidos

He desarrollado un analizador de plantas impulsado por IA que combina herramientas avanzadas del OpenAI Vision API y Tavily, con capacidades de b煤squeda para explorar informaci贸n en gardenia.net.

馃尶 隆Con esta herramienta, identificar plantas y acceder a informaci贸n detallada sobre su cuidado nunca ha sido tan f谩cil! En este video, explico el proceso de creaci贸n, detallando los pasos t茅cnicos y las decisiones detr谩s de la construcci贸n de una IA que ayuda tanto a entusiastas de las plantas como a expertos a comprender y cuidar mejor sus plantas.

馃帴 Mira el video para conocer m谩s sobre c贸mo funciona este analizador de IA y el potencial que tiene para el mundo de la horticultura. 隆Hagamos que el cuidado de las plantas sea m谩s inteligente, juntos!

Revisemos los detalles

Este c贸digo nos permite cargar una imagen directamente desde una carpeta espec铆fica, lo que facilita el acceso y la manipulaci贸n de archivos de imagen almacenados localmente.

    def load_image(inputs: dict) -> dict:
        image_path = inputs["image_path"]
        
        def encode_image(image_path):
            with open(image_path, "rb") as image_file:
                return base64.b64encode(image_file.read()).decode("utf-8")
        
        image_base64 = encode_image(image_path)
        return {"image": image_base64}
    
    
    load_image_chain = TransformChain(
        input_variables=["image_path"], output_variables=["image"], transform=load_image
    )

Necesitamos definir un modelo que servir谩 como salida del Modelo de Aprendizaje de Lenguaje (LLM). En este caso, el modelo generar谩 informaci贸n sobre el nombre de la planta y proporcionar谩 una evaluaci贸n de su estado de salud.

    class PlantInformation(BaseModel):
        name: str = Field(
            example="Sansevieria",
            description="The name of the plant or Not a plant",
        )
        healthy: bool = Field(
            example="True",
            description="If the plant looks good or not",
        )

Desarrollamos la herramienta que utilizar谩 el Modelo de Aprendizaje de Lenguaje (LLM) para analizar la imagen, permiti茅ndole extraer informaci贸n relevante de los datos visuales.

    def image_model(inputs: dict) -> str | list[str | dict[Any, Any]]:
        model = AzureChatOpenAI(
            azure_deployment=os.environ['AZURE_OPENAI_DEPLOYMENT'],
            model_version="2024-05-13",
            api_version="2024-02-01",
            temperature=0
        )
        msg = model.invoke(
                [
                    HumanMessage(
                        content=[
                            {"type": "text", "text": inputs["prompt"]},
                            {"type": "text", "text": parser.get_format_instructions()},
                            {
                                "type": "image_url",
                                "image_url": {
                                    "url": f"data:image/jpeg;base64,{inputs['image']}"
                                }
                            }
                        ]
                    )
                ]
            )
        return msg

Este c贸digo invocar谩 la herramienta utilizando el modelo especificado y el mensaje proporcionado para analizar la imagen. La herramienta procesar谩 la informaci贸n visual y devolver谩 los resultados en un formato estructurado de respuesta JSON.

    def get_image_information(image_path: str) -> dict:
        vision_prompt = """Analyze the image to get the name of the plant. Also analyze the health status of the plant. Answer Not a plant when is not a plant
        # Example 1: 
        name: Sansevieria
        healthy: True
        # Example 2: 
        name: Spathiphyllum
        healthy: False
        """
        vision_chain = load_image_chain | image_model | parser
        try:
            return vision_chain.invoke(
                {"image_path": f"{image_path}", "prompt": vision_prompt}
            )
        except OutputParserException:
            return {
                "name": "Not a plant",
                "healthy" : False
                
            }
        except Exception:
            return {
                "name": "Not a plant",
                "healthy" : False
            }

Utilic茅 la funci贸n de b煤squeda de Tavily para encontrar informaci贸n sobre el nombre de la planta identificada, junto con consejos 煤tiles para su cuidado, completando as铆 el proceso.

    tool = TavilySearchResults(
        max_results=1,
        search_depth="advanced",
        include_answer=True,
        include_raw_content=True,
        include_images=True,
        include_domains=["https://www.gardenia.net/"]
    )
    if(result['healthy']):
        response = tool.invoke({"query": result["name"]})
    else:
        response = tool.invoke({"query": result["name"] + " plant care tips"})

Desde la identificaci贸n hasta la generaci贸n de informaci贸n, 隆este proyecto ha sido una experiencia gratificante que combina mi pasi贸n por la tecnolog铆a y la naturaleza!

馃挕Puntos clave del PoC

  • ElevenLabs: Voz generada autom谩ticamente para el video basada en un guion creado con ChatGPT.
  • Tavily: B煤squeda en la web para obtener informaci贸n sobre las plantas.
  • Toolkit: Cadena de preguntas y respuestas de LangChain para generar una salida en formato JSON a partir de un texto dado.
  • Modelo: OpenAI 4o

Posts relacionados

C贸mo cre茅 un trivial generado por IA

C贸mo cre茅 un trivial generado por IA

La semana pasada, un antiguo compa帽ero me lanz贸 la pregunta: “驴C贸mo puedo usar IA para generar preguntas de trivial aleatorias?” Justo en ese momento, estaba preparando una presentaci贸n para mis colegas en DEUS, as铆 que pens茅: 驴por qu茅 no convertir esto en un ejemplo real? 隆Y boom! El resultado: un generador de trivial impulsado por IA que crea preguntas din谩micas y atractivas de manera autom谩tica. Lo que comenz贸 como una simple pregunta, se convirti贸 en un proyecto completo. 隆Desaf铆o aceptado, misi贸n cumplida!

Leer m谩s
C贸mo arregl茅 mi cafetera usando un sistema RAG

C贸mo arregl茅 mi cafetera usando un sistema RAG

Cuando mi cafetera decidi贸 dejar de funcionar, revisar el manual fue simplemente doloroso y, honestamente, una p茅rdida de tiempo. As铆 que, en lugar de rendirme, prob茅 algo diferente: utilic茅 un sistema de Recuperaci贸n-Aumentada por Generaci贸n (RAG) con un Modelo de Lenguaje Grande (LLM) para solucionarlo.

Leer m谩s
C贸mo construir un panel en Azure Cloud utilizando consultas de App Insights con KQL generadas por un LLM

C贸mo construir un panel en Azure Cloud utilizando consultas de App Insights con KQL generadas por un LLM

Construir un panel robusto y 煤til en Azure Application Insights con KQL (Kusto Query Language) permite a los equipos de desarrollo monitorear y analizar el rendimiento de su aplicaci贸n y el comportamiento de los usuarios. Esta gu铆a te llevar谩 a trav茅s de la creaci贸n de un panel con ejemplos de KPIs y gr谩ficos correspondientes. No s茅 nada sobre KQL, pero usar茅 una LLM para generar las consultas que necesito.

Leer m谩s