欢迎来到雲闪世界。 例如,你有没有想过,当你吃晚餐时,你摄入了多少卡路里?我经常这样做。如果你能简单地通过应用程序发送一张你的盘子照片,并在你决定要吃多少之前得到卡路里总量的估计值,那不是很棒吗? 我创建的这个卡路里计数器应用程序可以帮助您实现此目标。这是一个 Python 应用程序,使用 Google 的 Gemini-1.5-Pro-Latest 模型来估算食物中的卡路里数。 该应用接受两个输入:关于食物的问题和食物或食物物品的图片,或者简单地说是一盘食物。它会输出问题的答案、图片中的卡路里总数以及图片中每种食物的卡路里明细。 在本文中,我将解释使用 Google 的 Gemini-1.5-pro-latest(Google 发布的大型语言生成式 AI 模型)从头开始构建应用程序的整个端到端过程,以及我如何使用 Streamlit 开发应用程序的前端。 值得注意的是,随着人工智能领域的进步,数据科学家必须逐步从传统的深度学习转向生成式人工智能技术,以彻底改变他们的角色。这是我教授这个主题的主要目的。
首先,我先简单解释一下 Gemini-1.5-pro-latest 和 streamlit 框架,因为它们是这个卡路里计数器应用程序基础架构的主要组件。 Gemini-1.5-pro-最新版本 Gemini-1.5-pro-latest 是 Google 开发的高级 AI 语言模型。由于它是最新版本,因此与以前的版本相比,它在自然语言处理和构建应用程序时具有更快的响应时间和更高的准确性,因此功能得到了增强。 这是一个适用于文本和图像的多模式模型——比仅适用于文本提示的 Google Gemini-pro 模型有所进步。 该模型的工作原理是像人类一样,根据给出的提示理解和生成文本。在本文中,该模型将用于为我们的卡路里计数器应用生成文本。 Gemini-1.5-pro-latest 可以集成到其他应用程序中以增强其 AI 功能。在当前的应用程序中,该模型使用生成式 AI 技术将上传的图像分解为单个食物。根据其对营养数据库中食物的上下文理解,它使用图像识别和物体检测来估计卡路里数,然后计算出图像中所有食物的卡路里总数。 Streamlit Streamlit 是一个开源 Python 框架,用于管理用户界面。该框架简化了 Web 开发,因此在整个项目中,您无需为前端编写任何 HTML 和 CSS 代码。 让我们深入构建该应用程序。 构建你的卡路里计数器应用程序 我将向您展示如何通过 5 个清晰的步骤构建应用程序。
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-latest 目前可供公众免费使用。访问它需要您获取 API 密钥,您可以通过此链接中的“获取 API 密钥”从 Google AI Studio 获取该密钥。密钥生成后,请将其复制以供后续在代码中使用。将此密钥保存为 .env 文件中的环境变量,如下所示。
GOOGLE_API_KEY = “在此处粘贴生成的密钥”
3.安装依赖项
在您的 requirements.txt 文件中输入以下库。
-
流光
-
google-generativeai
-
python-dotenv
在终端中,使用以下命令安装 requirements.txt 中的库:
python -m pip 安装 -r 要求.txt
4.编写 Python 脚本
现在,我们开始在calories.py中编写Python脚本。使用以下代码导入所有必需的库:
#从dotenv导入库import load_dotenv
import streamlit as st
import os
import google.generativeai as genai
从PIL导入图像
导入的各种模块的使用方法如下:
-
dotenv — 由于此应用程序将从 Google API 密钥环境变量进行配置,因此使用 dotenv 从 .env 文件加载配置。
-
Streamlit — 为前端创建交互式用户界面
-
os 模块用于在执行文件操作(例如从 .env 文件获取 API 密钥)时处理当前工作目录
-
当然,google.generativeai 模块让我们可以访问我们即将使用的 Gemini 模型。
-
PIL 是一个用于管理图像文件格式的 Python 图像库。
以下行将配置 API 密钥并从环境变量存储中加载它们。
genai.configure(api_key = os.getenv(“GOOGLE_API_KEY”))“GOOGLE_API_KEY”))
load_dotenv()
定义一个函数,当调用时,将加载 Gemini-1.5-pro-latest 并获取响应,如下所示:
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])
返回response.text
在上面的函数中,您会看到它以脚本中进一步指定的输入提示、用户将提供的图像以及用户将提供的用户提示/问题作为输入。 所有这些都进入 gemini 模型以返回响应文本。 由于 Gemini-1.5-pro 需要以字节数组的形式输入图像,因此接下来要做的就是编写一个函数来处理上传的图像,将其转换为字节。
def input_image_setup ( uploaded_file ):
# 检查文件是否已上传
if uploaded_file不为 None : # 将文件读入字节 bytes_data = uploaded_file.getvalue() image_parts = [ { "mime_type" : uploaded_file. type , # 获取上传文件的 mime 类型"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 卡路里计数器应用程序") "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( "提交并处理" ) #创建“提交并处理”按钮
上述步骤包含应用程序的所有部分。此时,用户可以打开应用程序、输入问题并上传图片。 最后,让我们把所有的部分放在一起,这样一旦点击“提交并处理”按钮,用户就会得到所需的响应文本。
# 一旦单击提交和处理按钮,
如果提交:
image_data = input_image_setup(uploaded_file)
response = get_gemini_reponse(input_prompt,image_data,input)
st.subheader(“响应是”)
st.write(response)
5. 运行脚本并与您的应用交互
现在应用程序开发已完成,您可以使用以下命令在终端中执行它:
streamlit 运行卡路里.py
要与您的应用交互并查看其运行情况,请使用生成的本地 URL 或网络 URL 在浏览器中查看您的 Streamlit 应用。 Chrome 浏览器上的卡路里计数器应用程序的演示图像 这是您的 Streamlit 应用在浏览器上首次打开时的样子。
添加图片注释,不超过 140 字(可选)
一旦用户提出问题并上传图像,就会显示以下内容:
添加图片注释,不超过 140 字(可选)
一旦用户按下“提交并处理”按钮,屏幕底部就会生成下图中的响应。
添加图片注释,不超过 140 字(可选)
下一步 对于外部访问,请考虑使用 AWS、Heroku、Streamlit Community Cloud 等云服务部署您的应用。在本例中,让我们使用 Streamlit Community Cloud 免费部署应用。 在应用程序屏幕的右上角,单击“部署”并按照提示完成部署。 部署后,您可以分享生成的应用程序URL给其他用户。 卡路里计数器应用程序的局限性 与其他人工智能应用程序一样,输出的结果是模型的最佳估计,因此,在完全依赖该应用程序之前,请注意以下一些潜在风险:
-
卡路里计数器应用程序可能会对某些食物进行错误分类,从而给出错误的卡路里数。
-
该应用程序没有参考点来根据上传的图片估计食物的大小(份量)。这可能会导致错误。
-
过度依赖该应用程序可能会导致压力和心理健康问题,因为人们可能会痴迷于计算卡路里并担心结果可能不太准确。
减轻应用程序的限制 为了帮助降低使用卡路里计数器带来的风险,以下是可以融入其开发中的增强功能:
-
添加图像的上下文分析,这将有助于测量正在分析的食物分量的大小。例如,可以构建应用程序,以便将食物图像中包含的标准物体(如勺子)用作测量食物大小的参考点。这将减少总卡路里的误差。
-
谷歌可以提高训练集中食物的多样性,以减少误分类错误。他们可以扩大训练集,包括更多文化的食物,这样即使是稀有的非洲食物也能被识别出来。
-
感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)