Skip to content

Gemini 网络图片解析

📋 概述

该 API 允许用户通过url传输图片并获取 AI 生成的详细描述,支持多种图片格式(JPEG、PNG、WEBP、HEIC、HEIF 等)。

🌐 请求地址

服务类型接口地址说明
图片解析https://www.dmxapi.cnSDK
图片解析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网络图片分析

一个 Key 用全球大模型