与目前广泛使用的一维条形码相比较,二维码具有编码密度高、信息容量大、编码范围广、纠错能力强、译码可靠性高、追踪性高、抗损性强、备援性大、成本便宜等特性,在表单、安全保密、追踪、证照、存货盘点、资料备援等方面必将取代传统一维条码,获得快速发展。本文提出的便携矩阵式二维码CCD识读器,采用TI的高速DSP芯片TMS320DM642作为图像处理器,使用高分辨率CCD摄像头捕捉图像,在DSP处理器中利用模式识别初次定位,并对Data Matrix二维码进行解码识别,得到编码在二维码图形中的字符串信息。其结果可以直接在阅读器上显示,且可通过通信接口与其他设备交互信息。
1 硬件实现
硬件部分主要由CPU控制器、CCD摄像头、图像采集芯片TVP5150、存储器SDRAM和Flash、LCD显示器、时钟及看门狗电路、电源及复位电路、串行通信电路等组成,硬件结构框图如图1所示。
主要应用电路由DM642、视频输入电路、视频输出等电路组成,具体如下。
1.1 DM642模块
该系统CPU选用TI公司专为视频应用开发的高性能DSP芯片TMS320DM642(简称DM642)。DM642基于C64x内核,并在其基础上增加了很多外围设备和接口,因而在实际工程中的应用更为广泛和简便。本系统使用50 MHz晶振作为DSP的外部时钟输入,经过内部锁相环12倍频后产生600 MHz的工作频率。DM642采用了2级缓存结构(L1和L2),大幅度提高了程序的运行性能。片内64位的EMIF(External Memory InterFace)接口可以与SDRAM、Flash等存储器件无缝连接,极大地方便了大量数据的搬移。更重要的是,作为一款专用视频处理芯片,DM642包括了3个专用的视频端口(VP0~VP2),用于接收、处理视频和音频数据,提高了整个系统的性能。本系统主要使用了TMS320DM642的外部存储器扩展接口EMIF、视频口VP1、视频口VP2和通用IO口GPIO。
1.2 视频输入接口
DM642具有3个视频端口,支持多种分辨率和标准,其位宽和输入输出方向软件可控,设计中将VP2的A通道设置为视频输入模式,实现对二维码的图形输入。DM642与视频编解码芯片之间的数据都通过这几个专用的端口传输,但是对这些芯片的控制则是通过I2C总线实现的。
采用模拟摄像头进行视频数据采集,需要使用视频解码芯片将采集到的模拟数据进行数字化,然后送给DM642的视频端口进行处理。本设计选用TI公司生产的TVP5150A,这是一款具有强大可靠的同步检测器的超低功耗 NTSC/PAL/SECAM 视频解码器,它与DM642的连接如图2所示。
图2中,TVP5150A的YOUT口与DM642的VP2口直接连接,用于数据的传输。点阵时钟线和DM642上VP2口的VP2_CLK1相连,用于数据传输的时钟信号。DM642通过I2C总线对TVP5150A内部寄存器进行读写,达到控制该芯片的目的。
1.3 视频输出接口
对于要求进行本地回放的设计,需要将一个视频口设置为回放模式。本设计需要通过镜头的焦距、视野等对所获取的物体表面图像质量进行控制,需要监控图像质量,为此需要设计视频输出接口。在设计中使用视频口VP1进行视频回放,因此将VP1端口的A通道设置为回放模式。对采集到的数据进行回放时需要先将数字视频信号重新转化为模拟信号,才能在监视器上播放。本设计选用由Philips公司生产的SAA7104来完成信号转换,SAA7104与DM642的电路连接如图3所示。
图3中,DM642的VP1端口向SAA7104的MP口输出BT.656格式的数字视频信号,经过SAA7104芯片内部数据管理模块分离出Y信号和Cb、Cr信号;然后再送到片内相应的模/数转换模块将数字信号变换为模拟视频信号;由CVBS(复合视频信号)或者Y、C(S-端子信号)引脚输出。SAA7104的时钟信号LLC为27 MHz,由DM642的VP2CLKI提供,而DM642的VP2CLKI则是来自于TVP5150A的SCLK引脚,这就使得视频的采集和回放达到同步要求。DM642通过I2C接口对SAA7104芯片内部的寄存器进行配置,实现对该芯片的控制。2 软件实现
在软件方面,主要针对视频编码、解码芯片的驱动、软件流程设计和算法设计等3个方面。
2.1 基于DSP/BIOS的视频驱动模型
设计中使用TI的基于DSP/BIOS的驱动模型,利用了CSL(Chip Support Library)芯片支持库对TVP5150A和SAA7104进行配置,使用FVID的API实现视频信号的采集和回放。基于这种驱动模型的框架如图4所示。
2.2 软件工作流程
程序上电开始运行后,首先对各模块进行初始化设置,包括VP1、VP2、TVP5150A、SAA7104、McBSP等,之后在一个DSP/BIOS系统任务对象中进行图像捕捉,捕获的图像数据将存放在FVID提供的一个FVID_Frame结构中,以后对于图像的处理都是针对该结构中的图形数据进行。将获得的图像首先进行二维码识别和定位,采用模式识别的方法,判断该次采集的图像是否含有二维码信息,是否需要进行二维码识别处理。如果含有二维码信息,则进入二维码识别模块进行识别,并输出到LCD显示器以及通过McBSP发送二维码信息。
其中,DSP/BIOS系统任务对象是被TSK模块管理的线程。其任务的优先级高于空闲循环,低于硬件和软件中断。TSK模块根据其任务的优先级和当前的执行状态动态地调度和抢占任务。DSP/BIOS总共有15个任务优先级可用,的优先级是保留给空闲循环的。为此,在设计中使用了TI的DSP/BIOS配置工具对TSK模块进行配置,建立系统任务tskLoopback用于视频采集和图像分析循环。系统程序的流程如图5所示。
2.3 图像处理程序
在图像处理程序部分,要得到准确的解码信息,必须包含两个关键组成部分:二维数据矩阵码的定位和二维码解码,本设计只对Data Matrix二维码进行解码。
在图像定位方面,Data Matrix二维码自身包含了大量的定位查找信息。图6所示为一个Data Matrix二维码图像,可以看出在二维码图像的底部有一条黑色水平条,而左边界处有一条黑色垂直条,其宽度均为一个有效1的宽度,在图像的右上方为数据编码图像区域,而整个图像外四周还有一个宽度为一个有效1像素4倍的白色连续区域,程序中用这些信息定位二维码图像,确定二维码图像的方向。
在程序中,首先获取一个完整的Data Matrix二维码图像作为以后识别和解码实时动态图像的模板。对于作为模板的图像,选择整个二维码图像区作为模板的训练区域,通过图像坐标的变换将其训练为以后在实时图像中定位二维码图像的模板。之后,设置定位时模式识别的一些参数,包括旋转角范围、比例缩放范围、图像灰度级别等,当模板和定位工具配置好时,就通过CCD相机实时地获取图像进行定位和识别。对于一个实时进来的图像,首先使用定位工具进行二维码图像定位,如果定位成功则此图像中包含二维码图像信息,如果定位返回不成功标志,则不进行下一步,直接再次申请图像。对于包含二维码信息的图像,在定位工具给出的图像位置,按照定位工具给出的图像像素尺寸数值,读取原始二进制码流,再根据Data Matrix的编码规则对二进制码流进行解码,获取相应的字符串进行显示和传输。
本文详细阐述了基于TMS320DM642的CCD二维码Data Matrix读码器的设计,包括了硬件和软件的系统设计。按照此设计方案设计的读码器结构简单,实现简便,二维码识别率很高。
[1]. TMS320DM642 datasheet https://www.dzsc.com/datasheet/TMS320DM642_14462.html.
[2]. TVP5150 datasheet https://www.dzsc.com/datasheet/TVP5150_665572.html.
[3]. TVP5150A datasheet https://www.dzsc.com/datasheet/TVP5150A_665622.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。