Aprenda a utilizar el último modelo Germini-1.5-pro de Google para desarrollar una aplicación de inteligencia artificial generativa para contar calorías
¿Alguna vez te has preguntado cuántas calorías consumes cuando cenas, por ejemplo? Yo lo hago todo el tiempo. ¿No sería maravilloso si pudieras simplemente pasar una foto de tu plato a través de una aplicación y obtener una estimación de la cantidad total de calorías antes de decidir cuántas quieres consumir?
Esta aplicación de conteo de calorías que he creado puede ayudarte a lograrlo. Es una aplicación Python que utiliza el modelo Gemini-1.5-Pro-Latest de Google para calcular la cantidad de calorías de los alimentos.
La aplicación acepta dos entradas: una pregunta sobre la comida y una imagen de la comida o de los alimentos, o simplemente, de un plato de comida. Muestra una respuesta a la pregunta, la cantidad total de calorías de la imagen y un desglose de las calorías por cada alimento de la imagen.
En este artículo, explicaré todo el proceso de principio a fin de la creación de la aplicación desde cero, utilizando Gemini-1.5-pro-latest de Google (un modelo de IA generativa de lenguaje grande lanzado por Google), y cómo desarrollé el front-end de la aplicación utilizando Streamlit.
Vale la pena señalar aquí que, con los avances en el mundo de la IA, los científicos de datos deben pasar gradualmente del aprendizaje profundo tradicional a técnicas de IA generativa para revolucionar su función. Este es mi principal objetivo al educar sobre este tema.
Permítanme comenzar explicando brevemente Gemini-1.5-pro-latest y el marco streamlit, ya que son los componentes principales de la infraestructura de esta aplicación de contador de calorías.
Gemini-1.5-pro-latest es un modelo avanzado de lenguaje de IA desarrollado por Google. Como es la última versión, tiene capacidades mejoradas en comparación con las versiones anteriores, como tiempos de respuesta más rápidos y una precisión mejorada cuando se utiliza en el procesamiento del lenguaje natural y la creación de aplicaciones.
Se trata de un modelo multimodal que funciona tanto con textos como con imágenes: un avance respecto del modelo Google Gemini-pro, que solo funciona con indicaciones de texto.
El modelo funciona entendiendo y generando texto, como los humanos, en función de las indicaciones que se le dan. En este artículo, este modelo se utilizará para generar texto para nuestra aplicación de contador de calorías.
Gemini-1.5-pro-latest se puede integrar en otras aplicaciones para reforzar sus capacidades de IA. En esta aplicación actual, el modelo utiliza técnicas de IA generativa para dividir la imagen cargada en alimentos individuales. Basándose en su comprensión contextual de los alimentos de su base de datos nutricional, utiliza el reconocimiento de imágenes y la detección de objetos para estimar la cantidad de calorías y, luego, suma las calorías de todos los alimentos de la imagen.
Streamlit es un framework Python de código abierto que se encarga de gestionar la interfaz de usuario. Este framework simplifica el desarrollo web de modo que durante todo el proyecto no es necesario escribir ningún código HTML ni CSS para la interfaz.
Vamos a sumergirnos en la creación de la aplicación.
Te mostraré cómo crear la aplicación en 5 pasos claros.
1. Configure la estructura de su carpeta
Para empezar, ve a tu editor de código favorito (el mío es VS Code) y crea un archivo de proyecto. Llámalo Calories-Counter, por ejemplo. Este es el directorio de trabajo actual. Crea un entorno virtual (venv), actívalo en tu terminal y luego crea los siguientes archivos: .env, calories.py, requirements.txt.
A continuación se ofrece una recomendación sobre el aspecto de la estructura de su carpeta:
Calories-Counter/
├── venv/
│ ├── xxx
│ ├── xxx
├── .env
├── calories.py
└── requirements.txt
Tenga en cuenta que Gemini-1.5-Pro funciona mejor con las versiones de Python 3.9 y superiores.
2. Obtenga la clave API de Google
Al igual que otros modelos de Gemini, Gemini-1.5-pro-latest actualmente es gratuito para uso público. Para acceder a él, es necesario obtener una clave API, que puede obtener desde Google AI Studio yendo a “Obtener clave API” en este enlaceUna vez generada la clave, cópiela para usarla posteriormente en su código. Guarde esta clave como una variable de entorno en el archivo .env de la siguiente manera.
GOOGLE_API_KEY="paste the generated key here"
3. Instalar dependencias
Escriba las siguientes bibliotecas en su archivo requirements.txt.
- iluminado por el sol
- google-generativeai
- Python-dotenv
En la terminal, instale las bibliotecas en requirements.txt con:
python -m pip install -r requirements.txt
4. Escribe el script de Python
Ahora, comencemos a escribir el script de Python en calories.py. Con el siguiente código, importe todas las bibliotecas necesarias:
# import the libraries
from dotenv import load_dotenv
import streamlit as st
import os
import google.generativeai as genai
from PIL import Image
A continuación se explica cómo se utilizarán los distintos módulos importados:
- dotenv: dado que esta aplicación se configurará desde una variable de entorno de clave API de Google, dotenv se utiliza para cargar la configuración desde el archivo .env.
- Streamlit: para crear una interfaz de usuario interactiva para el front-end
- El módulo os se utiliza para manejar el directorio de trabajo actual mientras se realizan operaciones de archivo como obtener la clave API del archivo .env
- El módulo google.generativeai, por supuesto, nos da acceso al modelo Gemini que estamos a punto de utilizar.
- PIL es una biblioteca de imágenes de Python que se utiliza para administrar formatos de archivos de imagen.
Las siguientes líneas configurarán las claves API y las cargarán desde el almacén de variables de entorno.
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))load_dotenv()
Defina una función que, cuando se llame, cargará Gemini-1.5-pro-latest y obtendrá la respuesta de la siguiente manera:
def get_gemini_reponse(input_prompt,image,user_prompt):
model=genai.GenerativeModel('gemini-1.5-pro-latest')
response=model.generate_content([input_prompt,image[0],user_prompt])
return response.text
En la función anterior, se puede ver que se toma como entrada el mensaje de entrada que se especificará más adelante en el script, una imagen que proporcionará el usuario y un mensaje/pregunta que proporcionará el usuario. Todo esto se introduce en el modelo Gemini para devolver el texto de respuesta.
Dado que Gemini-1.5-pro espera imágenes de entrada en forma de matrices de bytes, lo siguiente que hay que hacer es escribir una función que procese la imagen cargada y la convierta en bytes.
def input_image_setup(uploaded_file):
# Check if a file has been uploaded
if uploaded_file is not None:
# Read the file into bytes
bytes_data = uploaded_file.getvalue()image_parts = [
{
"mime_type": uploaded_file.type, # Get the mime type of the uploaded file
"data": bytes_data
}
]
return image_parts
else:
raise FileNotFoundError("No file uploaded")
A continuación, especifica el mensaje de entrada que determinará el comportamiento de tu aplicación. Aquí, simplemente le estamos indicando a Gemini qué hacer con el texto y la imagen que el usuario le proporcionará a la aplicación.
input_prompt="""
You are an expert nutritionist.
You should answer the question entered by the user in the input based on the uploaded image you see.
You should also look at the food items found in the uploaded image and calculate the total calories.
Also, provide the details of every food item with calories intake in the format below:1. Item 1 - no of calories
2. Item 2 - no of calories
----
----
"""
El siguiente paso es inicializar streamlit y crear una interfaz de usuario simple para su aplicación de contador de calorías.
st.set_page_config(page_title="Gemini Calorie Counter App")
st.header("Calorie Counter App")
input=st.text_input("Ask any question related to your food: ",key="input")
uploaded_file = st.file_uploader("Upload an image of your food", type=["jpg", "jpeg", "png"])
image=""
if uploaded_file is not None:
image = Image.open(uploaded_file)
st.image(image, caption="Uploaded Image.", use_column_width=True) #show the imagesubmit=st.button("Submit & Process") #creates a "Submit & Process" button
Los pasos anteriores incluyen todos los elementos de la aplicación. En este punto, el usuario puede abrir la aplicación, ingresar una pregunta y cargar una imagen.
Finalmente, juntemos todas las piezas de modo que una vez que se haga clic en el botón “Enviar y procesar”, el usuario obtenga el texto de respuesta requerido.
# Once submit&Process button is clicked
if submit:
image_data=input_image_setup(uploaded_file)
response=get_gemini_reponse(input_prompt,image_data,input)
st.subheader("The Response is")
st.write(response)
5. Ejecute el script e interactúe con su aplicación
Ahora que el desarrollo de la aplicación está completo, puedes ejecutarla en la terminal usando el comando:
streamlit run calories.py
Para interactuar con su aplicación y ver cómo funciona, visualice su aplicación Streamlit en su navegador usando la URL local o la URL de red generada.
Así se ve tu aplicación Streamlit cuando se abre por primera vez en el navegador.
Una vez que el usuario hace una pregunta y carga una imagen, esto es lo que se muestra:
Una vez que el usuario presiona el botón “Enviar y procesar”, la respuesta en la imagen de abajo se genera en la parte inferior de la pantalla.
Para el acceso externo, considere implementar su aplicación mediante servicios en la nube como AWS, Heroku y Streamlit Community Cloud. En este caso, usaremos Streamlit Community Cloud para implementar la aplicación de forma gratuita.
En la parte superior derecha de la pantalla de la aplicación, haga clic en “Implementar” y siga las instrucciones para completar la implementación.
Después de la implementación, puede compartir la URL de la aplicación generada con otros usuarios.
Al igual que otras aplicaciones de IA, los resultados generados son las mejores estimaciones del modelo, por lo que, antes de confiar completamente en la aplicación, tenga en cuenta lo siguiente como algunos de los riesgos potenciales:
- La aplicación de contador de calorías puede clasificar erróneamente ciertos alimentos y, por lo tanto, proporcionar una cantidad incorrecta de calorías.
- La aplicación no tiene un punto de referencia para estimar el tamaño de la comida (porción) en función de la imagen cargada. Esto puede generar errores.
- La dependencia excesiva de la aplicación puede provocar estrés y problemas de salud mental, ya que uno puede obsesionarse con contar calorías y preocuparse por resultados que pueden no ser demasiado precisos.
Para ayudar a reducir los riesgos que conlleva el uso del contador de calorías, aquí se presentan posibles mejoras que podrían integrarse en su desarrollo:
- Añadir un análisis contextual de la imagen, que ayudará a medir el tamaño de la porción de comida que se analiza. Por ejemplo, la aplicación podría diseñarse de manera que un objeto estándar, como una cuchara, incluido en la imagen de la comida, se pueda utilizar como punto de referencia para medir el tamaño de los alimentos. Esto reducirá los errores en las calorías totales resultantes.
- Google podría mejorar la diversidad de alimentos en su conjunto de entrenamiento para reducir los errores de clasificación. Podría ampliarlo para incluir alimentos de más culturas, de modo que se puedan identificar incluso alimentos africanos poco comunes.