基于NiosII的二维条码识别系统设计
时间:06-12
来源:
点击:
由于PDF417条码是层叠式条码,在对单行条码码字进行识别时,必须得到条码的行数,然后分离出每一行。首先对条码使用Sobel算子进行水平边缘检测,如图7所示,然后向水平方向投影,如图8所示。
(3)码字识别
分割出单个码字后,得到条空的像素个数,记为{M1,M2,…,M8},因为4个条和4个空的总模块数为17,可以根据式(1)得出条模块数的集合{T1,T2,T3,T4)。同样,用Ki替代式(1)中的Ti,可得到空模块数的集合{K1,K2,K3,K4}。
因PDF417条码用了三个簇的数据来组成一个条码,三个簇的数据量较大,且每个簇中的数据与条空比无一致对应关系,所以就涉及把条空比转换成条码数据的问题。本算法采用的解决方案是:用哈希算法来查找:
F=Z×1400+K2×216+T3×36+K4×6+T (2)
式(2)中Z为空1模块数和条2模块数的组合,再利用F的值进行查找,实现数据流的译码。数据流译码不是本文重点,这里不再详细阐述。
3 系统软件设计
系统软件是在Nios II的μC/OSII操作系统下进行C语言编程的。系统初始化主要包括对采集芯片、射频传输控制模块、网络接口的初始化,整个系统动态扫描条码图像和实时译码。系统主要流程如图9所示。其中,系统初始化时利用函数IOWR(SIGNAL_CAP_O_BASE,O,1)将采集模块全局信号复位,然后使用函数alt_irq_register。(SIGNAL_CAP_0_IRQ,NULL,sig_cap_irq_proc)来建立一个用户中断程序,对按键中断响应进入中断服务程序sig_cap_irq_proc,向摄像头发送采集指令。当采集模块完成一幅条码图像采集后,产生一个硬件中断,将标志FLAG置1。当主循环程序判断FLAG为1时,就可以从外扩的SRAM中将图像数据读入SDRAM中,接着进行图像预处理和译码,其中包括用自定义用户指令和硬件模块实现的一些运算量大的部分。射频传输与NiosII的PIO口相连,通过函数IOWR_ALTERA_AVALON_PIO_DA_TA来实现。
4 实验与分析
本识别系统工作频率为100 MHz,图像采样分辨率为320×240,一幅条码图像识别时间为60 ms。本系统有如下几个特点:
①利用PDF417码本身的特点来定位分割条码,与传统的条码定位分割算法相比,大大提高了条码识别速率。传统二维条码定位分割多采用Hough变换来确定条码倾斜角度,不能满足手持式嵌入式条码识读器的实时性要求。
②在FPGA中嵌入NioslI软核处理器,简化硬件设计,同时使系统更加稳定。FPGA的可重配置以及SOPC的可裁减使系统具有很高的资源利用率,而且方便升级和维护。
③利用自定义模块、自定义指令、C2H硬件加速等方法刮对部分耗时算法进行优化,大大提高了整个系统识别速率。
笔者针对不同环境下采集的300幅条码图像进行了三次测试:第一次是在条码无破损的情况下,第二次是在条码有5%破损和污染的情况下,第三次随机识别100幅条码。本文所采用的算法平均识别率达96.7%,耗时60ms,如表1所列。
结 语
二维条形码诞生后,条码技术的应用领域更加广泛,不仅应用于物流运输,还渗透到生产、生活的各个领域。本文介绍了一种基于SOPC的二维条码识别系统的设计,提出了一种软硬件综合的解决方案,由于涉及底层的硬件系统设计和相应的软件设计,在系统性能优化方面有着很大的空间。
- 基于NiosII的SOPC多处理器系统设计方法(02-10)
- 嵌入式网络地址监控系统研究与设计(08-01)
- 基于SBC+DSP的嵌入式系统设计与应用(08-02)
- 基于ATMEGAl28的语音识别系统的设计实现(07-09)
- 基于ATMEGAl28的语音识别系统设计(09-16)