今年年初,义乌一家做跨境出口的仓库找到我们。老板在电话里说了一句话让我印象挺深——"双十一那阵子,分拣区地上堆的货能没过人膝盖,工人得在货堆里翻包裹。"

这家仓库大概2000平,日均处理5000-6000个包裹,旺季能冲到1万以上。包裹从上游供应链过来后,要先经过收货登记、分拣到各渠道(美国站、欧洲站、东南亚站等)、最后装车发货。其中分拣环节是最卡的——全靠人工拿着扫码枪,一个一个扫面单上的条码,然后放到对应的筐里。

人工分拣的问题很明显:速度上不去(熟练工一分钟也就扫20个左右),容易出错(条码残损扫不出、相近地址放错筐),而且旺季加人也不好使——新手上手至少两周才能达到正常速度。老板试过加传送带、改工位布局,但人眼+人手这个核心瓶颈没解决。

一、现场摸底:问题比表面看到的更多

去仓库实地看了两天,发现了几个关键瓶颈:

这些条件拼在一起,结论很明确:要找一个灵活、成本可控、不需要大改场地的方案,核心是用视觉代替人眼来识别包裹上的信息。

二、方案设计:AI视觉识别+边缘计算+重力滑道

最终确定的方案分四层:

视觉识别层

在传送带上方安装1台500万像素工业相机(全局快门,帧率30fps),俯拍经过的包裹。相机触发方式用的是光电传感器——包裹经过时自动拍照,不需要人工操作。

拍到的图片传到边缘AI网关,跑一个轻量级的OCR识别模型。模型不做全图扫描,而是先用目标检测模型定位面单区域(因为部分包裹有多张贴纸、标签),再在面单区域做文字识别提取单号。

模型选型上做过对比测试:

分拣执行层

分拣执行部分,我们没有用昂贵的机械臂或交叉带分拣机,而是设计了一套重力滑道+气动推杆的方案:

这套方案的好处是便宜——一套气动推杆加滑道,成本不到大型分拣机的十分之一。坏处是滑道数量有限,渠道多了得做二次分拣。

边缘计算层

在分拣线旁边部署了一台边缘AI网关,负责:

之所以全跑在边缘端而不是云端,主要原因是分拣线要求实时响应——相机拍到包裹到推杆动作,整个周期不能超过500ms。云方案考虑过,去掉网络延迟至少1-2秒,来不及。而且仓库网络本来就不太稳定。

看板管理层

一个简易的Web看板展示:

看板挂在分拣区墙上的电视屏幕上,工位旁边也有一个平板可以看。老板手机上也能看到汇总数据。

三、实施过程:三个月的迭代

第一周:相机安装和测试

相机安装本身不复杂——用支架固定在传送带正上方,调整高度和角度保证视野覆盖整个传送带宽度。麻烦的是打光。

仓库的顶灯是日光灯,照度不均匀,而且不同时段自然光进来后光强变化很大。相机拍出来的图要么过曝要么偏暗,识别率受影响。

解决方案是加了两个可调亮度的LED条形灯,装在相机两侧45度角的位置,和传送带运行方向平行。调了大概两个多小时,找到一个亮度和角度组合让面单区域的对比度比较理想。

另外排除了一个坑——传送带本身是深绿色的,和部分快递袋颜色接近,导致检测模型有时候找不到包裹边界。后来在传送带背面贴了一条白色PVC胶带做背景分割参考线。

第二至三周:模型训练和调优

模型方面,看起来是标准流程,实际踩了不少坑:

第一个坑:面单型号太多。跨境包裹上的面单各式各样——有国内快递单、国际转运单、平台面单(亚马逊FBA、Shopee)、邮政小包面单……每种面单的布局、字体、码制都不一样。通用OCR模型有些能识别,有些不行。

解决方案是收集了约2000张面单图片做微调。分类标注了不同的面单类型,对识别率低的类型单独增加训练样本。这个过程比较耗人力,但效果确实明显——标准面单识别率从87%提到接近97%。

第二个坑:条码和文字的混搭。很多面单上既有文字运单号,又有条形码。有些场景下条码模糊扫不出,需要用文字识别做补充。但文字和条码在一个区域里会互相干扰。

最后走了双通道识别:先检测条码区域,如果可以解码就直接用条码结果(更快更准);如果条码解码失败,再用OCR读文字。这个方案比纯OCR快了约30%。

第三个坑:包裹表面不平整。气泡袋和PE袋上的面单经常有褶皱和反光,拍出来的图有局部模糊。试过几种去反光的偏振片,效果一般而且降低了进光量。后来干脆在预处理环节加了自适应直方图均衡化,虽然增加了几毫秒处理时间,但褶皱区域的文字识别率提升了不少。

教训:工业视觉项目里,图像采集质量比模型算法重要得多。光线和姿态调好了,YOLOv3也能干活;光线不行,ResNet来了也没用。

第四周:联调和试运行

联调阶段最头疼的问题出在气动推杆上。

我们的设计逻辑是:相机拍到包裹→识别出渠道→包裹移动到对应滑道→推杆推出。但传送带速度不是恒定的——有时候工人会手动调速。速度变了,包裹从相机位置到推杆位置的到达时间就变了,推杆要么推早了(推到两个滑道中间),要么推晚了(推到下一个滑道的位置)。

试了两种方案:

最后选的是折中的办法——在推杆前方再装一个光电传感器,包裹经过时触发推杆动作。这样不需要知道传送带速度,只要包裹到了位置就推。可靠性高了不少,但牺牲了一点节拍(包裹必须走得近一些才能触发,限制了连续分拣的间距)。

四、实际效果

系统上线跑了一个半月后,我们对比了数据:

分拣效率:提升明显
人工扫码分拣稳定在700-800件/小时(需要换班休息),AI视觉分拣线稳定在1500-1800件/小时,可以连续运行。高峰期差别更大——工人会疲劳,机器不会。
识别率:稳定在96%以上
正常面单识别率约97%,轻微褶皱/磨损的面单约85%。识别失败的包裹自动流向一个"人工处理"滑道,由现场工人处理。失败原因主要是面单严重损坏、多层面单重叠、或者包裹本身形状太怪异。
出错率:明显下降
人工分拣的渠道错放率在旺季大约2-3%,AI分拣线把放错率降到了约0.3%。这个数字对老板来说很重要——发错渠道的包裹要二次转运,成本不小。

当然也有不太理想的部分:

五、踩坑记录

除了已经提到的那些,还有几个印象比较深的坑:

灰尘导致识别率断崖式下降。上线第三周有一天识别率突然从97%掉到70%。排查了半天——相机镜头蒙了一层灰。仓库里的灰尘比想象中多得多,特别是气泡袋摩擦产生的碎屑。后来给相机加了压缩空气吹扫装置,每隔一小时自动吹5秒镜头,问题解决。

传送带静电的干扰。干燥天气里,传送带摩擦产生静电,轻薄的气泡袋会吸附在传送带上不走,造成识别后包裹没到推杆位置就触发推杆,打了空。在传送带入口加了一个静电消除棒,几百块钱搞定。

数据库写入延迟导致丢记录。初期识别记录是每处理一个包裹就写一次数据库。高峰期一秒钟要处理3-4个包裹,SQLite写入跟不上,偶尔丢记录。后来改成批量写入——每收到50条记录写一次,或者每10秒写一次。数据库压力降下来了。

六、我的思考

这个项目和之前做过的工厂项目感觉挺不一样的:

物流场景的核心是吞吐量,不是精度。在工厂做视觉质检,追求的是零漏检。在物流分拣里,96%的识别率已经能干活了——失败的那4%走人工处理通道就行。关键是1小时能处理多少件,而不是识别率能不能到99.9%。需求不同,技术优先级完全不同。

"老办法+AI"往往比"纯AI方案"更管用。客户最初想要的是"全自动分拣线——视觉识别+机械臂抓取"。我们去看了场地和预算后,觉得不现实。最终的重力滑道+气动推杆方案,看起来"不够AI",但胜在简单、便宜、维护成本低。AI不应该为了"显得AI"而用复杂方案,能解决问题的简单方案才是好的。

跨境物流的碎片化是技术落地的最大挑战。不同国家、不同渠道、不同物流商的面单格式不一样,而且这个集合是在不断扩大的。模型需要持续维护,不是"训练一次就能一直用"。做这个项目前要有心理准备——上线只是开始,后面还有持续的模型维护工作。

工人没有想象中抵触。之前我有点担心工人会觉得AI抢饭碗。实际发现最积极的是分拣组的老组长——他说"每年双十一我都要加两个通宵班来理货,机器能帮忙的话我求之不得"。人是害怕被替代,但更害怕活多得干不完。

七、如果你也想做

几点给同行的建议:

  1. 别一上来就想做全自动。先挑一条线或者一个环节试水,验证可行再扩展
  2. 预留至少两周的模型数据收集和标注时间——不同场景下的面单差异很大,通用模型很难直接适配
  3. 相机安装和打光花的钱和时间,不要省。好的图像质量能省掉模型优化的80%工作量
  4. 给识别失败的包裹一个明确的"人工处理通道",不要试图把所有异常都交给AI处理——不现实
  5. 物流场景的数据量增长很快,数据库设计要考虑写入性能。不要用SQLite当主力库,至少上PostgreSQL
  6. 定期检查设备的物理状态——灰尘、光源衰减、气路泄漏——视觉系统维护有一半的工作量在硬件上