基于神经网络的条形码定位方法及系统与流程

文档序号:17235748发布日期:2019-03-30 08:20阅读:418来源:国知局
基于神经网络的条形码定位方法及系统与流程

本发明涉及图像处理和深度学习技术领域,具体涉及一种基于神经网络的条形码定位方法及系统。



背景技术:

近年来图像处理技术的发展与神经网络技术在图像处理上的发展与应用使得图像处理技术在各领域应用得更加方便与广泛,而这也使得物流扫码中在多种工作场景下对多尺度物流码进行识别定位成为可能。传统的图像处理技术是一种基于开发者先验知识的应用,开发者能根据特定场景对系统进行分析,设计出合理高效的方案,但场景变化容易导致系统出现失控。物流扫描工作中,场景的不同、使用人的工作习惯差异等会导致图像的特性出现许多差异,尺度变化较大,传统的图像处理方法较难设计出一个适用于各种情况下的系统。

另外,目前关于条形码的研究,尽管有了许多成果,但集中体现在研究对固定图像中的条形码识别定位技术,而针对实际情况中条形码的应用研究尤其是在物流上的应用研究是十分欠缺的。目前快递行业所使用的扫描器基本上都是基于1987年推出的手持式条码扫描器,外形很像超市收款员拿在手上使用的条码扫描器一样。手持式扫描枪绝大多数采用cis技术,光学分辨率为200dpi,有黑白、灰度、彩色多种类型,其中彩色类型一般为18位彩色。也有个别高档产品采用ccd作为感光器件,可实现真彩色,扫描效果较好。但该扫码器的缺点是需要使用者手动对准条形码,影响了快递流程,这也是物流行业自动化中的一个挑战,因此,针对物流扫码工作中货物复杂,条形码尺度变化多端的情况,急需设计一种条形码定位方法及系统来解决该问题。



技术实现要素:

本发明的目的是针对现有技术的不足,提供了一种基于神经网络的条形码定位方法,所述方法能够实现对不同尺度、摆放杂乱的快递面单上条形码的快速定位,并能对条形码进行分析解码,解决了现有技术中只是针对固定图像中条形码识别定位的问题。

本发明的另一目的在于提供一种基于神经网络的条形码定位系统。

本发明的目的可以通过如下技术方案实现:

一种基于神经网络的条形码定位方法,所述方法采用yolo网络提取目标条形码的图像深层特征,并定位出条形码的区域,再对定位区域进行旋转校正,修正条形码区域,最后采用zxing库对条形码内容进行解码并显示定位以及解码结果。

进一步地,所述yolo网络采用卷积层作为网络模型的前端部分提取图像深层的抽象特征,并在最后使用全连接层将网络模型的输出转化成代表预测结果的张量,张量的大小为:s*s*(b*5+c),其中s*s为网格的数量,b为每个网格所预测的边界框个数,c为总共的类别数,在条形码预测工作中,所需的仅是预测出条形码这一类目标,所以这里的c为1。

进一步地,所述yolo网络采用梯度下降的方式更新网络参数,也就是参数朝着损失函数负梯度的方向迭代更新,yolo网络模型的损失函数为:

其中,s2表示yolo网络将图片分成的网格数,b表示每个网格所预测的边界框个数,表示该目标所属的类别;表示物体是否落在网格i中,若是则为1,否则为0;表明网格i中的第j个边界框是否负责这次预测,若是则为1,否则为0;xi,yi,wi,hi,ci代表存在目标的第i个预测框的位置以及置信度信息,对应的为标注的正确的目标位置信息以及置信度,因此为1;由于训练样本图片的所有网格中,没有目标的网格数一般是大于存在目标的网格数的,因此设置λcoord>λnoobj使得损失函数更加注重对有目标网格带来的损失。

进一步地,所述当定位出条形码的区域,再对定位区域进行旋转校正,修正条形码区域,目的是要实现将条形码区域提取并平行摆放的效果,需要使用旋转变换将本来可能非垂直的条形码图案旋转至和边界平行,目标是不论快递面单如何摆放,都能将条形码区域调整至平行摆放位置并提取出来,这里采用仿射变换来校正条形码区域,仿射变换公式如下:

中间的运算矩阵即为仿射变换矩阵,其中a1,a2,a3,a4是非奇异线性变换矩阵参数,tx,ty是平移变换矩阵参数,最后一行参数作为增强图像稳定性添加,能够省略。

本发明的另一目的可以通过如下技术方案实现:

一种基于神经网络的条形码定位系统,所述系统采用前端交互、后台处理的方式运行;系统摄像头获取需要检测的图像,然后通过网络传输的方式发送至后台服务器端检测;后台服务器端采用yolo网络提取目标条形码的图像深层特征,并定位出条形码的区域,再对定位区域进行旋转校正,修正条形码区域,最后采用zxing库对条形码内容进行解码并显示定位以及解码结果,将结果发回给前端。

进一步地,所述系统的后台服务器端能够供多个前端使用。

本发明与现有技术相比,具有如下优点和有益效果:

1、本发明提供的一种基于神经网络的条形码定位方法,采用神经网络技术对条形码进行定位,神经网络通过学习目标的深层抽象的特征识别目标,与传统图像技术通过目标基本的鲁棒性特征进行目标跟踪有所不同,神经网络所学习的特征具有更加良好的泛化能力,在目标的尺度、旋转角度以及图像亮度等特征变化较大时仍能很好地正确定位条形码,且所述神经网络采用yolo网络,yolo算法将目标定位问题转化成回归问题,实现从图像像素直接预测目标的位置,实时性十分高,能够快速对条形码进行定位。

2、本发明提供的一种基于神经网络的条形码定位系统,以网络通信的方式连接系统的前端与后台服务器,前端负责采集图像以及与使用人交互,后台服务器完成条形码定位的功能,这种设计使得系统前端可以方便地移植到低成本的嵌入式平台上,复杂的运算处理由后台服务器负责,系统的可移植性高,一台服务器可以同时为多个前端提供算法支持,更加地节省使用成本。

附图说明

图1为本发明实施例基于神经网络的条形码定位系统实现流程示意图。

图2为本发明实施例基于神经网络的条形码定位系统硬件平台整体结构图。

图3为本发明实施例中使用的训练样本示例图。

图4为本发明实施例yolo网络的结构图。

图5为本发明实施例yolo训练网络的loss变化曲线图。

图6为本发明实施例的仿射变换原理图。

图7(a)为本发明实施例中未修正仿射变换的图片,图7(b)为本发明实施例中未修正截取效果的图片,图7(c)为本发明实施例中修正仿射变换的图片,图7(d)为本发明实施例中最后得到的修正截取效果图片。

图8(a)为code39码的基本构成示意图,图8(b)为code128码的基本构成示意图。

图9为socket通信流程图。

图10为本发明实施例中的软件界面示意图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。

实施例:

本实施例提供了一种基于神经网络的条形码定位方法,所述方法采用yolo网络提取目标条形码的图像深层特征,并定位出条形码的区域,再对定位区域进行旋转校正,修正条形码区域,最后采用zxing库对条形码内容进行解码并显示定位以及解码结果。

所述方法通过一种基于神经网络的条形码定位系统来实现,所述系统采用前端交互、后台处理的方式运行;系统摄像头获取需要检测的图像,然后通过网络传输的方式发送至后台服务器端检测;后台服务器端采用所述方法得到条形码的定位以及解码结果,将结果发回给前端。

所述系统的硬件模块由一个usb摄像头、一个摄像头架子,树莓派开发板,一台pc机组成。其中,摄像头选用的是jw-02型ttq摄像头,采用usb2.0接口;树莓派型号为3代b型开发板;pc机的主要配置为gtx1050型gpu。摄像头通过usb2.0连接到树莓派,并实时获取检测图像,树莓派通过网络通信方式将图像送至pc机进行处理,并从pc机获取检测结果。系统整体硬件平台如图2所示,软件流程如图1所示。

系统的核心部分是训练yolo网络检测快递面单上的条形码,该部分的步骤如下:

1、训练样本的采集

在选择训练样本时为增加系统的泛化能力,样本图像一般选择背景复杂以及选取多种不同背景的图片,如图3所示。关于数据量的大小,在深度学习理论中,一般认为训练数据越大对模型的泛化能力提升越好,但对于真正使用来说,最好在收集训练数据而消耗时间和数据量增大提升训练效果两者之间找到一个比较好的平衡点,此处初步确定训练样本在400-500之间比较合适,考虑到目标的特征明显且本身变化较小,因此模型本身会收敛地比较快,400-500大致能满足训练的要求,有需要的话根据实验结果修改。

2、网络模型设计

yolo网络的结构如图4所示,采用卷积层作为网络模型的前端部分提取图像深层的抽象特征,并在最后使用全连接层将网络模型的输出转化成代表预测结果的张量,张量的大小为:s*s*(b*5+c),其中s*s为网格的数量,在这里设计为7;b为每个网格所预测的边界框个数,这里设计为2;c为总共的类别数,在条形码预测工作中,所需的仅是预测出条形码这一类目标,所以这里的c为1。

所述yolo网络采用梯度下降的方式更新网络参数,也就是参数朝着损失函数负梯度的方向迭代更新,yolo网络模型的损失函数为:

其中,s2表示yolo网络将图片分成的网格数,一般是7*7,b表示每个网格所预测的边界框个数,一般设为2,表示该目标所属的类别;表示物体是否落在网格i中,若是则为1,否则为0;表明网格i中的第j个边界框是否负责这次预测,若是则为1,否则为0;xi,yi,wi,hi,ci代表存在目标的第i个预测框的位置以及置信度信息,对应的为标注的正确的目标位置信息以及置信度,因此为1;由于训练样本图片的所有网格中,没有目标的网格数一般是大于存在目标的网格数的,因此设置λcoord>λnoobj使得损失函数更加注重对有目标网格带来的损失,一般将λcoord设为2,并将λnoobj设为0.5。

3、网络的实现与训练

对yolo网络的实现有很多,其中darknet是一个较为轻型的完全基于c与cuda的开源深度学习框架,其主要特点就是容易安装,没有任何依赖项(opencv都可以不用),移植性非常好,支持cpu与gpu两种计算方式。本实施例采用这个框架作为实现对条形码定位的网络设计以及训练。

首先修改配置文件yolo-voc.cfg,具体为:

a)修改cfg文件中网络全连接层实现部分:

修改classes为1,与全连接层相连的最后一层卷积的filters也需要修改,应为(classes+coords+1)*(num)=30。至此,完成了yolo网络结构的设计。

b)修改网络学习率相关部分:

其中要修改的是:学习率learning_rate,这个变量影响网络的收敛速度以及收敛效果,learning_rate过大会导致模型出现震荡不收敛,过小就会导致收敛速度变慢,由于本次设计内容是针对条形码区域的定位,目标特征明显且变化不大,因此可以适当增大learning_rate,最终设置为0.0005;迭代次数max_batches是模型训练的最大次数,过小或过大会引起欠拟合和过拟合,最终设置为10000,其他参数不变;

之后进行yolo网络的训练,命令:./darknetdetectortraincfg/voc.datacfg/yolo-voc.cfg,darknet首先根据yolo-voc.cfg配置文件构造网络框架,并根据相关路径加载数据和保存训练结果。

网络收敛很快,如图5所示。在迭代次数达到2000时,loss下降趋势已经很小,因此在迭代次数达到2500时停止了网络的训练。

4、利用仿射变换校正条形码区域

当定位出条形码的区域,需要再对定位区域进行旋转校正,修正条形码区域,目的是要实现将条形码区域提取并平行摆放的效果,需要使用旋转变换将本来可能非垂直的条形码图案旋转至和边界平行,目标是不论快递面单如何摆放,都能将条形码区域调整至平行摆放位置并提取出来,这里采用仿射变换来校正条形码区域,仿射变换原理图如图6所示,公式如下:

中间的运算矩阵即为仿射变换矩阵,其中a1,a2,a3,a4是非奇异线性变换矩阵参数,tx,ty是平移变换矩阵参数,最后一行参数作为增强图像稳定性添加,能够省略。仿射变换矩阵均以3*3或2*3的矩阵形式出现,构建旋转仿射变换矩阵是仿射变换过程中最为重要的一步,仿射变换的具体过程如下:

获取仿射变换矩阵:获取仿射变换矩阵常用的是自定义仿射变换矩阵,其opencv函数接口如下:

matcvgetrotationmatrix2d(point2fcenter,doubleangle,doublescale)

其中center是二维矩阵处理过程中的旋转中心点,angle是旋转角度,scale是图像缩放比例系数,可见该函数构造的仿射变换矩阵支持各种旋转变换的情况和缩放操作,但不能对二维矩阵进行形状变化的操作,也就是只能实现除错切变换以外的仿射变换操作;

仿射变换:得到仿射变换矩阵后即可实现变换操作,其函数如下:

voidcvwarpaffine(inputarraysrc,outputarraydst,inputarraym,sizedsize,intflags,intbordermode,constscalar&bordervalue=scalar())

其中src是输入原图像,dst是输出目标图像,m是仿射变换矩阵,dsize是输出图像尺寸,其余是可缺省的参数。该函数的源码是根据仿射变换公式进行编写的,运算过后能将条形码区域旋转至垂直位置并能按一定大小比例缩放。

为了尽量保存条形码图像的完整区域而又要避免条形码图像缺失,上述仿射变换函数中dsize应取条形码轮廓集合的最小外接矩形的大小,也就是src和dst所代表的图像大小尺寸是相同的,这时当设定仿射变换矩阵中scalar比例缩放参数为1时,可以想象在该比例情况下进行变换时会有部分条码区域被截除,故需对仿射变换矩阵m进行位置平移参数的调整,未修正仿射变换的图片如图7(a)所示,未修正截取效果图片的如图7(b)所示,修正仿射变换图片如图7(c)所示,最后得到的修正截取效果图如图7(d)所示。

5、qzxing解码条形码

快递物流上常用的条形码编码方式是code39码和code128码,code39的名称来自于它的条和空的图案,9个条和空中的3个宽。基本构成如图8(a)所示;code128码是一种高密度的条形码编码方式,于1981年被推出,code128的名称来源于这种编码方式可以表示出ascii0到ascii127共128个字符,code128编码规则如图8(b)所示,共6个部分:1、空白区;2、起始符号;3、编码的数据;4、校验符号;5、停止符号;6空白区。

qzxing是基于qt语言的编码处理库,支持ean、code39等多种编码方式的解码。qzxing解码的函数接口为:

qstringdecodeimage(constqimage&image,intmaxwidth=-1,intmaxheight=-1,boolsmoothtransformation=false);

该函数返回条形码的编码内容,其中image是条形码所在的区域图像,越贴近真实区域解码效率就越好。

6、网络通信

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。socket通信流程如图9所示。socket使用方法如下:

intbind(socketsocket,conststructsockaddr*address,socklen_taddress_len);该函数将socket与address指定的网络地址绑定,并分配address_len大小的缓冲区。intsendto(sockets,constcharfar*buf,intsize,intflags,conststructsockaddrfar*to,inttolen);

发动buf内容至socket连接的地址。

intrecv(socketsocket,charfar*buf,intlen,intflags);

从socket的缓冲区接收指定长度的内容。

在客户端与服务器端利用socket套接字就可以完成tcp通信,具体为前端程序向后台服务器发送待检测图像,后台服务器端向前端程序发送检测结果。

7、系统展示

软件界面如图10所示,包含了图像显示区域、条形码解码区域time、context以及三个功能按钮。在图像显示区域里不仅可以观察到摄像头所捕获的图像,还可以观察到对条形码定位的效果。time框显示对当前帧的图像进行处理的全部耗时(包括了网络传输、yolo检测以及其他代码耗时),context框里存放着对条形码的解码结果。

以上所述,仅为本发明专利较佳的实施例,但本发明专利的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明专利所公开的范围内,根据本发明专利的技术方案及其发明专利构思加以等同替换或改变,都属于本发明专利的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1