AI赋能:用Gemini 1.5 Pro和Streamlit构建智能卡路里计数器

8

探索Gemini 1.5 Pro打造的智能卡路里计数器

在数字化浪潮席卷全球的今天,人工智能(AI)正以前所未有的速度渗透到我们生活的方方面面。尤其是在健康管理领域,AI的应用正变得日益普及。试想一下,当您准备享用晚餐时,只需用手机拍摄一张餐盘的照片,AI就能即时估算出这顿饭的总卡路里含量,这无疑将为我们的饮食决策提供极大的便利。本文将深入探讨如何利用Google的Gemini 1.5 Pro模型,从零开始构建一个智能卡路里计数器应用程序,并详细介绍如何使用Streamlit框架开发应用程序的前端界面。

Gemini 1.5 Pro与Streamlit:核心技术解析

在深入探讨应用程序的构建过程之前,我们首先需要了解Gemini 1.5 Pro和Streamlit框架,因为它们是构建卡路里计数器应用程序的基础。Gemini 1.5 Pro是Google开发的一款先进的AI语言模型。相较于之前的版本,Gemini 1.5 Pro在自然语言处理和应用程序构建方面具有更快的响应速度和更高的准确性,功能得到了显著增强。作为一个多模态模型,Gemini 1.5 Pro不仅支持文本输入,还支持图像输入,这与仅支持文本提示的Google Gemini Pro模型相比,无疑是一个巨大的进步。

Gemini 1.5 Pro的工作原理与人类类似,它能够根据给定的提示理解和生成文本。在卡路里计数器应用程序中,Gemini 1.5 Pro将利用图像识别和物体检测技术,将上传的图像分解为单个食物,并根据其对营养数据库中食物的上下文理解,估算每种食物的卡路里数,然后计算出图像中所有食物的总卡路里数。Streamlit是一个开源的Python框架,专门用于简化用户界面的管理。Streamlit框架极大地简化了Web开发过程,使得开发者无需编写任何HTML和CSS代码即可构建交互式Web应用程序。

构建卡路里计数器应用程序:五个关键步骤

接下来,我们将详细介绍如何通过五个清晰的步骤构建卡路里计数器应用程序。

1. 设置文件夹结构

首先,选择您喜欢的代码编辑器(例如VS Code),并创建一个项目文件夹。例如,将其命名为Calories-Counter。在这个项目文件夹中,创建一个虚拟环境(venv),激活它,并创建以下文件:.env、calories.py和requirements.txt。以下是一个建议的文件夹结构:

Calories-Counter/
├── venv/
│   ├── xxx
│   ├── xxx
├── .envenv
├── calories.py
└── requirements.txt

2. 获取Google API密钥

与其他Gemini模型一样,Gemini 1.5 Pro目前可供公众免费使用。要访问Gemini 1.5 Pro,您需要获取一个API密钥。您可以通过Google AI Studio获取该密钥。获取密钥后,将其复制并保存到.env文件中,如下所示:

GOOGLE_API_KEY = “在此处粘贴生成的密钥”

3. 安装依赖项

在您的requirements.txt文件中输入以下库:

  • Streamlit
  • google-generativeai
  • python-dotenv

在终端中使用以下命令安装requirements.txt文件中的库:

python -m pip install -r requirements.txt

4. 编写Python脚本

现在,我们开始在calories.py文件中编写Python脚本。首先,导入所有必需的库:

import load_dotenv
import streamlit as st
import os
import google.generativeai as genai
from PIL import Image

这些模块的用途如下:

  • dotenv:用于从.env文件加载配置。
  • Streamlit:用于创建交互式用户界面。
  • os模块:用于处理文件操作。
  • google.generativeai模块:用于访问Gemini模型。
  • PIL:用于处理图像文件格式。

以下代码行将配置API密钥并从环境变量存储中加载它们:

genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
load_dotenv()

接下来,定义一个名为get_gemini_response的函数,该函数用于加载Gemini 1.5 Pro模型并获取响应:

def get_gemini_response(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

由于Gemini 1.5 Pro需要以字节数组的形式输入图像,因此我们需要编写一个函数来处理上传的图像,并将其转换为字节:

def input_image_setup(uploaded_file):
    if uploaded_file is not None:
        bytes_data = uploaded_file.getvalue()
        image_parts = [
            {
                "mime_type": uploaded_file.type,
                "data": bytes_data
            }
        ]
        return image_parts
    else:
        raise FileNotFoundError("No file uploaded")

现在,指定将决定应用程序行为的输入提示。在这里,我们告诉Gemini如何处理用户向应用程序提供的文本和图像:

input_prompt = """
您是一位营养专家。
您应该根据您看到的上传图片回答用户在输入中输入的问题。
您还应该查看上传图片中的食物并计算总卡路里。
此外,请按照以下格式提供每种食物的卡路里摄入量详情:

                   1. 食物 1 - 卡路里含量
                   2. 食物 2 - 卡路里含量
                   ----
                   ----

"""

下一步是初始化Streamlit并为您的卡路里计数器应用程序创建一个简单的用户界面:

st.set_page_config(page_title="Gemini 卡路里计数器应用程序")
st.header("卡路里计数器应用程序")
input = st.text_input("询问与您的食物相关的任何问题:", key="input")
uploaded_file = st.file_uploader("上传您的食物图片", type=["jpg", "jpeg", "png"])
image = ""
if uploaded_file is not None:
    image = Image.open(uploaded_file)
    st.image(image, caption="已上传图片。", use_column_width=True)

submit = st.button("提交并处理")

上述步骤包含了应用程序的所有部分。此时,用户可以打开应用程序、输入问题并上传图片。最后,我们将所有的部分放在一起,以便一旦点击“提交并处理”按钮,用户就可以获得所需的响应文本:

if submit:
    image_data = input_image_setup(uploaded_file)
    response = get_gemini_response(input_prompt, image_data, input)
    st.subheader("响应是")
    st.write(response)

5. 运行脚本并与您的应用程序交互

现在应用程序开发已完成,您可以使用以下命令在终端中执行它:

streamlit run calories.py

要与您的应用程序交互并查看其运行情况,请使用生成的本地URL或网络URL在浏览器中查看您的Streamlit应用程序。

卡路里计数器应用程序的局限性与改进方向

与其他AI应用程序一样,卡路里计数器应用程序的输出结果是模型的最佳估计。因此,在完全依赖该应用程序之前,我们需要注意以下一些潜在风险:

  • 该应用程序可能会对某些食物进行错误分类,从而给出错误的卡路里数。
  • 该应用程序没有参考点来根据上传的图片估计食物的大小(份量),这可能会导致错误。
  • 过度依赖该应用程序可能会导致压力和心理健康问题,因为人们可能会痴迷于计算卡路里,并担心结果可能不太准确。

为了帮助降低使用卡路里计数器带来的风险,以下是可以融入其开发中的增强功能:

  • 添加图像的上下文分析,这将有助于测量正在分析的食物分量的大小。例如,可以构建应用程序,以便将食物图像中包含的标准物体(如勺子)用作测量食物大小的参考点。这将减少总卡路里的误差。
  • 谷歌可以提高训练集中食物的多样性,以减少误分类错误。他们可以扩大训练集,包括更多文化的食物,这样即使是稀有的食物也能被识别出来。

结语

Gemini 1.5 Pro与Streamlit的结合,为我们提供了一个强大的工具,可以构建各种AI驱动的应用程序。通过本文的介绍,相信您已经掌握了构建卡路里计数器应用程序的基本步骤和技术。当然,AI技术的发展日新月异,我们需要不断学习和探索,才能更好地利用AI为我们的生活带来便利。

希望本文能够帮助您更好地了解Gemini 1.5 Pro和Streamlit框架,并激发您在AI应用开发方面的灵感。让我们一起拥抱AI,共同创造更加美好的未来!