AI视觉搜索助手:与视障者共创的移动端物体识别与定位方案
1. 项目概述:当AI遇见视障者的真实世界
“我的东西在哪儿?”——这可能是我们每个人每天都会问上几遍的问题。但对于视障或低视力群体而言,这个简单的问题背后,是一个持续存在的、关乎独立与尊严的日常挑战。钥匙滑落到沙发缝里、遥控器被随手放在某个角落、一瓶急需的药片在杂乱的桌面上“消失”……这些对明眼人来说可能只是几秒钟的扫视,对视障朋友却可能意味着长时间的摸索、焦虑,甚至需要依赖他人。
这个项目的核心,正是直面这个最具体、最频繁的痛点。它并非一个自上而下的、由工程师在实验室里构想的“解决方案”,而是一场从起点就彻底反转的协作:让视障与低视力群体,从被动的“用户”或“测试者”,转变为AI技术开发过程中平等的“需求定义者”、“数据贡献者”与“核心评估者”。我们不是在为他们开发工具,而是与他们一起,为“我们自己”开发工具。这里的“我们”,指的是一个包含了技术开发者和最终使用者的共同体。
传统的辅助技术开发,常常陷入“我们觉得你需要什么”的思维定式。而“Where‘s my stuff?”项目从一开始就确立了不同的哲学:只有视障者自己,才最清楚在寻找物品时,哪些信息是关键的(是“药瓶”还是“那个棕色的、圆柱形的、盖子有点松的瓶子”?),哪些交互是自然的(是语音指令“寻找钥匙”还是用手机摄像头像手电筒一样扫过桌面?),以及哪些误报是无法容忍的(把一本书错认为钱包,可能会带来严重后果)。这个项目的目标,是孵化一个真正可用的、基于智能手机摄像头的AI视觉搜索助手,其每一个功能细节,都深深烙上了来自视障社区的集体智慧与真实生活经验。
2. 核心设计思路:从“为谁设计”到“与谁共创”
这个项目的成功,首先源于其根本性的设计思路转变。它跳出了“无障碍设计”常被简化为“事后适配”的陷阱,将包容性前置到了产品定义和算法训练的源头。
2.1 以用户故事驱动需求挖掘,而非功能清单
项目启动时,我们没有撰写传统的产品需求文档,而是组织了多次深度工作坊,邀请来自不同生活背景、视力状况各异的参与者,分享他们“找东西”的具体故事。这些故事极其生动且富有细节:
- 场景的复杂性:一位参与者提到,在厨房里寻找一个特定的调料罐时,她不仅需要知道罐子在哪,还需要知道它周围有没有易碎的物品(如玻璃杯),以免在摸索时碰倒。
- 描述的独特性:另一位参与者描述他的钱包不是简单的“黑色长方形”,而是“边缘已经磨损、扣子有点难按的那个”。
- 失败的代价:有参与者强调,把孩子的哮喘吸入器误识别为普通喷剂,是完全不可接受的风险。
这些故事无法被简单地翻译成“物体检测准确率需大于95%”这样的技术指标。它们共同指向了一些更深层的需求:AI不仅要知道“是什么”和“在哪里”,还需要理解物体的状态(是否打开?是否满?)、关系(是否在危险位置?是否被其他东西半遮挡?)以及对用户的唯一性标识。这直接影响了我们后续数据标注的维度和模型训练的目标设计。
2.2 视障者作为“数据质检官”与“场景架构师”
在计算机视觉项目中,数据标注通常由外包团队完成,他们按照统一的规范(如 bounding box, segmentation)进行标注。但在本项目里,我们邀请视障参与者直接参与数据标注的审核与标准制定。
- 重新定义“标注”:对于明眼标注员,一个水杯的标注可能就是框出它的位置。但视障审核员会提出:“这个杯子把手朝左还是朝右?这对于我伸手去拿的路径规划至关重要。” 或者:“标注时应该区分‘杯子里有水’和‘杯子是空的’,因为重量不同,我拿取的方式会不一样。” 这些来自真实使用场景的洞察,迫使我们将标注体系从单纯的“识别”升级为“描述性识别”。
- 构建真实负样本:AI容易混淆形状相似的物体。视障参与者帮助我们构建了极具挑战性的“负样本”数据集:比如,将电视遥控器与一部老式手机放在一起;将一瓶眼药水和一瓶小容量胶水并列。他们凭触感告诉我们哪些东西最容易拿错,我们则用这些组合来“为难”和“训练”AI模型,极大地提升了模型在细微处的辨别力。
2.3 交互设计:从“视觉界面”到“听觉与触觉叙事”
UI/UX设计完全摒弃了“如何把视觉信息缩小或读屏”的思维,而是从头思考:如何用声音和振动,构建一个空间的“心智地图”。
- 空间音频引导:我们利用手机的立体声扬声器或连接蓝牙耳机,实现声音的空间化。当AI识别到目标物体后,会生成一个持续的、音调或节奏特定的声音信标。用户左右转动手机,这个声音信标会在立体声场中左右移动,像雷达一样,引导用户将手机摄像头对准物体方向。当摄像头完全对准时,声音会变为稳定的提示音。
- 距离与细节的触觉编码:通过手机振动模拟“接近感”。物体越远,振动间隔越长、强度越弱;随着摄像头靠近,振动频率加快、强度增加,在即将触及时变为持续微振。同时,不同的振动模式可以编码简单属性:例如,短促双振代表“小物件”,长振代表“大物件”;一种模式代表“塑料”,另一种代表“玻璃”。
- 分级语音描述策略:我们与参与者共同设计了一套语音反馈层级:
- 确认级:“已找到你的钥匙。”
- 方位级:“在你的左前方,大约两米外,桌面上。”
- 细节级:“是一串带有红色皮质钥匙扣的钥匙,旁边有一个白色的咖啡杯,请注意。”
- 警告级:“钥匙在沙发边缘,一半悬空,请小心拿取。” 用户可以通过简单的手势(如双击屏幕)或语音命令(“多说点细节”)在不同层级间切换,避免信息过载。
注意:声音和触觉的设计必须高度可定制化。有些用户高频听力损失,有些对特定频率敏感。我们内置了丰富的参数调整选项,让用户能像配眼镜一样,调配出最适合自己的“感官反馈处方”。
3. 核心技术实现:构建“描述性视觉”AI管道
要实现上述交互,背后的技术栈需要解决三个核心问题:在复杂、非结构化家居环境中实现鲁棒的物体检测;生成超越类别名称的、有用的描述性信息;在资源受限的移动设备上实时运行。
3.1 数据收集与标注:共建“真实世界”数据集
我们开发了一款简易的数据收集App,分发给参与项目的视障志愿者。他们在家中日常场景中,主动拍摄自己经常寻找的物品,并录制一段语音描述。这个过程本身就极具价值:
- 数据真实性:所有图片都是在真实的居家光照(过曝的窗边、昏暗的角落)、杂乱背景和典型遮挡下拍摄的,与实验室干净、规整的数据集天壤之别。
- 描述多样性:同一件物品,不同人的描述重点不同。一个水杯,可能被描述为“我的蓝色马克杯”、“把手有裂纹的杯子”、“那个很重的保温杯”。这些自然语言描述成为了我们训练多模态模型(连接视觉与语言)的宝贵语料。
- 标注结构:我们建立了分层的标注协议:
- L1-基础框:物体位置。
- L2-属性:颜色、材质、形状、尺寸(相对)、状态(开/关,满/空)。
- L3-关系:相对于另一个显著物体的位置(“在笔记本电脑右边”)。
- L4-风险提示:是否易碎、易倒、易滑落、装有液体。
3.2 模型选型与优化:在精度与速度间寻找平衡
考虑到在手机端实时运行,我们放弃了庞大耗电的通用检测模型(如Faster R-CNN, YOLO的巨型版本),选择了轻量级架构作为起点。
- 主干网络:采用MobileNetV3或EfficientNet-Lite。它们在精度和计算量之间取得了很好的平衡,并且针对移动设备CPU/GPU有深度优化。
- 检测头:选择了SSD (Single Shot MultiBox Detector)的变种。因为它结构相对简单,在保持一定精度的前提下,速度优于两阶段检测器。我们对其进行了修改,使其能同时输出检测框和我们在L2层定义的属性分类。
- 描述生成:这是一个创新点。我们没有采用标准的图像描述生成模型(通常生成一句完整句子),而是训练了一个多任务学习模型。其中一个分支做物体检测,另一个分支是一个轻量级的Transformer 编码器,它接收检测到的物体区域特征,并生成一组属性标签(颜色、材质等)和关系短语。这些离散的标签和短语再由一个规则引擎或一个极小的文本生成模型,组合成符合我们设计层级的自然语言句子。这种方式比端到端的描述生成模型更可控、更高效。
- 模型蒸馏与量化:
- 知识蒸馏:我们先用大规模数据集训练一个强大的“教师模型”(如ResNet-50为骨干的检测模型),然后用它来指导我们轻量级的“学生模型”(MobileNetV3-SSD)训练,将教师模型学到的“知识”迁移给学生,提升小模型的精度。
- 量化:将模型权重从32位浮点数(FP32)转换为8位整数(INT8)。这能大幅减少模型体积和内存占用,提升推理速度,对精度影响在可接受范围内(通过量化感知训练来缓解)。最终模型被转换为TFLite格式,以便在Android/iOS上高效部署。
# 简化的模型结构示意代码(基于PyTorch风格) import torch import torch.nn as nn import torchvision.models as models class DescriptiveObjectDetector(nn.Module): def __init__(self, num_classes, num_attributes): super().__init__() # 轻量级主干网络 self.backbone = models.mobilenet_v3_small(pretrained=True).features # 检测头(SSD风格) self.detection_head = DetectionHead(...) # 属性与关系编码器(轻量Transformer) self.attribute_encoder = nn.TransformerEncoderLayer(d_model=256, nhead=8) self.attr_classifier = nn.Linear(256, num_attributes) self.relation_predictor = nn.Linear(256, relation_vocab_size) def forward(self, x): features = self.backbone(x) bboxes, class_scores = self.detection_head(features) # 对每个检测到的区域,提取特征并编码属性 roi_features = extract_roi_features(features, bboxes) attr_embeddings = self.attribute_encoder(roi_features) attribute_scores = self.attr_classifier(attr_embeddings) relation_scores = self.relation_predictor(attr_embeddings) return bboxes, class_scores, attribute_scores, relation_scores3.3 实时搜索管道与空间感知
App的实时搜索流程是一个精心设计的管道:
- 启动与预处理:用户点击搜索按钮或发出语音指令后,摄像头以较低分辨率(如720p)开启,在保证识别精度的前提下节省算力。
- 连续帧推理:模型对视频流进行连续推理(例如每秒5-10帧)。为了平滑结果并减少闪烁,我们采用了一个简单的轨迹管理算法,将前后帧中位置、类别相似的检测框关联起来,形成一个稳定的“物体轨迹”。
- 目标匹配:用户说出物品名称(如“我的红色杯子”)。系统首先进行语音识别,然后并非简单匹配物体类别标签。它会将语音描述中的关键词(“红色”、“杯子”)与模型输出的类别概率和属性概率进行综合匹配打分。例如,一个被识别为“杯子”且颜色属性为“红色”置信度很高的物体,会获得最高分。
- 空间音频与触觉生成:
- 方位计算:一旦匹配到目标,系统根据物体在图像中的2D像素位置,结合手机陀螺仪和加速度计数据,估算物体相对于手机的大致3D方向。
- 音频渲染:使用HRTF (头部相关传输函数)算法,生成一个似乎来自该方向的空间化白噪声或纯音信标,通过耳机播放。
- 触觉生成:根据物体框的大小(估算距离)和稳定性(轨迹置信度),驱动手机的马达产生对应模式的振动。
4. 开发过程中的挑战与应对策略
与视障社区共研的过程,也是不断遇到和解决问题的过程。
4.1 技术挑战:当“准确”不等于“有用”
- 挑战:初期模型的mAP(平均精度)指标很高,但在用户测试中满意度却不高。原因是模型对“桌子”这种大物体检测很准,但用户更关心的是桌上的“钥匙”、“药瓶”这些小物件,而这些小物件恰恰容易漏检或误检。
- 应对:我们调整了训练数据的权重,大幅增加小物体样本的比例。同时,修改了损失函数,给予小物体的定位和分类错误更高的惩罚。评估指标也从单纯的mAP,变为更贴近用户体验的“关键物品召回率”——即用户最常寻找的数十类物品的检出成功率。
4.2 交互挑战:避免“感官冲突”与信息过载
- 挑战:早期版本中,空间音频、语音播报和触觉反馈有时会同时发生,导致用户感到混乱,特别是对于有听力障碍或触觉敏感的用户。
- 应对:我们引入了“反馈通道管理”机制。用户可以在设置中选择主导反馈模式(如“以声音为主,触觉为辅”或“仅触觉”)。系统内部设立了一个优先级队列:方位引导(音频/触觉)优先,确认信息其次,细节信息需要用户主动请求才播报。所有语音播报都被设计为可随时被用户语音打断(“停”)。
4.3 协作挑战:建立有效的沟通桥梁
- 挑战:技术人员习惯用专业术语(“召回率”、“延迟”),而视障参与者用体验语言(“感觉慢半拍”、“声音有点吵”)。如何准确翻译?
- 应对:我们引入了“体验度量表”和“问题共译”环节。例如,将“感觉慢半拍”拆解为:从发出指令到第一次听到反馈的时间(系统延迟),以及物体移动后反馈更新的速度(跟踪延迟)。我们共同定义了一些关键体验指标,并建立了快速原型测试循环,确保每次迭代都能直接回应用户反馈。
5. 实测反馈与迭代方向
经过数轮与核心用户群的封闭测试,我们获得了宝贵的反馈,也明确了未来的迭代方向。
5.1 来自用户的“神奇时刻”与“吐槽”
- 正向反馈:
- “第一次自己找到掉在床底下的药瓶,那种感觉难以形容,不只是方便,更是一种掌控感。”
- “我喜欢‘细节级’描述,它告诉我杯子旁边有本书,让我在伸手时更放心。”
- “振动提示比我想象的直观,在嘈杂的厨房里,它比声音更可靠。”
- 主要批评与建议:
- 光线依赖:“在完全黑暗的房间里还是没用。” —— 这促使我们探索与手机闪光灯或外接红外辅助照明设备的协同。
- 物品数据库局限:“它不认识我奶奶留下的那个特别的陶瓷罐。” —— 我们正在开发“自定义物品教学”功能:用户可以将一个新物品放在摄像头前,从不同角度拍摄,并亲自为其命名和描述属性,系统将在本地建立一个小型个性化模型。
- 多物品场景:“当我说‘手机’时,如果我和我妻子的手机都在房间里,它该如何处理?” —— 我们计划引入更精细的个性化描述(“黑色手机,带有蓝色透明手机壳”)和对话式澄清(“找到两个手机,一个是黑色的,一个是金色的,你要找哪一个?”)。
5.2 隐私与安全的绝对优先考虑
所有图像处理均在设备端(On-Device)完成,无需上传云端。用户的自定义物品数据也完全存储在本地。这是与视障社区讨论后做出的基本原则性决定,因为家庭内部影像是高度隐私的。我们甚至在App中设计了“隐私区域”功能,用户可以框选摄像头画面中的某些区域(如床头、书桌),系统将自动忽略这些区域内的物体检测。
5.3 未来展望:从“寻找”到“感知环境”
项目的长期愿景不止于找东西。通过与视障伙伴的持续对话,我们看到了更广阔的可能性:这个“描述性视觉”管道,可以演变成一个更通用的“环境感知助手”。
- 导航辅助:不仅识别物体,还能描述空间布局。“门口有一把椅子,建议你从左边绕行。”
- 信息获取:读取家电控制面板的状态、识别药品标签上的有效期(需与OCR结合)、告知食品包装的颜色以区分口味。
- 社交提示:在获得对方明确同意且符合伦理规范的前提下,识别熟人的大致方位和简单动作(“小王在你右前方,正向你挥手”)。
这个项目的真正价值,在于它验证了一条路径:最前沿的AI技术,与最深刻的人类需求相结合,其催化剂是真正平等、深入的共研。它产出的不仅是一个工具,更是一套方法论——一套如何让技术发展摆脱“技术本位”,真正扎根于人的生活,服务于人的尊严的方法论。开发日志里记录的不只是代码的提交,更是无数个“啊哈!”时刻和“原来如此!”的顿悟,这些瞬间,连接了两个不同的世界,并让它们共同变得更好。
