了解如何使用 Google 的 Gemini-1.5-pro 最新模型开发用于卡路里计算的生成式 AI 应用

news2024/12/24 20:17:29

       欢迎来到雲闪世界。 例如,你有没有想过,当你吃晚餐时,你摄入了多少卡路里?我经常这样做。如果你能简单地通过应用程序发送一张你的盘子照片,并在你决定要吃多少之前得到卡路里总量的估计值,那不是很棒吗? 我创建的这个卡路里计数器应用程序可以帮助您实现此目标。这是一个 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开发人员)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2079503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot依赖之JDBC(二)

要在 IntelliJ IDEA 中创建一个 Spring Boot 项目并实现基于 JdbcTemplate 的增删改查功能,以下是一个详细的步骤和代码示例。这个例子使用一个简单的用户信息表(users),并展示如何使用 JdbcTemplate 的各种方法进行操作。 前文有…

【Linux —— 生产者消费者模型】

Linux —— 生产者消费者模型 生产者消费者模型概述生产者消费者模型特点生产者消费者模型优点基于BlockingQueue的生产者消费者模型 生产者消费者模型概述 生产者消费者模型是一种并发编程模型,用于解决多线程或多进程间的数据共享和同步问题。在这个模型中,有两种角色:生产者…

Python 3.11 从入门到实战1(环境准备)

本篇文章是python3.11的学习开篇,我们的目标是:通过这一套资料学习下来,获得python基础学习与实例、实践相结合,使我们完全掌握python。并做到独立完成项目开发的能力。 今天的谈论的比较简单,也是后续学习的基础。pyt…

深入MySQL

MySQL逻辑架构 MySQL逻辑架构整体分为三层,顶层客户端并非MySQL独有,如:连接处理、授权认证、安全等功能都在客户端层。 核心服务层,MySQL大多数核心服务都在这一层,包括查询解析、分析、优化、缓存、内置函数等。所有…

Python中csv文件的操作5

在《Python中csv文件的操作1》中提到,可以通过read()和write()方法读取和写入csv文件中的所有内容。除了上述的两个方法外,还可以通过readline()、readlines()、writelines()实现csv文件的读写操作。 1 readline()方法 readline()方法每次只读取文件的…

入行「游戏策划」,该从何处下手?

想知道策划岗位该怎么入行可点击蓝链 相比较起以技术为最重要评判标准的开发岗, 「游戏策划」这一岗位在非业界人士的眼中 一直都是一个风评方差很大的岗位。 有人说策划岗又轻松又威风, 只需要输出想法,落地都交给开发, 干…

xss-labs 11-15关通关攻略

第11关 一.进入11关 二.进行抓包 在抓到的数据包中加入Referer:"οnclick"alert(1)"type"text 第12关 进入第12关发现没有注入点,进入源代码看哪里可以注入发现 二.在ua头注入 Referer:"οnclick"alert(1)"type"text…

【鸿蒙样式初探】多个组件如何共用同一样式

最近开发鸿蒙,刚接触难免二和尚摸不着头脑,尤其是样式...... 背景 在做银行卡显示的一个小需求时: 每个Text都需要设置fontColor:#FFFFFF" 想着是否可以简单点 解决历程 思路一:(拒绝) 使用Styles 提取封装公…

matlab仿真 信道编码和交织(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第八章内容,有兴趣的读者请阅读原书) ​ ​ ​ clear alln3;k2;%A(3,2)循环码N10000;%消息比特的行数msgrandi([0 1],N,k);%消息比特一共N*k行polcyclpoly(n,k);…

C++ TinyWebServer项目总结(12. 高性能I/O框架库Libevent)

Linux服务器程序必须处理三类事件(I/O、信号和定时事件),在处理这三类事件时需要考虑以下问题: 统一事件源。统一处理这三类事件既能使代码简单易懂,又能避免一些潜在的逻辑错误。实现统一事件源的一般方法&#xff1…

如何用Java SpringBoot+Vue搭建花开富贵花园管理系统

🎓 作者:计算机毕设小月哥 | 软件开发专家 🖥️ 简介:8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 🛠️ 专业服务 🛠️ 需求定制化开发源码提…

推荐一篇 学习SQL 的文章

学习 java,当然避不开数据库的知识,个人认为好学好理解的一篇文章,推荐给大家 SQL语法基础知识总结 | JavaGuide「Java学习 面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide&#xf…

智能优化算法-鹈鹕优化算法(POA)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 鹈鹕优化算法 (Pelican Optimization Algorithm, POA) 是一种基于群体智能的元启发式优化算法,它模拟了鹈鹕的捕食行为和社会交互特性,用于解决复杂的优化问题。 POA的工作机制主要包括…

单元测试、系统测试和集成测试知识详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、单元测试的概念 单元测试是对软件基本组成单元进行的测试,如函数或一个类的方法。当然这里的基本单元不仅仅指的是一个函数或者方法&#xff…

FlagEval 8月榜 | 文生视频大模型主观评测结果揭晓,新增6款新发布模型

近日,智源研究院联合中国传媒大学发布文生视频大模型主观评测榜单,在今年5月对Sora、Runway Gen-2、PixVerse V1、Pika 1.0、VideoCrafter-V2、Show-1、Open-Sora 1.0七个模型性能表现评测结果的基础之上,不仅对部分模型的升级版本进行了对比…

C++初学(16)

16.1、if语句 当C程序必须决定是否执行某个操作时,通常使用if语句来实现选择。if有两种格式:if和if else。 if语句的语法与while相似: if(text-condition)statement 如果text-condition(测试条件)为true&#xff0…

iTimes工时管理系统:企业高效管理的得力助手

在当今快节奏的商业环境中,企业面临着越来越多的挑战,其中之一便是如何高效、准确地管理员工工时。工时管理不仅关乎企业的成本控制,还直接影响到项目执行效率、员工满意度以及整体运营水平。因此,选择一款优秀的工时管理系统显得…

【应用层】Tomcat10安装以及对应的VScode插件使用

文章日期是2024年8月26日,Tomcat10为稳定版中最新的,Tomcat11为测试版。 流程:下载Tomcat10-->等待下载时,安装对应的VScode插件-->配置Tomcat10-->配置对应的VScode插件 1、下载Tomcat10 2、安装对应的VScode插件 3…

Codeforce 963

CF 963 B 模拟加贪心 偶数个数C 模拟前缀和 灯能否全亮D 二分DP 中位数尽可能大F1 模拟镜像 题目链接 B 模拟加贪心 偶数个数 考点:贪心 思路:除了全是偶数的情况,其他的情况都需要将偶数转换为奇数。最少的操作步数是偶数个数,…