说实话,我见过太多把“无人货架”当噱头拍的 PR 稿了。打开某社交平台,每篇都在谈新零售,新零售,消费者体验。可我跟你说,真正把无人货架拆开,里面全是代码的废墟和传感器的墓地——好玩得让人上瘾。
一、视觉识别不是拍照,是三维空间的“刑侦现场”
大多数人以为,无人货架就是摄像头拍个照,然后识别人脸,扣钱。呵呵,人脸识别只是入场券。真正的大头,是“谁在什么时候,拿了哪一件商品”——这在 CV 领域叫“动作识别 + 商品细粒度检索”。
我举一个类比。你的眼睛看货架,看到的是一堆商品。但货架上的算法,得先做“目标检测”:把商品从一个混乱的盒子里抠出来。这一步,我用的是 YOLOv8,标准的光栅。但光有目标框没用,你得知道这个框里装的是啥。所以每件商品在训练时被塞进一个对比学习框架,变成一个 128 维的 embedding——你可以当作是每个商品的“DNA序列”。同一商品从不同角度拍出来,DNA 应该高度相似;不同商品,DNA 距离必须拉大。
这还不算完。货架有三四层,摄像头在顶上,你伸手进去,必然会有遮挡。所以你得用两个摄像头——一个俯视全局,一个仰视内层。然后用一个简单的 transformer 做时序特征融合,把手从“背景噪音”里剥离出来。这过程特别耗算力,我见过不少团队直接跑不动,最后只能用台破电脑跑几帧。

二、用数据拆穿神话:准确率与延迟的较量
说一个我们压测的真实数据。在某仓储试点,我们将同一批货架装上重力感应和视觉识别两套系统,做了 5000 次购买动作。结果呢?
视觉识别方案,单件拿取准确率 99.2%,两件同时拿取降到 96.8%。重力感应呢?单件 91.4%,两件同时拿取——直接稀烂,只有 78.9%。因为它测量的是货架盘的重量变化,两件商品重量相近时,系统根本分不清是谁。
再看延迟。视觉识别平均结算延迟 210ms,包括检测、特征提取、交易入账。重力感应得等重量稳定,平均 1.8 秒。这 1.8 秒的等待,在人潮涌动的写字楼里,就是灾难。你可能觉得差 1 秒没什么,但压测时我们模拟 10 个人同时拿取商品,视觉方案有 3.4% 的请求超时,重力感应直接 23% 失败。
还有个不可忽略的点,货损率。RFID 方案理论上能做到 0.9% 的损耗率,但每个标签 0.2 元的成本,对一个 1000 点位规模的品牌来说,就是每年 20 万的额外支出,而且标签还会脱落。视觉方案虽然损耗率是 1.8%,但没有耗材,模型越跑越准。

三、落地当心!这三个坑能让你血本无归

坑一:摄像头装在顶层,下层货架被自己的手臂挡得严严实实。 我们第一次测试,识别率只有 74%——跟瞎了没区别。后来,我们给每个货架装了两个摄像头:一个 70° 俯角负责全局,一个 30° 仰角负责下层。并且,算法上得额外加一层手部关键点检测,把“手”当路障来实时避让,也就是说,当手伸进去时,后端的特征提取自动切换到未被遮挡的摄像头。别觉得这很土,这是血的教训。
坑二:商品包装更新一次,模型就变成智障。 现实里雀巢咖啡隔三个月换包装,模型没见过,于是所有拿起动作都无法识别。老板只问“为什么不扣钱”。解决方案?我们搭了一个“回放仓库”——每次识别失败的图像,自动掉入队列,人工标注后增量微调模型。一周内,模型对新包装的识别率从 32% 爬升到 91%。记住,别指望一次训练永久有效。
坑三:有个人拿了两罐可乐,放回一罐,再拿一罐,最后只付一罐的钱。 这种“混合行为”根本不是目标检测能解决的,你得识别整个动作序列。我们用的是 LSTM 加一个行为约束层,把拿起、放回、抓起、抛掷等都嵌入到向量里。然后设定一个奇怪规则:当动作序列中出现“拿起-放回-再拿起”间隔小于 2 秒时,系统强制判定为一次交易。虽然会有误杀,但总比漏单强。
这三个坑,每条都是钱买出来的经验。希望你别走。
嗯,其实无人货架这个东西,说难也难,说简单也简单。只要你不把技术当作炫技,而是老老实实解决每一个“手挡住”的问题,它就能为你赚钱。