如何使用Gemini API处理并提取图像中的数据?
Google Gemini API 图像分析集成指南
图像提交方式
- Base64编码:适用于本地图像文件,将图像二进制数据转为Base64字符串后嵌入请求体
- 公开URL:适用于已托管在公网的图像,直接提供可访问的URL即可,API会自动抓取图像内容
请求核心参数
请求需包含以下关键部分:
model:指定支持图像的模型,如gemini-pro-vision(唯一支持图像输入的Gemini基础模型)contents:数组结构,每个元素包含parts数组,可同时传入文本提示和图像数据:- 文本提示:
{"text": "你的分析指令,比如'提取图片中的所有文字'"} - Base64图像:
{"inline_data": {"mime_type": "image/jpeg", "data": "base64编码字符串"}} - URL图像:
{"image_url": {"url": "https://example.com/your-image.jpg"}}
- 文本提示:
key:你的Gemini API密钥,可放在请求URL参数(?key=xxx)或请求头中
响应解析方法
API返回JSON格式响应,核心数据路径为:response.json()["candidates"][0]["content"]["parts"][0]["text"]
candidates:模型返回的结果数组(通常取第一个元素)content.parts.text:模型生成的图像分析文本内容
图像格式与尺寸限制
- 支持格式:JPEG、PNG、WEBP、HEIC、HEIF
- 分辨率限制:最大1024x1024像素,超过需先压缩调整
- 文件大小:单张图像不超过20MB
Python 请求示例
本地图像(Base64编码)
import requests import base64 API_KEY = "你的Gemini API密钥" MODEL = "gemini-pro-vision" # 读取本地图像并转为Base64 with open("local-image.jpg", "rb") as img_file: base64_img = base64.b64encode(img_file.read()).decode("utf-8") # 构建请求体 payload = { "contents": [ { "parts": [ {"text": "描述这张图片,提取其中的物体和文字内容"}, {"inline_data": {"mime_type": "image/jpeg", "data": base64_img}} ] } ] } # 发送请求 resp = requests.post( f"https://generativelanguage.googleapis.com/v1/models/{MODEL}:generateContent?key={API_KEY}", json=payload ) # 解析结果 if resp.status_code == 200: result_text = resp.json()["candidates"][0]["content"]["parts"][0]["text"] print("提取结果:\n", result_text) else: print("请求失败:", resp.json())
公网图像(URL方式)
import requests API_KEY = "你的Gemini API密钥" MODEL = "gemini-pro-vision" IMAGE_URL = "https://example.com/public-image.png" # 构建请求体 payload = { "contents": [ { "parts": [ {"text": "提取这张图片中的所有文字信息"}, {"image_url": {"url": IMAGE_URL}} ] } ] } # 发送请求 resp = requests.post( f"https://generativelanguage.googleapis.com/v1/models/{MODEL}:generateContent?key={API_KEY}", json=payload ) # 解析结果 if resp.status_code == 200: result_text = resp.json()["candidates"][0]["content"]["parts"][0]["text"] print("提取的文字:\n", result_text) else: print("请求失败:", resp.json())
典型响应格式
{ "candidates": [ { "content": { "parts": [ { "text": "这张图片展示了一张书桌,上面有一台笔记本电脑,屏幕显示'Project Demo'字样,旁边放着一支黑色钢笔和一个蓝色笔记本。" } ], "role": "model" }, "finishReason": "STOP", "index": 0, "safetyRatings": [ { "category": "HARM_CATEGORY_HATE_SPEECH", "probability": "NEGLIGIBLE" } ] } ], "usageMetadata": { "promptTokenCount": 142, "candidatesTokenCount": 78, "totalTokenCount": 220 } }
内容的提问来源于stack exchange,提问作者Arlan Kaliyev
相关产品推荐
相关产品推荐

