今年年初,义乌一家做跨境出口的仓库找到我们。老板在电话里说了一句话让我印象挺深——"双十一那阵子,分拣区地上堆的货能没过人膝盖,工人得在货堆里翻包裹。"
这家仓库大概2000平,日均处理5000-6000个包裹,旺季能冲到1万以上。包裹从上游供应链过来后,要先经过收货登记、分拣到各渠道(美国站、欧洲站、东南亚站等)、最后装车发货。其中分拣环节是最卡的——全靠人工拿着扫码枪,一个一个扫面单上的条码,然后放到对应的筐里。
人工分拣的问题很明显:速度上不去(熟练工一分钟也就扫20个左右),容易出错(条码残损扫不出、相近地址放错筐),而且旺季加人也不好使——新手上手至少两周才能达到正常速度。老板试过加传送带、改工位布局,但人眼+人手这个核心瓶颈没解决。
一、现场摸底:问题比表面看到的更多
去仓库实地看了两天,发现了几个关键瓶颈:
- 面单条码质量参差:热敏纸打印的条码,在运输、存储过程中容易出现磨损、卷曲、受潮模糊,扫码枪经常识别失败,需要工人手动输入运单号
- 包裹形态不统一:有纸箱、气泡袋、快递袋、PE袋,尺寸从A4纸大小到半米见方都有,没法用固定的机械分拣方案
- 渠道编码复杂:不同目的国的面单格式不同(USPS、Royal Mail、DHL、EMS等),工人要识别每个面单对应的渠道并放到相应位置,培训成本高
- 场地限制:仓库是老厂房改造,层高只有3.5米,没法装大型自动化分拣设备(交叉带分拣机需要至少5米层高,且单个分拣口就要好几万
这些条件拼在一起,结论很明确:要找一个灵活、成本可控、不需要大改场地的方案,核心是用视觉代替人眼来识别包裹上的信息。
二、方案设计:AI视觉识别+边缘计算+重力滑道
最终确定的方案分四层:
视觉识别层
在传送带上方安装1台500万像素工业相机(全局快门,帧率30fps),俯拍经过的包裹。相机触发方式用的是光电传感器——包裹经过时自动拍照,不需要人工操作。
拍到的图片传到边缘AI网关,跑一个轻量级的OCR识别模型。模型不做全图扫描,而是先用目标检测模型定位面单区域(因为部分包裹有多张贴纸、标签),再在面单区域做文字识别提取单号。
模型选型上做过对比测试:
- 第一轮试了PaddleOCR的标准模型——识别率可以,但推理速度不行,单张图要150-200ms,跟不上传送带速度
- 第二轮换成了PaddleOCR的轻量版(ch_PP-OCRv4_mobile)——推理速度降到40-50ms,识别率掉了约2个百分点,但可以接受
- 第三轮把检测模型也换成了轻量版本(PicoDet),整体管线控制在80ms以内
分拣执行层
分拣执行部分,我们没有用昂贵的机械臂或交叉带分拣机,而是设计了一套重力滑道+气动推杆的方案:
- 传送带一侧布置了10条下倾斜滑道,每条对应一个目的渠道
- 滑道入口处有气动推杆——AI识别出包裹的渠道后,推到对应滑道入口
- 包裹沿重力滑道滑到末端收集袋,工人只需要把满袋封口装车
这套方案的好处是便宜——一套气动推杆加滑道,成本不到大型分拣机的十分之一。坏处是滑道数量有限,渠道多了得做二次分拣。
边缘计算层
在分拣线旁边部署了一台边缘AI网关,负责:
- 驱动相机拍照+图像预处理
- 运行OCR识别模型
- 根据识别结果控制气动推杆(通过工业IO模块)
- 本地存储识别记录(30天)
- 网络正常时,把分拣数据同步到云端WMS系统
之所以全跑在边缘端而不是云端,主要原因是分拣线要求实时响应——相机拍到包裹到推杆动作,整个周期不能超过500ms。云方案考虑过,去掉网络延迟至少1-2秒,来不及。而且仓库网络本来就不太稳定。
看板管理层
一个简易的Web看板展示:
- 实时分拣流量(今天处理了多少个、当前速度)
- 各渠道分布(美国多少、欧洲多少、异常件多少)
- 识别失败率(连续上升说明需要调整模型或光线)
- 设备运行状态(相机、推杆、气路是否正常)
看板挂在分拣区墙上的电视屏幕上,工位旁边也有一个平板可以看。老板手机上也能看到汇总数据。
三、实施过程:三个月的迭代
第一周:相机安装和测试
相机安装本身不复杂——用支架固定在传送带正上方,调整高度和角度保证视野覆盖整个传送带宽度。麻烦的是打光。
仓库的顶灯是日光灯,照度不均匀,而且不同时段自然光进来后光强变化很大。相机拍出来的图要么过曝要么偏暗,识别率受影响。
解决方案是加了两个可调亮度的LED条形灯,装在相机两侧45度角的位置,和传送带运行方向平行。调了大概两个多小时,找到一个亮度和角度组合让面单区域的对比度比较理想。
另外排除了一个坑——传送带本身是深绿色的,和部分快递袋颜色接近,导致检测模型有时候找不到包裹边界。后来在传送带背面贴了一条白色PVC胶带做背景分割参考线。
第二至三周:模型训练和调优
模型方面,看起来是标准流程,实际踩了不少坑:
第一个坑:面单型号太多。跨境包裹上的面单各式各样——有国内快递单、国际转运单、平台面单(亚马逊FBA、Shopee)、邮政小包面单……每种面单的布局、字体、码制都不一样。通用OCR模型有些能识别,有些不行。
解决方案是收集了约2000张面单图片做微调。分类标注了不同的面单类型,对识别率低的类型单独增加训练样本。这个过程比较耗人力,但效果确实明显——标准面单识别率从87%提到接近97%。
第二个坑:条码和文字的混搭。很多面单上既有文字运单号,又有条形码。有些场景下条码模糊扫不出,需要用文字识别做补充。但文字和条码在一个区域里会互相干扰。
最后走了双通道识别:先检测条码区域,如果可以解码就直接用条码结果(更快更准);如果条码解码失败,再用OCR读文字。这个方案比纯OCR快了约30%。
第三个坑:包裹表面不平整。气泡袋和PE袋上的面单经常有褶皱和反光,拍出来的图有局部模糊。试过几种去反光的偏振片,效果一般而且降低了进光量。后来干脆在预处理环节加了自适应直方图均衡化,虽然增加了几毫秒处理时间,但褶皱区域的文字识别率提升了不少。
教训:工业视觉项目里,图像采集质量比模型算法重要得多。光线和姿态调好了,YOLOv3也能干活;光线不行,ResNet来了也没用。
第四周:联调和试运行
联调阶段最头疼的问题出在气动推杆上。
我们的设计逻辑是:相机拍到包裹→识别出渠道→包裹移动到对应滑道→推杆推出。但传送带速度不是恒定的——有时候工人会手动调速。速度变了,包裹从相机位置到推杆位置的到达时间就变了,推杆要么推早了(推到两个滑道中间),要么推晚了(推到下一个滑道的位置)。
试了两种方案:
- 固定速度策略:锁死传送带速度,用固定延时。问题是一旦工人无意中调了速度(仓库里的变频器面板任何人都能碰),整个系统就乱了。
- 光栅测速方案:在传送带侧面装了2个对射式光电传感器,间隔固定距离。包裹经过时计算通过时间,动态得出当前传送带速度,然后算推到时间。这个方案靠谱,但增加了成本。
最后选的是折中的办法——在推杆前方再装一个光电传感器,包裹经过时触发推杆动作。这样不需要知道传送带速度,只要包裹到了位置就推。可靠性高了不少,但牺牲了一点节拍(包裹必须走得近一些才能触发,限制了连续分拣的间距)。
四、实际效果
系统上线跑了一个半月后,我们对比了数据:
人工扫码分拣稳定在700-800件/小时(需要换班休息),AI视觉分拣线稳定在1500-1800件/小时,可以连续运行。高峰期差别更大——工人会疲劳,机器不会。
正常面单识别率约97%,轻微褶皱/磨损的面单约85%。识别失败的包裹自动流向一个"人工处理"滑道,由现场工人处理。失败原因主要是面单严重损坏、多层面单重叠、或者包裹本身形状太怪异。
人工分拣的渠道错放率在旺季大约2-3%,AI分拣线把放错率降到了约0.3%。这个数字对老板来说很重要——发错渠道的包裹要二次转运,成本不小。
当然也有不太理想的部分:
- 对包裹间距有要求:包裹间隔至少20cm才能保证推杆有足够的动作时间。工人往传送带上放包裹时偶尔会放得太密,需要提醒
- 新面单类型的冷启动:每当出现一种新的面单格式(比如有新的物流渠道上线),需要收集几十张样本做标注和微调,否则识别率会降到60%以下
- 设备维护:气动推杆的电磁阀两个月坏了一次,换了一个。LED光源也有一个衰减比较快,亮度下降后影响识别
五、踩坑记录
除了已经提到的那些,还有几个印象比较深的坑:
灰尘导致识别率断崖式下降。上线第三周有一天识别率突然从97%掉到70%。排查了半天——相机镜头蒙了一层灰。仓库里的灰尘比想象中多得多,特别是气泡袋摩擦产生的碎屑。后来给相机加了压缩空气吹扫装置,每隔一小时自动吹5秒镜头,问题解决。
传送带静电的干扰。干燥天气里,传送带摩擦产生静电,轻薄的气泡袋会吸附在传送带上不走,造成识别后包裹没到推杆位置就触发推杆,打了空。在传送带入口加了一个静电消除棒,几百块钱搞定。
数据库写入延迟导致丢记录。初期识别记录是每处理一个包裹就写一次数据库。高峰期一秒钟要处理3-4个包裹,SQLite写入跟不上,偶尔丢记录。后来改成批量写入——每收到50条记录写一次,或者每10秒写一次。数据库压力降下来了。
六、我的思考
这个项目和之前做过的工厂项目感觉挺不一样的:
物流场景的核心是吞吐量,不是精度。在工厂做视觉质检,追求的是零漏检。在物流分拣里,96%的识别率已经能干活了——失败的那4%走人工处理通道就行。关键是1小时能处理多少件,而不是识别率能不能到99.9%。需求不同,技术优先级完全不同。
"老办法+AI"往往比"纯AI方案"更管用。客户最初想要的是"全自动分拣线——视觉识别+机械臂抓取"。我们去看了场地和预算后,觉得不现实。最终的重力滑道+气动推杆方案,看起来"不够AI",但胜在简单、便宜、维护成本低。AI不应该为了"显得AI"而用复杂方案,能解决问题的简单方案才是好的。
跨境物流的碎片化是技术落地的最大挑战。不同国家、不同渠道、不同物流商的面单格式不一样,而且这个集合是在不断扩大的。模型需要持续维护,不是"训练一次就能一直用"。做这个项目前要有心理准备——上线只是开始,后面还有持续的模型维护工作。
工人没有想象中抵触。之前我有点担心工人会觉得AI抢饭碗。实际发现最积极的是分拣组的老组长——他说"每年双十一我都要加两个通宵班来理货,机器能帮忙的话我求之不得"。人是害怕被替代,但更害怕活多得干不完。
七、如果你也想做
几点给同行的建议:
- 别一上来就想做全自动。先挑一条线或者一个环节试水,验证可行再扩展
- 预留至少两周的模型数据收集和标注时间——不同场景下的面单差异很大,通用模型很难直接适配
- 相机安装和打光花的钱和时间,不要省。好的图像质量能省掉模型优化的80%工作量
- 给识别失败的包裹一个明确的"人工处理通道",不要试图把所有异常都交给AI处理——不现实
- 物流场景的数据量增长很快,数据库设计要考虑写入性能。不要用SQLite当主力库,至少上PostgreSQL
- 定期检查设备的物理状态——灰尘、光源衰减、气路泄漏——视觉系统维护有一半的工作量在硬件上