基于嵌入式的条形码识读器的设计
2019-05-22陈龙刘怡俊张彩英
陈龙 刘怡俊 张彩英
摘要:为加快条码识读器技术的发展,研制一款基于异构多核的图像型条码识读器,集成了光源、镜头、CCD图像采集、FPGA逻辑管理、ARM处理器、读码算法和通信等功能的嵌入式图像处理系统。复杂背景下的条码图像通过图像采集装置采集后,然后利用嵌入式的机器视觉处理技术进行任意方向的多个条码区域自动定位和识别,实验表明有效提高条码读取效率。
关键词:条码;图像采集;嵌入式
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2019)06-0257-02
1引言
条形码技术在我国各地广泛应用,随着工业的快速发展,条形码技术发展与其他技术相互融合,相互促进,使其可应用到更多场合。近年来,条形码技术与以嵌入式设备为代表的移动计算技术、电子商务的结合都显示出巨大的发展潜力和广阔的市场前景。本文提出基于嵌入式的条码智能识读器的方案,该方案性价比高,可扩张性强,在实际应用中具有重要意义。
2 总体结构
研制一款基于异构多核的图像型条码识读器,集成了光源、镜头、CCD图像采集、FPGA逻辑管理、ARM处理器、读码算法和通信等功能的嵌入式图像处理系统。通过图像采集装置采集复杂背景下的条码图像,然后利用嵌入式的機器视觉处理技术进行任意方向的多个条码区域自动定位和识别,具体包括图像预处理(含去噪、图像分割)、条码定位、条码旋转、条码解析等过程,有效提高条码读取效率。
2.1 系统整体框图
2.2 软硬件协同设计流程
2.3软硬件数据传输设计
通过对软硬件中不同的接口互联选择,实现硬件加速数据处理,主要步骤如下:
(1)利用ARM的预先存储待处理的图像数据至DDR中;
(2)通过数据通道将DDR中的图像数据传送至FPGA中;
(3)使用FPGA进行图像处理算法设计;
(4)通过数据通道将FPGA处理之后数据送回至DDR;
(5)ARM将处理之后的图像数据读出。
3 Zynq设计
项目以异构多核处理器为核心,采用All Programmable嵌入式处理技术,建立小型智能视觉系统架构,满足嵌入式图像采集、处理、识别等需求。基于软硬件协同设计的图像数据实时高速采集。
项目采用的开发板是型号为MIZ-702的 ZYNQ-7000,该开发板是一款高性能SOC开发板, XC7Z020CLG484 作为CPU,由美国 XILINX 公司所开发。硬件上它设计了ARM Cortex-A9 双核,包含512MB内存、外部存储器接口和一套丰富的I/O 外设。
4 IP包设计
Zynq-7000 AP系列有种类丰富的软IP核,由Xilinx提供。这些核在性能和硬件占据的面积上都做了优化。类似FIFO和算术运算这样的基本模块,核的功能都能涵盖。一直到完整的像MicroBlaze处理器核这样的功能性处理模块。
4.1 IP集成
Vivado Design Suite提供了集成IP用的所有工具,同时支持把Xilinx或第三方的IP集成进你的Zynq系统设计中。
5 数据搬运部分VDMA
VDMA数据接口可以分为读、写通道,写通道的作用就是用户可将AXI-Stream类型的数据流写入DDR3,读通道的作用就是从DDR3读取数据,并输出AXI-Stream类型的格式。由上分析可知,数据搬运IP其实就是VDMA本质,即为数据进、出DDR3提供了一种便捷的方案。
将数据存入DDR之后,CPU就可以进行一些处理(缩放、裁剪等),然后再送至显示设备,达到期望的应用目的。
6 软件设计
6.1 获取条形码主程序流程图
6.1.1 图像前期处理
在此次图像预处理中,首先从内存地址中读取图像数据,由于条码是由简单的黑白条组成,彩色没有包含所需要的信息,读取图像后直接将图像转化为8位灰度图,以提高后面图像处理的速度,转化后对图像进行中值滤波处理,减少噪声的干扰,至此完成图像的获取和简单前期处理工作。
6.1.2判断并清除非条码图像
首先进行分块扫描模式,分块尺寸太大会影响定位精度,太小则增加计算量,选取不合适易导致条码定位失败,所选取分块数量为6,所选取分块尺寸blockSize = (图像宽和高的最小值)/6,blockSize分块尺寸是根据图像行和列的最小者除于分块数量来计算的,由下述公式(1)和(2)所示:
如图4所示,白色区域为非条码区,边缘不足以构成分块的区域默认为非条码区,非条码区的图像都会被清除(灰度值置0),灰色和黑色部分为条码区,条码区中心的3个黑色分块作为条码倾斜角的决定区域。
为p_block指针申请一片9*6大小的内存,作为记录每个分块是否为条码区的标志, p_block再经过8连通检查的图像,清除了孤立分块,故有细微差别。然后对所得图像进行灰度梯度扫描操作:在每个分块的两条对角线、中竖线和中横线上作扫描,即在这四条线上检测连续4个像素之间的灰度差[1],当灰度差的绝对值大于阈值时,标记为一次灰度变化,如下述公式(3)所示:
其中,Vi为第i个像素的梯度量化值 , [|fi+1+fi+fi-1+fi-2|]为连续四个像素之间的灰度,t为 阈值 ,若分块在某条扫描线上发生超过3次的灰度变化,则认为该方块可能含有条码部分,需要保留,否则清除分块(统一为分块);最后对所得图像进行8连通区域检查,每个分块都有8个领域分块,分块的边缘除外,统计每个条码区分块的邻域分块中是条码区分块的个数时,若达不到3个,则将该条码区域分块视为孤立分块,孤立分块是条码的可能性较小,因此将其标记为非条码区域,并清除该分块;
6.1.3 通过亚像素角点检测确定条码区域
对图像进行分块亚像素级角点检测,对每个分块的角点数进行統计,若分块的角点数小于等于预设阈值,则视为条码区域.
6.1.4 条码区域方块再判断
根据条码的条形排列的特点,通过霍夫变换算法进行直线检测,运用直线的极坐标公式:ρ=хcos(θ)+уsin(θ),其中ρ,θ是一对参数,通过对图像中的像素点运用该公式处理即可得到二维的ρ,θ参数空间,在参数空间上形成峰值,从而利用该峰值即可检测出直线;最后将直线检测和角点检测的判定结果进行或运算,作为分块的最终结果,以防止出现误判。
6.1.5 定位条码位置
进行多条码识别可从轮廓面积这一步作为突破口。例如8连通检查图和绘制轮廓图像(轮廓实际为封闭的,因缩放截图未显示出来)。再用矩形勾出条形码的最大轮廓,另外矩形的倾斜角是指条码中间黑条的倾斜线,如图11倾斜角是取下图红色区域,3个分块的倾斜角中差值最小的2个角的平均值。最后计算条码黑条倾斜角,以矩形中心进行原图像旋转,截取并保存原图中所在区域。
6.1.6 zbar条码识别
调用zbar库对定位的条码进行识别,并输出结果。为了验证算法的有效性和准确性,采集500张多条码图像进行测试,实验机器配置:WIN 7 64位 ,Core i5,CPU 1.70GHz,内存8GB。测试发现,该算法可以较为有效地减少背景干扰,在较为复杂的背景下和光照稍微不均匀的情况下,算法仍可以检测出条码。对于分辨率2592×1944的图像,平均处理速度为2.23幅/s,根据图像上条码的数量,处理时间略有差异。识别率为92.4%,部分条码无法识别的原因包括光照严重不均匀,以及条码本身质量不佳,缺损等。
7结论
项目采用异构多核架构ZYNQ All Programmable SoC,集成了双ARM? Cortex?-A9 MPCore?处理器和FPGA可编程逻辑逻辑器件,同时具备软硬件可重编程功能,有效地降低嵌入式系统开发成本,具有功耗低、风险低、设计灵活等特点。FPGA里面有很丰富的DSP资源,借助先进的Vivado HLS工具,很方便地把以前的C/C++语言的DSP代码,转换为硬件描述语言(HDL),利用FPGA进行硬件加速。另外,Cortex-A9内置了Neon/VFP协处理器,提供了强大的DSP处理能力,再结合基于FPGA的硬件加速,可以提供前所未有的DSP性能。实现任意区域任意方向多条码的智能快速识别。
【通联编辑:光文玲】