Gemini 网络图片解析
📋 概述
该 API 允许用户通过url传输图片并获取 AI 生成的详细描述,支持多种图片格式(JPEG、PNG、WEBP、HEIC、HEIF 等)。
🌐 请求地址
| 服务类型 | 接口地址 | 说明 |
|---|---|---|
| 图片解析 | https://www.dmxapi.cn | SDK |
| 图片解析 | https://www.dmxapi.cn/v1beta |
💻 Python 示例代码
python
"""
╔══════════════════════════════════════════════════════════════════════════════╗
║ Gemini 图片分析 - REST API 方式 ║
╠══════════════════════════════════════════════════════════════════════════════╣
║ 功能说明:调用 Gemini 模型分析网络图片 ║
║ API 提供商:DMXAPI ║
║ 模型版本:Gemini 2.5 Flash ║
╚══════════════════════════════════════════════════════════════════════════════╝
"""
import requests
import base64
# ═══════════════════════════════════════════════════════════════════════════════
# 📋 配置参数
# ═══════════════════════════════════════════════════════════════════════════════
GEMINI_API_KEY = "sk-****************************" # DMXAPI 访问令牌
BASE_URL = "https://www.dmxapi.cn/v1beta" # API 基础地址
IMG_URL = "https://goo.gle/instrument-img" # 待分析图片 URL
MODEL = "gemini-2.5-flash" # Gemini 模型版本
# ═══════════════════════════════════════════════════════════════════════════════
# 🔧 工具函数
# ═══════════════════════════════════════════════════════════════════════════════
def get_image_mime_type(url):
"""
获取图片的 MIME 类型
参数:
url (str): 图片的 URL 地址
返回:
str: MIME 类型字符串(如 'image/jpeg', 'image/png')
获取失败时返回默认值 'image/jpeg'
"""
try:
response = requests.head(url, allow_redirects=True, timeout=10)
mime_type = response.headers.get('Content-Type', '')
if mime_type and mime_type.startswith('image/'):
return mime_type.split(';')[0].strip()
except Exception as e:
print(f"⚠️ 警告: 无法获取 MIME 类型 - {e}")
return "image/jpeg" # 默认返回 JPEG 格式
def download_and_encode_image(url):
"""
下载图片并转换为 base64 编码
参数:
url (str): 图片的 URL 地址
返回:
str: base64 编码的图片数据字符串
异常:
requests.exceptions.RequestException: 下载失败时抛出
"""
response = requests.get(url, timeout=10)
response.raise_for_status()
return base64.b64encode(response.content).decode('utf-8')
def analyze_image(image_b64, mime_type, prompt="Caption this image."):
"""
调用 Gemini API 分析图片内容
参数:
image_b64 (str): base64 编码的图片数据
mime_type (str): 图片的 MIME 类型
prompt (str): 分析提示词,默认为 "Caption this image."
返回:
dict: API 返回的 JSON 响应,包含分析结果
异常:
requests.exceptions.RequestException: API 请求失败时抛出
"""
# 构建完整的 API 端点 URL
api_url = f"{BASE_URL}/models/{MODEL}:generateContent"
# 设置请求头(使用 Bearer Token 认证)
headers = {
"Authorization": f"Bearer {GEMINI_API_KEY}",
"Content-Type": "application/json"
}
# 构建请求负载(符合 Gemini API 规范)
payload = {
"contents": [{
"parts": [
{"inline_data": {"mime_type": mime_type, "data": image_b64}},
{"text": prompt}
]
}]
}
# 发送 POST 请求并返回结果
response = requests.post(api_url, headers=headers, json=payload, timeout=30)
response.raise_for_status()
return response.json()
# ═══════════════════════════════════════════════════════════════════════════════
# 🚀 主程序入口
# ═══════════════════════════════════════════════════════════════════════════════
if __name__ == "__main__":
try:
print(f"📸 正在分析图片: {IMG_URL}\n")
# ────────────────────────────────────────────────────────────────────────
# 步骤 1: 获取图片 MIME 类型
# ────────────────────────────────────────────────────────────────────────
mime_type = get_image_mime_type(IMG_URL)
print(f"[1/3] ✓ MIME 类型: {mime_type}")
# ────────────────────────────────────────────────────────────────────────
# 步骤 2: 下载图片并进行 base64 编码
# ────────────────────────────────────────────────────────────────────────
image_b64 = download_and_encode_image(IMG_URL)
print(f"[2/3] ✓ 图片编码完成 ({len(image_b64)} 字符)")
# ────────────────────────────────────────────────────────────────────────
# 步骤 3: 调用 Gemini API 进行图片分析
# ────────────────────────────────────────────────────────────────────────
print(f"[3/3] 🔄 正在分析...\n")
result = analyze_image(image_b64, mime_type, prompt="解释这个图片的具体内容")
# ────────────────────────────────────────────────────────────────────────
# 输出分析结果
# ────────────────────────────────────────────────────────────────────────
print("╔" + "═" * 68 + "╗")
print("║" + " " * 24 + "📊 分析结果" + " " * 32 + "║")
print("╠" + "═" * 68 + "╣")
if 'candidates' in result and result['candidates']:
# 提取并输出 AI 生成的文本内容
for part in result['candidates'][0].get('content', {}).get('parts', []):
if 'text' in part:
# 格式化输出文本
text_lines = part['text'].split('\n')
for line in text_lines:
print(f"║ {line}")
else:
print(f"║ ⚠️ 未获取到结果: {result}")
print("╚" + "═" * 68 + "╝")
except requests.exceptions.RequestException as e:
print(f"\n❌ 网络请求失败: {e}")
except Exception as e:
print(f"\n❌ 错误: {e}")📤 返回示例
成功响应
json
📸 正在分析图片: https://goo.gle/instrument-img
[1/3] ✓ MIME 类型: image/jpeg
[2/3] ✓ 图片编码完成 (511708 字符)
[3/3] 🔄 正在分析...
╔════════════════════════════════════════════════════════════════════╗
║ 📊 分析结果 ║
╠════════════════════════════════════════════════════════════════════╣
║ 这张图片展示的是一个大型管风琴(或高品质电子管风琴)的演奏台,也称为琴台或音栓台(console)。它由精美的木材制成,呈现出经典的木纹和温暖的色调,看起来非常宏伟和复杂。
║
║ 以下是图片中主要部件的详细描述:
║
║ 1. **整体结构和材料:**
║ * 整个琴台由实木(很可能是橡木)制成,木纹清晰可见,颜色为中等深度的棕色。
║ * 设计符合人体工程学,琴台两侧向内弯曲,方便演奏者操作。
║ * 结构坚固,表面打磨光滑,展现出高品质的工艺。
║
║ 2. **音栓(Stop Tabs / Drawknobs)控制区:**
║ * 琴台的左右两侧以及上部中央区域,密密麻麻地排列着大量的白色和少量黑色的方形或长方形按键,这些是**音栓推子(stop tabs)**,用于选择不同的音色(如长笛、小号、提琴、各种基础音色等)。
║ * 这些音栓推子被分层、弯曲排列,方便演奏者快速选择和切换音色。
║ * 每个音栓上通常标有音色名称和音高(如 "Principal 8'", "Flute 4'", "Trumpet 16'" 等),虽然在图像中难以辨认具体文字,但其数量之多表明这台风琴拥有极其丰富的音色库。
║ * 在左上角和右上角,可以看到小型的数字显示屏,可能用于显示音栓组合的记忆级别或其他数字设置。
║
║ 3. **手键盘(Manuals):**
║ * 琴台中央有**四层手键盘**,这表明这是一台非常大型且功能强大的风琴,能进行复杂的复调演奏。
║ * 每层键盘由黑白琴键组成,键盘下方有一排圆形的白色小按钮,这些是**组合活塞(combination pistons)**,演奏者可以预设并存储多种音栓组合,通过按下一个按钮即可快速切换。
║
║ 4. **踏板键盘(Pedalboard):**
║ * 琴台底部是**踏板键盘**,由一系列长条形的木制琴键组成,用于脚部演奏。它通常呈扇形和凹形排列,以适应演奏者的脚部运动。
║ * 踏板键盘的键位通常比手键盘更少,但同样有黑白之分,演奏低音部分。
║
║ 5. **表情踏板(Expression Pedals)和音量踏板:**
║ * 在踏板键盘上方、中央偏后的位置,有**四个长方形的黑色踏板**,带有防滑纹理。这些是**表情踏板(swell pedals)**,用于控制特定音栓组的音量,模仿管风琴通过打开和关闭音箱百叶窗来改变音量的效果,以及一个**渐强踏板(crescendo pedal)**,用于逐渐增加所有音栓的音量。
║
║ 6. **脚趾活塞(Toe Pistons):**
║ * 在表情踏板的两侧以及踏板键盘旁边,有几排圆形的、闪亮的**黄铜色按钮**,这些是**脚趾活塞(toe pistons)**,其功能类似于手键盘下方的组合活塞,但由脚操作,常用于控制大型音栓组合(如Tutti)或特殊效果。
║
║ 总而言之,这张图片展示的是一个设计精良、功能齐全、拥有丰富音色和控制选项的专业级管风琴琴台,通常用于音乐厅、教堂或大型管风琴演奏者的练习室。它的复杂性体现了管风琴作为“乐器之王”的地位。
╚════════════════════════════════════════════════════════════════════╝💻 Python 示例代码(SDK)
python
"""
Gemini 图片分析示例
=====================
使用DMXAPI 代理服务分析网络图片内容
功能说明:
- 从网络 URL 下载图片
- 使用 Gemini 2.5 Flash 模型分析图片内容
- 通过 DMXAPI 代理访问 Gemini API
"""
from google import genai
from google.genai import types
import requests
# ============================================================================
# 配置部分
# ============================================================================
# DMXAPI 配置信息
api_key = "sk-*****************************" # 使用在DMXAPI官网获取的令牌
BASE_URL = "https://www.dmxapi.cn" # DMXAPI 基础地址
# ============================================================================
# 图片准备
# ============================================================================
# 图片来源 URL
image_path = "https://goo.gle/instrument-img" #(可换成自己图片的url图片地址)
# 下载图片并获取字节数据
image_bytes = requests.get(image_path).content
# 将图片字节转换为 Gemini API 所需的 Part 对象
image = types.Part.from_bytes(
data=image_bytes,
mime_type="image/jpeg"
)
# ============================================================================
# 初始化 Gemini 客户端
# ============================================================================
# 创建 Gemini 客户端,配置使用 DMXAPI 代理
client = genai.Client(
api_key=api_key,
http_options={'base_url': BASE_URL}
)
# ============================================================================
# 图片分析
# ============================================================================
# 调用 Gemini 2.5 Flash 模型分析图片
# contents 参数包含提示词和图片对象
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=["解释这个图片的具体内容", image],
)
# ============================================================================
# 输出结果
# ============================================================================
# 打印 AI 生成的图片分析结果
print(response.text)📤 返回示例
成功响应
json
这张图片展示的是一个非常复杂且制作精良的**管风琴演奏台(Organ Console)**。以下是其具体内容的详细解释:
1. **整体外观和材质:**
* 整个演奏台由高质量的**木材**制成,呈现出经典的棕色木纹,看起来非常坚固和典雅,很可能是橡木或类似的硬木。
* 设计上考究人体工学,琴键、踏板和音栓(stops)等控制装置都以弧形或阶梯状排列,以便演奏者能够方便地操作。
2. **手动键盘(Manual Keyboards):**
* 图片中央有**四排手键盘**,每一排都称为一个“手键盘”(Manual)。
* 这些键盘的样式与钢琴键盘类似,有黑白键,用于用手演奏旋律和和声。
* 通常,每个手键盘控制管风琴的不同声部或音区(例如,大管风琴Great Organ、膨胀管风琴Swell Organ、合唱管风琴Choir Organ等),拥有各自独立的音色和音量控制。
3. **音栓控制器(Stop Controls):**
* 在手键盘的两侧,以及手键盘上方,排列着**大量的白色和部分黑色的矩形拨片或按钮**。这些是管风琴的“音栓”(Stops)或“音色选择器”。
* 每个音栓代表管风琴中的一组特定音色的音管(例如,笛音、号音、弦乐音等),并通常标有音色名称和音高(如8' Diapason, 4' Flute等)。
* 通过推拉、拨动或按下这些音栓,演奏者可以选择和组合不同的音色,创造出极其丰富和多变的音响效果。
* 在左侧音栓区域的上方,可以看到一个小型**数字显示屏**(例如,显示“88”),这通常用于显示组合记忆系统的预设编号或状态。
4. **组合活塞(Combination Pistons):**
* 在每个手键盘的下方,以及踏板键盘的上方,散布着许多**圆形的小按钮**。这些是“组合活塞”(Pistons)或“记忆活塞”。
* 它们允许演奏者预设并即时调用一组特定的音栓组合,大大提高了演奏时的便利性和复杂性,特别是在快速切换音色时。
5. **踏板键盘(Pedalboard):**
* 演奏台的最下方是一个由**大型木制键组成的扇形弧形键盘**,称为“踏板键盘”。
* 这些键由演奏者的双脚操作,主要用于演奏管风琴的低音部分,提供深沉的低音支持。
* 这个踏板键盘看起来是标准的径向凹型(radial and concave)设计,符合人体工程学,方便双脚操作。
6. **表情踏板(Expression Pedals / Swell Shoes):**
* 在踏板键盘上方、演奏者脚部区域的中央,有**三个黑色的矩形踏板**。这些是“表情踏板”或“膨胀踏板”(Swell Shoes)。
* 它们用于控制管风琴特定声部(如Swell Organ)的音量,通过打开或关闭音管室的百叶窗来调节声音的强弱,从而实现表情和动态的变化。
7. **脚趾活塞(Toe Studs):**
* 在表情踏板的两侧以及踏板键盘上方,还有一些**圆形的、通常是黄铜色的按钮**,被称为“脚趾活塞”(Toe Studs)。
* 它们的功能类似于手键盘下的组合活塞,但由脚趾操作,同样用于即时调用预设的音栓组合或控制特殊功能。
**总结:**
这张图片展示的是一个功能极其强大且复杂的**四排手动键盘管风琴演奏台**。它拥有丰富的音色控制(通过大量的音栓)、便捷的组合记忆系统(手活塞和脚活塞)、以及允许细腻演奏动态的表情踏板。这种类型的演奏台通常用于大型教堂、音乐厅或专业录音室中的管风琴,需要熟练的演奏者用手和脚协调操作,才能驾驭其宏伟的音响。⚠️ 注意事项
- 请妥善保管您的 API 密钥,不要将其暴露在公开代码中
- API 请求需要稳定的网络连接
- 建议在生产环境中添加重试机制和错误处理
- 注意监控 token 使用量以控制成本
© 2025 DMXAPI Gemini网络图片分析
