本作品介绍参与极术社区的有奖征集|分享研电赛作品扩大影响力,更有重磅电子产品免费领取!
团队介绍
队伍名称:hello world-Dream
队长:小星
队员:晓晓,海象
作品简介
本作品基于卷积神经网络设计出一款集装箱编码识别器,该识别器可以实现高精度毫秒级运算。本文研究设计的是一整套集装箱箱号识别系统。算法部分主要包括箱号定位、箱号分割、箱号识别三大模块。系统拥有本地数据库,记录经过的集装箱箱号、经过时间等信息。为了便于用户进行前端操作,本文还设计了人机交互界面。同时,本文从稳定性和软件保密性角度考虑,进行了系统部署系统可以在Win32系统或是Linux系统下运行,全部程序使用Python3.7语言编写。
创新点总结如下:
1) 不同于目前传统的箱号区域定位算法,本文设计了深度学习模型进行箱号区域定位,相比于传统算法,不易受光照、阴影和箱号字符残缺等问题的影响,实时性更好,鲁棒性更强。
2) 针对目前利用倾斜校正和投影法进行字符分割实时性差的问题,本文将箱号按区域分成四大子区域,利用一系列形态学滤波、二值化处理和边缘检测方法等对未经倾斜校正的每一箱号子区域直接进行字符分割。实践证明,这种方案满足实时性要求。
3) 本系统从人机交互角度出发,设计了本系统专用的上位机。上位机可以实时显示摄像头捕捉的视频流,也支持从图片和视频录入箱号。并将识别到的箱号和时间等信息自动存入数据库。同时,上位机还可以对数据库中的数据进行条件查询(可以按录入时间、集装箱编号查询也支持一键查询全部信息)。
根据对集装箱箱号识别系统的功能需求分析,我们设计的箱号识别系统主要包括:算法部分和系统部署部分。算法部分和系统部署部分分别见图1-2和图1-3。算法部分包括箱号区域定位网络、箱号字符分割算法和箱号识别网络。出于对系统运行稳定性和程序保密性的考虑,我们采取三级部署,包括:本地客户端、中继服务器端、AI运算端。在程序设计中,各个算法部分尽量做成API形式,只考虑输入输出的格式,方便移植和扩展。
算法部分各子算法功能如下:
1) 箱号区域定位网络。该网络用于确定箱号区域,网络的输入是摄像头获取的高清图片,输出是一张取自输入图片的仅带有箱号的图片。
2)字符分割算法。该算法主要由图像滤波、形态学操作和边缘检测算法组成,用于分割字符,输入是仅带有箱号的图片,输出是按顺序排好的单个字符。
3)箱号识别网络。该网络用于识别箱号字符,输入是排列好的一系列单个字符图片,输出是一串完整的箱号字符。
系统部署中各子部分功能如下:
1)摄像头端:用于获取实时图像,并将图片传输给本地客户端。
2)本地客户端:上位机运行于该端,主要用于接收来自摄像头的实时图像,并将图像传输给中继服务器端,同时负责接收一串箱号字符,并将箱号录入数据库,在需要时可以查询历史记录。
3)中继服务器端:主要是起到一个转发站的作用,将本地客户端获取的图像传给AI运算端,还有将AI运算端输出的箱号字符传输给本地客户端。
4) AI运算端:用于接收中继服务器端发来的图像,经过定位、分割和识别后,将箱号字符传输给中继服务器。算法部分全部运行于该端。
标准集装箱箱号由11位编码组成,包括三个部分:
1、第一部分由4位英文字母组成。前三位代码(Owner Code)主要说明箱主、经营人,第四位代码说明类型,通常以字母"U"表示集装箱,若为"J"表明该集装箱为集装箱配件,若为"Z"为拖车平板。列如CBHU开头的标准集装箱是表明箱主和经营人为中远集运。
2、第二部分由6位数字组成。是箱体注册码(Registration Code),用于一个集装箱箱体持有的唯一标识。
3、第三部分为校验码(Check Digit)由前4位字母和6位数字经过校验规则运算得到,用于识别在校验时是否发生错误。即第11位数字。
根据校验规则箱号的每个字母和数字都有一个运算的对应值。箱号的前10位字母和数字的对应值从0到Z对应数值为0到38,11、22、33不能对11取模数,所以要除去。
箱号校验规则
第N位的箱号对应值再分别乘以2^(N-1) (N=1,2,3………10)
例如:箱号为CBHU3202732的集装箱它的第1位代码为C
它的代码值=代码的对应值×2^(1-1)=13×2^0=13×1=13。
类推第2位代码为B
它的代码值=代码的对应值×2^(2-1)=12×2^1=12×2=24以此类推得到箱号前10位代码的代码值。将前10位的代码值乘积累加后对11取模
箱号为CBHU3202732的集装箱前10位箱号的代码累加值=4061,取11的模后为2,就是这个箱号第11位的识别码的数值。
以此类推,就能得到校验码。
A=10 B=12 C=13 D=14 E=15 F=16 G=17 H=18 I=19 J=20 K=21 L=23 M=24 N=25 O=26 P=27 Q=28 R=29 S=30 T=31 U=32 V=34 W=35 X=36 Y=37 Z=38
对11取模后当余数等于11时候就会出现两位10余码,所以对应码就取消了11的倍数,比如11,22,33等,但是运算下来还是有这种11倍数余码。
如果校验码出现10,说明你取11模的时候没有判断出现2位余码,遇到10就后面添加减去10,最后校验是0就是标准校验码。
集装箱号是在每个集装箱箱体两侧标示的全球唯一的编号。
例如:TEXU3605231*1(1)表示1个标准集装箱;
TEXU3605231*2(3)表示2个集装箱,折合为3个标准集装箱,
其中一个箱号为TEXU3605231。
在多于一个集装箱的情况下,其余集装箱编号打印在备注栏或随附清单上。
1) 集装箱号都由4个英文字母和6个阿拉伯数字以及1个效验码组成;
例如: TRLU166324
2)计算效验码时,把4个英文字母 转化成相应的数字
(A=10,B=12,C=13,D=14,E=15,F=16… Z=38)其中去掉11,22,33三个数;
3)4个英文字母 转化成4个相应的数字,加上6个阿拉伯数字,这样共得到10个数字,把每个数字乘以2的位数减一次方求和再除11,取其余数,即得核对号;
例如: TRLU166324-2 (T=31 R=29 L=23 U=32)
S=31*2^0 + 29*2^1 + 23*2^2 + 32*2^3 + 1*2^4 + 6*2^5 + 6*2^6 + 3*2^7 + 2*2^8 + 4*2^9
算法介绍
算法部分各子算法功能如下:
1) 箱号区域定位网络。该网络用于确定箱号区域,网络的输入是摄像头获取的高清图片,输出是一张取自输入图片的仅带有箱号的图片。
2) 字符分割算法。该算法主要由图像滤波、形态学操作和边缘检测算法组成,用于分割字符,输入是仅带有箱号的图片,输出是按顺序排好的单个字符。
3) 箱号识别网络。该网络用于识别箱号字符,输入是排列好的一系列单个字符图片,输出是一串完整的箱号字符。
定位网络设计:
箱号定位算法采用基于CNN的轮廓识别技术,定位算法的设计采用CNN架构,自主学习轮廓的信息,自主找出轮廓位置。
作品创新
- 支持图像和视频输入以及录像输入
- 采用自主研发的神经网络架构
- 合理的人机交互界面
- 高精度低延时
技术流程图
实物图
未来展望
(1)由于集装箱图片获取渠道限制以及人力的不足,本文仅对有限数量的字符进行了识别,但是集装箱箱号有很多,所以后续可以从多渠道获取集装箱图片或视频,对更多类别的字符进行识别。
(2)本文设计的上位机以及数据库中虽然有重量信息,但是由于硬件条件限制,并没有把真正的地磅数据接口与系统进行连接,后续可以考虑加入地磅信息。
(3)本文在进行箱号识别时,采用定位-分割-识别的算法架构,这主要是因为制作单个字符定位的数据集需要大量人力和时间成本,我们不具备这两个条件。后续可以研究将定位、分割和识别融合在一起的架构,实现端到端的识别
更多研电赛作品请查看2021年研电赛获奖作品合集