gemini-pro-vision 看图说话

一、安装

   pip install -U langchain-google-vertexai

二、设置访问权限

        申请服务账号json格式key

三、完整代码

import gradio as gr
import json
import base64
from pathlib import Path
import os
import time
import requests
from fastapi import FastAPI, UploadFile, File
from fastapi.middleware.cors import CORSMiddleware
import uvicorn
from langchain_core.messages import HumanMessage
from langchain_google_vertexai import ChatVertexAI
from langchain_core.output_parsers import StrOutputParseros.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "xxx.json"
app = FastAPI()
app.add_middleware(CORSMiddleware,allow_origins=["*"],allow_credentials=True,allow_methods=["*"],allow_headers=["*"],)def encode_image(image_path):with open(image_path, "rb") as image_file:return base64.b64encode(image_file.read()).decode("utf-8")def generate(model, prompt, images_base64):llm = ChatVertexAI(model_name=model)# examplemessage = HumanMessage(content=[{"type": "text","text": prompt,},{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{images_base64}"}},])parser = StrOutputParser()result = llm.invoke([message])parserResult = parser.invoke(result)return parserResultdef respond(model, image_path, prompt, chat_history):print(model, image_path, prompt)images_base64 = [encode_image(image_path)]bot_message = generate(model, prompt, images_base64)chat_history.append((prompt, bot_message))time.sleep(1)return "", chat_historywith gr.Blocks() as demo:gr.Image(value='xxx.png',height=30,width=70, interactive=False, show_download_button=False, show_label=False)gr.HTML("""<h1 align="center">图片问答</h1>""")model = gr.Textbox(value="gemini-pro-vision",label="gemini多模态模型:")with gr.Row():with gr.Column(scale=1):image_path = gr.Image(label="上传图片:",type="filepath", value='Picture1.png')with gr.Column(scale=3):chatbot = gr.Chatbot()prompt = gr.Textbox(label="用户:",value="大童在保险行业的地位如何?使用中文回答。")clear = gr.ClearButton([prompt, chatbot])prompt.submit(respond, [model, image_path, prompt, chatbot], [prompt, chatbot])app = gr.mount_gradio_app(app, demo, path="/")if __name__ == '__main__':uvicorn.run(app='web_gemini:app', host='0.0.0.0', port=8500, workers=1)

四、运行效果

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

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

相关文章

android的跨进程通讯方式

android的跨进程通讯方式 在Android中&#xff0c;跨进程通信&#xff08;IPC&#xff09;可以通过多种方式实现&#xff0c;以下是几种常见的方法&#xff1a; 使用Intent&#xff1a;通过Intent传递数据&#xff0c;启动另一个应用的Activity或Service。 使用AIDL&#…

无缝集成的艺术:在Conda中启用pip与Conda的互操作性

无缝集成的艺术&#xff1a;在Conda中启用pip与Conda的互操作性 引言 Conda是一个强大的包管理器和环境管理器&#xff0c;广泛用于Python和其他科学计算语言。它不仅能够管理包的依赖关系&#xff0c;还能创建和维护独立的开发环境。然而&#xff0c;在某些情况下&#xff0…

K8S私有云裸金属服务器负载均衡器OpenELB——筑梦之路

OpenELB介绍 OpenELB 是一个专为裸机 Kubernetes 集群设计的开源负载均衡器实现。 在云服务环境中的 Kubernetes 集群里&#xff0c;通常可以用云服务提供商提供的负载均衡服务来暴露 Service&#xff0c;但是在本地没办法这样操作。而 OpenELB 可以让用户在裸金属服务器、边缘…

RocketMQ~架构与工作流程了解

简介 RocketMQ 具有高性能、高可靠、高实时、分布式 的特点。它是一个采用 Java 语言开发的分布式的消息系统&#xff0c;由阿里巴巴团队开发&#xff0c;在 2016 年底贡献给 Apache&#xff0c;成为了 Apache 的一个顶级项目。 在阿里内部&#xff0c;RocketMQ 很好地服务了集…

怎么关闭Windows安全中心?

Windows安全中心是Windows操作系统中的一项重要功能&#xff0c;系统提供这个功能的目的是保护电脑免受各种安全威胁。尽管如此&#xff0c;有时候我们可能出于某些原因需要关闭它。本文将详细介绍如何关闭Windows安全中心&#xff0c;以及需要注意的事项。 重要提醒&#xff1…

搞清c++中的队列(queue)以及双端队列(deque),以及常用的接口!

1. 队列 概念&#xff1a;Queue是一种先进先出(First In First Out,FIFO)的数据结构&#xff0c;它有两个出口 特征&#xff1a; 队列容器允许从一端新增元素&#xff0c;从另一端移除元素 队列中只有队头和队尾才可以被外界使用&#xff0c;因此队列不允许有遍历行为 队列…

这个工具居然能让你的微信暴露得一览无余!!

今天在github看到一个不错的项目&#xff0c;叫做wx-dump-4j&#xff0c;不看不知道&#xff0c;一看吓一跳&#xff0c;这个工具完全的解析了我的微信&#xff01;这个工具准确显示好友数、群聊数和当日消息总量&#xff0c;并且&#xff01;&#xff01;这个工具提供过去15天…

第59期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

js | 原型链

为什么前者会输出Lucas 后者不会&#xff1f;call动作具体干了什么? http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ function Foo(){this.bar"Lucas" } let obj{}; obj.__proto__Foo.prototype; Foo.call(obj) console.log(obj.bar); // 输出Lucas/…

【排序算法】1.冒泡排序-C语言实现

冒泡排序&#xff08;Bubble Sort&#xff09;是最简单和最通用的排序方法&#xff0c;其基本思想是&#xff1a;在待排序的一组数中&#xff0c;将相邻的两个数进行比较&#xff0c;若前面的数比后面的数大就交换两数&#xff0c;否则不交换&#xff1b;如此下去&#xff0c;直…

Web前端-Web开发CSS基础3-盒模型

一. 基础 1. CSS盒子模型分为几部分&#xff1f;分别是什么&#xff1f; 2. CSS盒子模型分为几部分&#xff1f;分别是什么&#xff1f; 3. CSS盒子模型分为几部分&#xff1f;分别是什么&#xff1f; 4. 为<div>标签定义一个点线边框&#xff1b; 5. 为<div>标签定…

haproxy的简单配置

一、Haproxy相关知识 nginx &#xff1a; 四层转发、七层代理 lvs &#xff1a;四层转发&#xff0c;内核态&#xff0c;用户态 Haproxy &#xff1a;四层转发&#xff0c;七层转发 Haproxy的作用和使用场景 场景&#xff1a; 用于高并发的web场景&#xff0c;可以支持一万…

学习Python的IDE功能--(一)入门导览

项目视图是主要工具窗口之一。它包含项目目录、SDK 特定的外部库和临时文件。点击带条纹的按钮可以预览演示项目。您也可以按Alt1打开。点击以打开项目视图&#xff0c;展开项目目录以查看项目文件。双击以打开welcome.py。 切换到"学习"工具窗口继续学习本课次。…

Django F()函数

F()函数的作用 F()函数在Django中是一个非常强大的工具&#xff0c;主要用于在查询表达式中引用模型的字段。它允许你在数据库层面执行各种操作&#xff0c;而无需将数据加载到Python内存中。这不仅提高了性能&#xff0c;还允许你利用数据库的优化功能。 字段引用 在查询表达…

SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表

Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 4、SpringBoot集成Sharding-JDBC-5.3.0分库分表 5、SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表 前言 …

力扣每日一题:2956. 找到两个数组中的公共元素

文章目录 ***今日份每日一题&#xff1a;***题目要求&#xff1a;示例如下&#xff1a;示例1示例2示例3 解释剖析示例示例1示例2示例3 将逻辑思路转换为代码 力扣官网&#xff1a;前往作答&#xff01;&#xff01;&#xff01;&#xff01; 今日份每日一题&#xff1a; 题目…

XBOX360-玩体感游戏时提示:您必须进行系统更新,才能使用Kinect

XBOX360-玩体感游戏时提示:您必须进行系统更新,才能使用Kinect 背景更换硬盘准备的软件XBOX换盘和拷贝游戏设置XBOX启动就进入Aurora如何何止Aurora的游戏目录扫描路径解决您必须进行系统更新,才能使用Kinect问题参考链接背景 实际上我的XBOX需要解决两个问题: 自制系统升…

HTTP缓存/强缓存/协商缓存

HTTP缓存是HTTP性能优化中一种简单高效的优化方式&#xff0c;通过保存资源副本并在下次请求时直接使用该副本&#xff0c;以减少对服务器的请求次数和数据传输量&#xff0c;从而提高网页加载速度和用户体验。以下是HTTP缓存的详细解释&#xff1a; 一、定义与工作原理 HTTP…

VMware安装CentOS 7

在虚拟机中安装无论是Windows还是Linux其实都差不多&#xff0c;主要还是需要熟悉VMware的使用&#xff0c;多新增几次就熟悉了&#xff0c;可以反复删除再新增去练习… 如下是安装CentOS 7 安装过程&#xff1a; VMare Workstation 16 PRO 中安装CentOS 7 CentOS 7 下载推荐…

Meta Llama - Model Cards Prompt formats

本文翻译整理自&#xff1a; https://llama.meta.com/docs/model-cards-and-prompt-formats/meta-llama-3/ 文章目录 一、Meta Llama 3与Meta Llama 3一起使用的特殊tokenMeta Llama 3Meta Llama 3 Instruct 二、Meta Llama Guard 2提示格式 三、Meta Code LlamaMeta Code Llam…