mcpField
G
gemini-3-multimodal

gemini-3-multimodal

github.com/adaptationio数据与数据库58 次安装
代码仓库

关于 gemini-3-multimodal

面向使用 Gemini 3 Pro 的开发者,介绍图像、视频、音频和 PDF 分析方法,并提供分辨率控制示例,以平衡媒体细节与 Token 用量。

主要功能

  1. 01图像分析与 OCR
  2. 02视频及帧分析
  3. 03音频转写与理解
  4. 04PDF 提取与分析
  5. 05按媒体项目控制分辨率
  6. 06优化 Token 用量

适用场景

  1. 01提取截图中的文字
  2. 02总结视频或播客
  3. 03分析研究 PDF
  4. 04调整媒体请求的分辨率

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/adaptationio/skrillz --skill gemini-3-multimodal

安装后在 Claude Code 中输入/gemini-3-multimodal确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
audio-processing.md
document-processing.md
image-understanding.md
media-resolution.md
ocr-extraction.md
token-optimization.md
video-processing.md
scripts/
analyze-image.py
process-audio.py
process-pdf.py
process-video.py

详细介绍

Gemini 3 Pro 多模态输入处理

使用 Gemini 3 Pro 处理多模态输入的综合指南,包括图像理解、视频分析、音频处理和 PDF 文档提取。本技能专注于输入处理(分析媒体)——如需处理输出(生成图像),请参阅 gemini-3-image-generation。

概述

Gemini 3 Pro 提供原生多模态能力,可理解和分析各种媒体类型。本技能涵盖所有输入处理操作,并可精细控制质量、性能和令牌消耗。

主要功能
  • 图像理解: 物体检测、OCR、视觉问答、根据屏幕截图生成代码
  • 视频处理: 最长 1 小时的视频、帧分析、OCR
  • 音频处理: 最长 9.5 小时的音频、语音理解
  • PDF 文档: 原生 PDF 支持、多页分析、文本提取
  • 媒体分辨率控制: 低/中/高分辨率,优化令牌用量
  • 令牌优化: 精细控制处理成本
何时使用本技能
  • 分析图像、照片或屏幕截图
  • 处理视频内容以获取洞见
  • 转录或理解音频/语音
  • 从 PDF 文档中提取信息
  • 构建多模态应用
  • 优化媒体处理成本

快速开始

前置条件
  • Gemini API 设置(参阅 gemini-3-pro-api 技能)
  • 媒体文件,且格式受支持
Python 快速开始
import google.generativeai as genai
from pathlib import Path

genai.configure(api_key="YOUR_API_KEY")
model = genai.GenerativeModel("gemini-3-pro-preview")

# Upload and analyze image
image_file = genai.upload_file(Path("photo.jpg"))
response = model.generate_content([
    "What's in this image?",
    image_file
])
print(response.text)
Node.js 快速开始
import { GoogleGenerativeAI } from "@google/generative-ai";
import { GoogleAIFileManager } from "@google/generative-ai/server";
import fs from "fs";

const genAI = new GoogleGenerativeAI("YOUR_API_KEY");
const fileManager = new GoogleAIFileManager("YOUR_API_KEY");

// Upload and analyze image
const uploadResult = await fileManager.uploadFile("photo.jpg", {
  mimeType: "image/jpeg"
});

const model = genAI.getGenerativeModel({ model: "gemini-3-pro-preview" });
const result = await model.generateContent([
  "What's in this image?",
  { fileData: { fileUri: uploadResult.file.uri, mimeType: uploadResult.file.mimeType } }
]);

console.log(result.response.text());

核心任务

任务 1:分析图像内容

目标: 从图像中提取信息、物体、文本或洞见。

使用场景:

  • 物体检测与识别
  • OCR(从图像中提取文本)
  • 视觉问答
  • 根据 UI 屏幕截图生成代码
  • 图表/示意图分析
  • 产品识别

Python 示例:

import google.generativeai as genai
from pathlib import Path

genai.configure(api_key="YOUR_API_KEY")

# Configure model with high resolution for best quality
model = genai.GenerativeModel(
    "gemini-3-pro-preview",
    generation_config={
        "thinking_level": "high",
        "media_resolution": "high"  # 1,120 tokens per image
    }
)

# Upload image
image_path = Path("screenshot.png")
image_file = genai.upload_file(image_path)

# Analyze with specific prompt
response = model.generate_content([
    """Analyze this image and provide:
    1. Main objects and their locations
    2. Any visible text (OCR)
    3. Overall context and purpose
    4. If code/UI: describe the functionality
    """,
    image_file
])

print(response.text)

# Check token usage
print(f"Tokens used: {response.usage_metadata.total_token_count}")

Node.js 示例:

import { GoogleGenerativeAI } from "@google/generative-ai";
import { GoogleAIFileManager } from "@google/generative-ai/server";

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY!);
const fileManager = new GoogleAIFileManager(process.env.GEMINI_API_KEY!);

// Upload image
const uploadResult = await fileManager.uploadFile("screenshot.png", {
  mimeType: "image/png"
});

// Configure model with high resolution
const model = genAI.getGenerativeModel({
  model: "gemini-3-pro-preview",
  generationConfig: {
    thinking_level: "high",
    media_resolution: "high"  // Best quality for OCR
  }
});

const result = await model.generateContent([
  `Analyze this image and provide:
  1. Main objects and their locations
  2. Any visible text (OCR)
  3. Overall context and purpose`,
  { fileData: { fileUri: uploadResult.file.uri, mimeType: uploadResult.file.mimeType } }
]);

console.log(result.response.text());

分辨率选项:

分辨率每张图像的令牌数适用场景
low280 个令牌快速分析、细节较少
medium560 个令牌质量与成本均衡
high1,120 个令牌OCR、精细细节、小号文本

支持的格式: JPEG、PNG、WEBP、HEIC、HEIF

参阅: references/image-understanding.md,了解高级用法


任务 2:处理视频内容

目标: 分析视频内容、提取洞见并逐帧分析。

使用场景:

  • 视频摘要
  • 物体追踪
  • 场景检测
  • 视频 OCR
  • 内容审核
  • 教育视频分析

Python 示例:

import google.generativeai as genai
from pathlib import Path

genai.configure(api_key="YOUR_API_KEY")

# Configure for video processing
model = genai.GenerativeModel(
    "gemini-3-pro-preview",
    generation_config={
        "thinking_level": "high",
        "media_resolution": "medium"  # 70 tokens/frame (balanced)
    }
)

# Upload video (up to 1 hour supported)
video_path = Path("tutorial.mp4")
video_file = genai.upload_file(video_path)

# Wait for processing
import time
while video_file.state.name == "PROCESSING":
    time.sleep(5)
    video_file = genai.get_file(video_file.name)

if video_file.state.name == "FAILED":
    raise ValueError("Video processing failed")

# Analyze video
response = model.generate_content([
    """Analyze this video and provide:
    1. Overall summary of content
    2. Key scenes and timestamps
    3. Main topics covered
    4. Any visible text throughout the video
    """,
    video_file
])

print(response.text)
print(f"Tokens used: {response.usage_metadata.total_token_count}")

Node.js 示例:

import { GoogleGenerativeAI } from "@google/generative-ai";
import { GoogleAIFileManager, FileState } from "@google/generative-ai/server";

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY!);
const fileManager = new GoogleAIFileManager(process.env.GEMINI_API_KEY!);

// Upload video
const uploadResult = await fileManager.uploadFile("tutorial.mp4", {
  mimeType: "video/mp4"
});

// Wait for processing
let file = await fileManager.getFile(uploadResult.file.name);
while (file.state === FileState.PROCESSING) {
  await new Promise(resolve => setTimeout(resolve, 5000));
  file = await fileManager.getFile(uploadResult.file.name);
}

if (file.state === FileState.FAILED) {
  throw new Error("Video processing failed");
}

// Analyze video
const model = genAI.getGenerativeModel({
  model: "gemini-3-pro-preview",
  generationConfig: {
    media_resolution: "medium"
  }
});

const result = await model.generateContent([
  `Analyze this video and provide:
  1. Overall summary
  2. Key scenes and timestamps
  3. Main topics covered`,
  { fileData: { fileUri: file.uri, mimeType: file.mimeType } }
]);

console.log(result.response.text());

视频规格:

  • 最长时长: 1 小时
  • 格式: MP4、MOV、AVI 等
  • 分辨率选项: 低(70 个令牌/帧)、中(70 个令牌/帧)、高(280 个令牌/帧)
  • OCR: 高分辨率下可用

参阅: references/video-processing.md,了解高级用法


任务 3:处理音频/语音

目标: 转录并理解音频内容,处理语音。

使用场景:

  • 音频转录
  • 语音分析
  • 播客摘要
  • 会议记录
  • 语言理解
  • 音频分类

Python 示例:

import google.generativeai as genai
from pathlib import Path

genai.configure(api_key="YOUR_API_KEY")

model = genai.GenerativeModel("gemini-3-pro-preview")

# Upload audio file (up to 9.5 hours supported)
audio_path = Path("podcast.mp3")
audio_file = genai.upload_file(audio_path)

# Wait for processing
import time
while audio_file.state.name == "PROCESSING":
    time.sleep(5)
    audio_file = genai.get_file(audio_file.name)

# Process audio
response = model.generate_content([
    """Process this audio and provide:
    1. Full transcription
    2. Summary of main points
    3. Key speakers (if multiple)
    4. Important timestamps
    5. Action items or conclusions
    """,
    audio_file
])

print(response.text)
print(f"Tokens used: {response.usage_metadata.total_token_count}")

Node.js 示例:

import { GoogleGenerativeAI } from "@google/generative-ai";
import { GoogleAIFileManager, FileState } from "@google/generative-ai/server";

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY!);
const fileManager = new GoogleAIFileManager(process.env.GEMINI_API_KEY!);

// Upload audio
const uploadResult = await fileManager.uploadFile("podcast.mp3", {
  mimeType: "audio/mp3"
});

// Wait for processing
let file = await fileManager.getFile(uploadResult.file.name);
while (file.state === FileState.PROCESSING) {
  await new Promise(resolve => setTimeout(resolve, 5000));
  file = await fileManager.getFile(uploadResult.file.name);
}

const model = genAI.getGenerativeModel({ model: "gemini-3-pro-preview" });

const result = await model.generateContent([
  `Process this audio and provide:
  1. Full transcription
  2. Summary of main points
  3. Key timestamps`,
  { fileData: { fileUri: file.uri, mimeType: file.mimeType } }
]);

console.log(result.response.text());

音频规格:

  • 最长时长: 9.5 小时
  • 格式: WAV、MP3、FLAC、AAC 等
  • 语言: 支持多种语言

参阅: references/audio-processing.md,了解高级用法


任务 4:处理 PDF 文档

目标: 提取并分析 PDF 文档中的内容。

用例:

  • 文档分析
  • 信息提取
  • 表单处理
  • 研究论文分析
  • 合同审查
  • 多页文档理解

Python 示例:

import google.generativeai as genai
from pathlib import Path

genai.configure(api_key="YOUR_API_KEY")

# Configure with medium resolution (recommended for PDFs)
model = genai.GenerativeModel(
    "gemini-3-pro-preview",
    generation_config={
        "thinking_level": "high",
        "media_resolution": "medium"  # 560 tokens/page (saturation point)
    }
)

# Upload PDF
pdf_path = Path("research_paper.pdf")
pdf_file = genai.upload_file(pdf_path)

# Wait for processing
import time
while pdf_file.state.name == "PROCESSING":
    time.sleep(5)
    pdf_file = genai.get_file(pdf_file.name)

# Analyze PDF
response = model.generate_content([
    """Analyze this PDF document and provide:
    1. Document type and purpose
    2. Main sections and structure
    3. Key findings or arguments
    4. Important data or statistics
    5. Conclusions or recommendations
    """,
    pdf_file
])

print(response.text)
print(f"Tokens used: {response.usage_metadata.total_token_count}")

Node.js 示例:

import { GoogleGenerativeAI } from "@google/generative-ai";
import { GoogleAIFileManager, FileState } from "@google/generative-ai/server";

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY!);
const fileManager = new GoogleAIFileManager(process.env.GEMINI_API_KEY!);

// Upload PDF
const uploadResult = await fileManager.uploadFile("research_paper.pdf", {
  mimeType: "application/pdf"
});

// Wait for processing
let file = await fileManager.getFile(uploadResult.file.name);
while (file.state === FileState.PROCESSING) {
  await new Promise(resolve => setTimeout(resolve, 5000));
  file = await fileManager.getFile(uploadResult.file.name);
}

// Analyze with medium resolution (recommended)
const model = genAI.getGenerativeModel({
  model: "gemini-3-pro-preview",
  generationConfig: {
    media_resolution: "medium"
  }
});

const result = await model.generateContent([
  `Analyze this PDF and extract:
  1. Main sections
  2. Key findings
  3. Important data`,
  { fileData: { fileUri: file.uri, mimeType: file.mimeType } }
]);

console.log(result.response.text());

PDF 处理提示:

  • 推荐分辨率: medium(每页 560 个 token)——质量饱和点
  • 多页: 自动处理所有页面
  • 原生支持: 无需转换为图像
  • 文本提取: 内置高质量文本提取功能

参见: references/document-processing.md,了解高级模式


任务 5:优化媒体处理成本

目标: 根据用例平衡质量和 token 消耗。

策略:

媒体类型分辨率Token 数用例
图像low280快速扫描、缩略图
图像medium560常规分析
图像high1,120OCR、精细细节、代码
PDFmedium560/页推荐(饱和点)
PDFhigh1,120/页收益递减
视频low/medium70/帧大多数用例
视频high280/帧从视频中进行 OCR

Python 优化示例:

import google.generativeai as genai

genai.configure(api_key="YOUR_API_KEY")

# Different resolutions for different use cases
def analyze_image_optimized(image_path, need_ocr=False):
    """Analyze image with appropriate resolution"""
    resolution = "high" if need_ocr else "medium"

    model = genai.GenerativeModel(
        "gemini-3-pro-preview",
        generation_config={
            "media_resolution": resolution
        }
    )

    image_file = genai.upload_file(image_path)
    response = model.generate_content([
        "Describe this image" if not need_ocr else "Extract all text from this image",
        image_file
    ])

    # Log token usage for cost tracking
    tokens = response.usage_metadata.total_token_count
    cost = (tokens / 1_000_000) * 2.00  # Input pricing
    print(f"Resolution: {resolution}, Tokens: {tokens}, Cost: ${cost:.6f}")

    return response.text

# Use appropriate resolution
analyze_image_optimized("photo.jpg", need_ocr=False)  # medium
analyze_image_optimized("document.png", need_ocr=True)  # high

逐项控制分辨率:

# Set different resolutions for different media in same request
response = model.generate_content([
    "Compare these images",
    {"file": image1, "media_resolution": "high"},  # High detail
    {"file": image2, "media_resolution": "low"},   # Low detail OK
])

成本监控:

def log_media_costs(response):
    """Log media processing costs"""
    usage = response.usage_metadata

    # Pricing for ≤200k context
    input_cost = (usage.prompt_token_count / 1_000_000) * 2.00
    output_cost = (usage.candidates_token_count / 1_000_000) * 12.00

    print(f"Input tokens: {usage.prompt_token_count} (${input_cost:.6f})")
    print(f"Output tokens: {usage.candidates_token_count} (${output_cost:.6f})")
    print(f"Total cost: ${input_cost + output_cost:.6f}")

参见: references/token-optimization.md,了解全面的优化策略


媒体分辨率控制

分辨率选项
设置图像PDF视频(每帧)建议
low280 个 token280 个 token70 个 token快速分析,细节较少
medium560 个 token560 个 token70 个 token平衡质量与成本
high1,120 个 token1,120 个 token280 个 tokenOCR、精细文本、细节
配置

全局设置(所有媒体):

model = genai.GenerativeModel(
    "gemini-3-pro-preview",
    generation_config={
        "media_resolution": "high"  # Applies to all media
    }
)

逐项设置(混合分辨率):

response = model.generate_content([
    "Analyze these files",
    {"file": high_detail_image, "media_resolution": "high"},
    {"file": low_detail_image, "media_resolution": "low"}
])
最佳实践
  1. 图像: OCR/文本提取使用 high,常规分析使用 medium
  2. PDF: 使用 medium(饱和点——更高分辨率的收益递减)
  3. 视频: 除非需要 OCR,否则使用 low 或 medium
  4. 成本控制: 从 low 开始,仅在质量不足时提高

参见: references/media-resolution.md,了解详细指南


文件管理

上传文件
import google.generativeai as genai

# Upload file
file = genai.upload_file("path/to/file.jpg")
print(f"Uploaded: {file.name}")

# Check processing status
while file.state.name == "PROCESSING":
    time.sleep(5)
    file = genai.get_file(file.name)

print(f"Status: {file.state.name}")
列出已上传文件
# List all files
for file in genai.list_files():
    print(f"{file.name} - {file.display_name}")
删除文件
# Delete specific file
genai.delete_file(file.name)

# Delete all files
for file in genai.list_files():
    genai.delete_file(file.name)
    print(f"Deleted: {file.name}")
文件生命周期
  • 上传: 即时
  • 处理: 异步(尤其是视频/音频)
  • 存储: 文件会一直保留,直到被删除
  • 过期: 文件可能会在一段时间后过期(请查看文档)

多文件处理

处理多张图像
# Upload multiple images
images = [
    genai.upload_file("photo1.jpg"),
    genai.upload_file("photo2.jpg"),
    genai.upload_file("photo3.jpg")
]

# Analyze together
response = model.generate_content([
    "Compare these images and identify common elements",
    *images
])

print(response.text)
混合媒体类型
# Combine different media types
image = genai.upload_file("chart.png")
pdf = genai.upload_file("report.pdf")

response = model.generate_content([
    "Does the chart match the data in the report?",
    image,
    pdf
])

参考资料

核心指南

优化

脚本

官方资源


相关技能

  • gemini-3-pro-api - 基本设置、身份验证、文本生成
  • gemini-3-image-generation - 图像输出(生成图像)
  • gemini-3-advanced - 函数调用、工具、缓存、批处理

常见用例

视觉问答应用

将图像理解与聊天结合:

model = genai.GenerativeModel("gemini-3-pro-preview")
chat = model.start_chat()

# Upload image
image = genai.upload_file("product.jpg")

# Ask questions about it
response1 = chat.send_message(["What product is this?", image])
response2 = chat.send_message("What are its main features?")
response3 = chat.send_message("What's the price range for similar products?")
文档分析管道

处理多个 PDF 并提取见解:

import google.generativeai as genai
from pathlib import Path

genai.configure(api_key="YOUR_API_KEY")

model = genai.GenerativeModel(
    "gemini-3-pro-preview",
    generation_config={"media_resolution": "medium"}
)

# Process all PDFs in directory
pdf_dir = Path("documents/")
results = {}

for pdf_path in pdf_dir.glob("*.pdf"):
    pdf_file = genai.upload_file(pdf_path)

    # Wait for processing
    while pdf_file.state.name == "PROCESSING":
        time.sleep(5)
        pdf_file = genai.get_file(pdf_file.name)

    # Extract key information
    response = model.generate_content([
        "Extract: 1) Document type, 2) Key dates, 3) Important numbers, 4) Summary",
        pdf_file
    ])

    results[pdf_path.name] = response.text

    # Clean up
    genai.delete_file(pdf_file.name)

# Save results
import json
with open("analysis_results.json", "w") as f:
    json.dump(results, f, indent=2)
视频内容审核

分析视频中的特定内容:

video = genai.upload_file("user_upload.mp4")

# Wait for processing
while video.state.name == "PROCESSING":
    time.sleep(10)
    video = genai.get_file(video.name)

response = model.generate_content([
    """Analyze this video for:
    1. Inappropriate content (yes/no)
    2. Violence or harmful content (yes/no)
    3. Overall content rating (G/PG/PG-13/R)
    4. Brief justification

    Provide structured response.
    """,
    video
])

print(response.text)

故障排除

问题:文件处理卡在“PROCESSING”状态

解决方案: 大文件(尤其是视频)可能需要一些时间。检查之间请等待 30-60 秒。如果卡住超过 5 分钟,文件可能处理失败。

问题:OCR 结果质量较差

解决方案: 对包含文本的图像使用 media_resolution: "high"。确保图像清晰且分辨率较高。

问题:令牌成本过高

解决方案: 使用合适的媒体分辨率。先从 low 开始,仅在需要时提高。对于 PDF,通常使用 medium 就足够了。

问题:视频分析遗漏细节

解决方案: 使用 media_resolution: "high" 改进帧分析,或更具体地说明要查找的内容。

问题:音频转录不准确

解决方案: 确保音频质量良好(没有过多的背景噪声)。在提示词中提供口音、语言或领域方面的上下文。


总结

此技能提供全面的多模态输入处理能力:

✅ 图像分析,支持 OCR 和物体检测 ✅ 视频处理,最长支持 1 小时 ✅ 音频转录,最长支持 9.5 小时 ✅ 原生 PDF 文档处理 ✅ 精细的媒体分辨率控制 ✅ 令牌优化策略 ✅ 多文件处理 ✅ 可用于生产环境的示例

准备好分析多模态内容了吗? 从上方选择与你的用例匹配的任务开始!

评论

支持 Markdown