在 Demo1 阶段,系统已经具备了基础的端侧能力:实时检测、方位判断、语音播报以及深度流接入。
但在真实辅助场景中,仅依靠目标检测并不足够。很多信息无法通过检测框表达,例如:
- 标识牌上的文字
- 场景整体结构
- 环境中的复杂物体关系
- 用户主动寻找的特定物品
因此在 Demo2 阶段,系统开始引入 云端视觉理解能力。
今天完成的工作,主要围绕一条新的端到端链路展开:
拍照 → 上传图片 → URL 识图 → 流式返回结果 → 语音播报
这使系统从“检测物体”逐步扩展为 理解环境信息的辅助工具。
一、Demo2 的系统目标
在 Demo2 阶段,系统开始引入云端视觉模型能力,用于补充端侧检测无法提供的信息。
当前阶段的核心能力包括:
- 拍照后自动上传图片到对象存储
- 使用预签名 URL 调用视觉模型识图
- 支持“简洁识图 / 详细识图”两种模式
- 支持语音触发的场景分析
- 支持语音触发的“寻找物品”任务
- 结果流式返回并自动语音播报
整体链路已经形成完整闭环。
二、端到端识图链路
当前系统的识图流程如下:
拍照
↓
上传图片到对象存储
↓
获取预签名 URL
↓
调用视觉模型识图
↓
流式返回分析结果
↓
语音播报
与传统做法不同的是:
系统 不直接上传图片给模型接口,而是先上传到对象存储,再通过 URL 访问。
这样做有两个优势:
- 同一张图片可以复用 URL,多次识图
- 模型请求体更小,接口更加稳定
三、拍照后立即上传(链路解耦)
在 Demo2 中,图片上传被提前到了拍照阶段。
拍照函数内部流程为:
- 相机捕获
UIImage - 压缩图片
- 上传到对象存储
- 保存返回的 URL
关键逻辑位于:
capturePhoto(...)
上传成功后,系统会保存:
uploadedImageURLuploadedImageUploadedAt
后续识图请求可以直接复用该 URL。
这样可以避免:
每次识图都重新上传图片。
四、简洁识图 / 详细识图
用户可以手动选择两种识图模式:
- 简洁识图:快速概括图片信息
- 详细识图:更完整的视觉描述
为了减少请求次数,当前实现采用 一次请求返回两种结果 的策略。
模型返回 JSON:
{
"simple": "...",
"detailed": "..."
}
系统会分别缓存:
cachedManualSimpleResult
cachedManualDetailedResult
如果用户再次点击相同模式,将直接读取缓存,而不会重新调用模型。
五、语音触发任务
Demo2 中增加了两种语音任务。
1 场景分析
用户可以触发:
“当前环境是什么?”
系统会返回:
- 场景类型
- 主要物体
- 大致方位
例如:
Indoor scene, desk in front, laptop and cups on the table.
输出限制为 1–2 句英文描述,避免语音过长。
2 寻找物品
用户也可以询问:
“Where is the chair?”
模型会返回结构化 JSON:
{
"found": true,
"direction": "left",
"distance_level": "near",
"passability": "clear",
"description": "...",
"guidance": "...",
"narration": "..."
}
系统解析后可以生成更自然的语音提示。
这种结构化输出为未来导航能力提供了基础。
六、图片上传策略
为了保证网络效率,图片在上传前会进行压缩。
当前策略:
- 最大边:1280
- 目标大小:≤ 500KB
- 多级压缩策略
如果图片仍然过大,系统会执行最终压缩。
这样可以保证:
- 上传时间可控
- 模型推理输入稳定
七、预签名 URL 机制
对象存储通过 预签名 URL 提供图片访问。
签名算法:
TOS4-HMAC-SHA256
流程包括:
- 生成 PUT URL(用于上传图片)
- 生成 GET URL(供视觉模型访问)
关键参数包括:
X-Tos-AlgorithmX-Tos-CredentialX-Tos-DateX-Tos-Expires
URL 默认有效期为:
60 秒
如果 URL 即将过期,系统会自动重新上传图片。
八、视觉模型调用
当前视觉识图调用使用云端视觉模型接口:
POST /api/v3/chat/completions
请求结构为:
{
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "<prompt>" },
{
"type": "image_url",
"image_url": {
"url": "<presigned_image_url>"
}
}
]
}
]
}
关键参数包括:
temperature: 0.2
stream: true
thinking: disabled
关闭 thinking 可以显著减少响应延迟。
九、Token 限制策略
不同任务使用不同的 token 上限:
| 任务 | max_output_tokens |
|---|---|
| 简洁 + 详细识图 | 220 |
| 简洁识图 | 64 |
| 详细识图 | 128 |
| 场景分析 | 96 |
| 寻找物品 | 120 |
这样可以在保证信息完整的同时控制响应时间。
十、当前性能状态
当前链路中已经完成的优化包括:
- 拍照后立即上传
- URL 复用
- 图片压缩到 500KB 内
- 按任务限制输出 token
- 关闭模型 thinking
在实际测试中,主要耗时仍然来自:
上传完成到模型返回首 token 之间的推理等待。
这也是后续需要继续优化的部分。
十一、安全注意事项
当前 Demo 为了简化实现,客户端直接配置了对象存储和模型服务的访问凭证。
在实际产品中,应避免在客户端存储长期密钥,建议采用:
- 服务端签发临时上传凭证
- 或通过后端代理生成预签名 URL
这样可以避免密钥泄露带来的安全风险。
结语
如果说 Demo1 解决的是:
如何稳定地检测环境中的物体。
那么 Demo2 开始尝试解决的是:
如何理解环境本身。
通过引入云端视觉模型,系统不再只依赖检测框,而是能够:
- 识别文本信息
- 分析场景结构
- 响应用户提问
这使辅助系统逐渐从“视觉工具”向“环境理解助手”演进。
下一阶段的重点将放在:
- 响应延迟优化
- 语音交互流程优化
- 结构化结果与导航能力结合
Demo2 的目标,是让系统开始具备真正的 视觉理解能力。