109 lines
3.3 KiB
Markdown
109 lines
3.3 KiB
Markdown
---
|
||
tags: [AI, 视觉, 多模态, 计算机视觉, 帧采样, GPT-4V]
|
||
create time: 2026-06-12 11:13
|
||
---
|
||
|
||
# 视觉理解
|
||
|
||
## 概述
|
||
|
||
让 AI "看见"摄像头画面并理解其内容,是视觉对话助手的基础能力。本节探讨从摄像头视频流到 AI 语义理解之间的技术链路,重点关注**帧采样策略**、**图像编码方式**以及**多模态大模型的视觉输入机制**。
|
||
|
||
## 正文
|
||
|
||
### 整体流程
|
||
|
||
```mermaid
|
||
graph LR
|
||
A["摄像头视频流"] --> B["帧采样"]
|
||
B --> C["图像编码"]
|
||
C --> D["多模态 LLM"]
|
||
D --> E["语义理解结果"]
|
||
```
|
||
|
||
摄像头每秒产生 30 帧原始画面,全部送入 LLM 既不现实也不经济。因此,**帧采样**是第一个需要解决的问题。
|
||
|
||
### 帧采样策略
|
||
|
||
> [!question] 思考
|
||
> 如果每秒都向 LLM 发送一帧,1 分钟对话就是 60 张图。考虑到 API 调用的延迟和成本,这个频率是否合理?
|
||
|
||
常见的采样策略对比:
|
||
|
||
| 策略 | 原理 | 适用场景 |
|
||
|------|------|---------|
|
||
| **固定间隔采样** | 每 N 秒取一帧 | 画面变化缓慢的场景 |
|
||
| **关键帧检测** | 对比相邻帧差异,变化超阈值时触发 | 画面动态变化较多 |
|
||
| **事件驱动采样** | 用户主动触发(如拍照按钮) | 精确提问场景 |
|
||
| **混合策略** | 低频定时 + 高频事件触发 | 通用推荐方案 |
|
||
|
||
关键帧检测的核心逻辑:
|
||
|
||
```python
|
||
import numpy as np
|
||
|
||
def is_keyframe(prev_frame, curr_frame, threshold=30):
|
||
"""通过帧间像素差异判断是否为关键帧"""
|
||
diff = np.mean(np.abs(prev_frame.astype(int) - curr_frame.astype(int)))
|
||
return diff > threshold
|
||
```
|
||
|
||
> [!tip] 实用建议
|
||
> 实际开发中,可以先降低分辨率(如 320x240)做关键帧检测,再对命中帧保留原始分辨率送入 LLM,兼顾速度与精度。
|
||
|
||
### 图像编码与多模态输入
|
||
|
||
当前主流多模态 LLM(如 GPT-4o、Claude)接受图片的方式有两种:
|
||
|
||
```mermaid
|
||
graph TD
|
||
A["原始图像"] --> B{"编码方式"}
|
||
B --> C["Base64 内联"]
|
||
B --> D["URL 引用"]
|
||
C --> E["适合本地/实时场景"]
|
||
D --> F["适合已有图床的场景"]
|
||
```
|
||
|
||
实际调用示例(OpenAI 兼容接口):
|
||
|
||
```typescript
|
||
const response = await openai.chat.completions.create({
|
||
model: "gpt-4o",
|
||
messages: [
|
||
{
|
||
role: "user",
|
||
content: [
|
||
{ type: "text", text: "请描述画面中的内容" },
|
||
{
|
||
type: "image_url",
|
||
image_url: {
|
||
url: `data:image/jpeg;base64,${base64Image}`,
|
||
detail: "low" // "low" | "high" | "auto"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
]
|
||
});
|
||
```
|
||
|
||
> [!info] detail 参数的影响
|
||
> - `low`:模型使用 65x65 的缩略图,token 消耗少(约 85 tokens),适合快速识别
|
||
> - `high`:按 512px 方块切分,细节丰富但 token 数激增
|
||
> - 对于实时对话场景,建议默认 `low`,仅在用户明确追问细节时切换 `high`
|
||
|
||
### 视觉理解的局限性
|
||
|
||
多模态 LLM 并非万能,以下场景需要额外注意:
|
||
|
||
- **运动模糊**:快速移动的物体在低帧率下容易模糊
|
||
- **光线变化**:逆光、暗光环境下识别率显著下降
|
||
- **细小文字**:低分辨率下 OCR 能力受限
|
||
- **空间推理**:精确的距离、尺寸判断仍是短板
|
||
|
||
## 关联笔记
|
||
|
||
- [[语音交互]]
|
||
- [[成本控制]]
|
||
- [[用户故事]]
|