雅特力AT32 MCU基于Zbar解码库的QR Decode应用程序

cathy的头像
cathy 发布于:周六, 10/07/2023 - 11:40 ,关键词:

二维码简介

二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。

二维码由于自身设计特点,可包含更多的信息量,编码信息范围更广,并且由于二维码具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、以及处理图形旋转变化点,二维码译码更加准确,其误码率为千万分之一。下图为QR二维码构造框图。

1.png

图1. QR码符号的结构

1) 位置探测图形、位置探测图形分隔符:用于对二维码的定位,对每个QR码来说,位置都是固定存在的,只是大小规格会有所差异;这些黑白间隔的矩形块很容易进行图像处理的检测。

2) 定位图形:这些小的黑白相间的格子就好像坐标轴,在二维码上定义了网格。

3) 格式信息:表示该二维码的纠错级别,分为L、M、Q、H。

4) 数据区域:使用黑白的二进制网格编码内容。8个格子可以编码一个字节。

5) 版本信息:即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40),每一版本符号比前一版本每边增加4个模块。

6) 纠错码字:用于修正二维码损坏带来的错误。

二维码解码流程

了解了QR二维码的构造,下面我们来了解解码流程,QR二维码的解码流程如下图2所示。

2.png

图2. QR码译码步骤

1) 定位并获取符号图像。深色与浅色模块识别为“0”与“1”的阵列。

2) 识读格式信息(如果需要,去除掩模图形并完成对格式信息模块的纠错,识别纠错等级与掩模图形参考)。

3) 识读版本信息,确定符号的版本。

4) 用掩模图形参考,从格式信息中得出对编码区的位图进行异或处理消除掩模。

5) 根据模块排列规则,识读符号字符,恢复信息的数据与纠错码字。

6) 用与纠错级别信息相对应的纠错码字检测错误,如果发现错误,立即纠错。

7) 根据模式指示符和字符计数指示符将数据码字划分成多个部分。

8) 最后,按照使用的模式译码得出数据字符并输出结果。

二维码的解码流程具体实现的步骤和方法是比较复杂,涉及到了QR二维码的标准规则及相对应的算法,知识点很多,网络上相关资料充足,这里就不再赘述。

QR decode快速使用方法

硬件资源

1) USB

2) LCD 9341

3) Sensor OV5640 or OV2640

4) Buzzer(PE3)

5) USER Key

6) AT32F435_DVP_EVB_V1.0实验板

3.png

图3. 硬件资源图

硬件连接及数据流

本例程中主要使用到的外设包括:DVP、I2C、XMC、DMA和USB,其中DVP用于摄像头数据接收,I2C用于初始化摄像头,XMC用于发送LCD显示数据至LCD设备,DMA用于DVP至buffer和buffer至XMC的数据传输,USB用于将数据发送至PC端。

摄像头数据会以Y8的格式用DVP进行采集,通过DMA传输至内存buffer,此buffer会用于LCD显示和Zbar解码。在LCD显示部分,由于LCD无法直接显示Y8格式数据,所以首先会将Y8格式转换为RGB格式,然后通过DMA将数据传输到XMC用于LCD显示摄像头画面;在Zbar解码部分,解码成功后会将解析结果通过USB传输至PC端,并通过XMC将结果显示到LCD上。

硬件连接以及数据流如下图所示:

4.png

图4. 硬件连接及数据流图

QR decode demo使用

由于该demo运行占用了256KB的SRAM,而AT32F435/437的SRAM大小是可配置的(SRAM默认大小为384KB),为了方便使用,demo已经在启动文件中将SRAM修改为了默认大小,亦可自行在extend_sram()函数中进行SRAM大小的配置。

5.png

图5. 修改SRAM大小

1) 连接USB线到PC,通过上位机可以识别到该设备:Artery Virtual COM Port,注意需要安装USB驱动:Artery_VirtualCOM_DriverInstall.exe。

2) 根据LCD显示信息,查看摄像头初始化是否成功,demo提供的初始化代码可自动识别OV5640或OV2640两种摄像头,若想更换其他摄像头请自行修改摄像头初始化代码。

3) 初始化成功后,将摄像头对准二维码,LCD显示当前抓取的摄像头图像,此时芯片一直在通过Zbar进行二维码解码。

4) 若芯片解析到数据,蜂鸣器会进行提示并将解析次数及解析结果显示在LCD底部,如图6所示。同时如果连接了USB至PC端并识别到了Artery Virtual COM Port,还会将解析到的数据通过USB传输到PC端,如图7所示。当解析到新的图码数据时会将解析次数清零,并更新解析结果。

5) 若芯片未解析到图码数据,LCD将无结果显示,或保留上次解析的结果及次数。

6) 蜂鸣器提示音可以通过USER Key进行开关。

7) 可通过以下宏定义来对摄像头输出数据大小进行设置,为了兼顾成像效果和资源占用,建议输出大小设置为160至240(pixel)之间:

#define CAMERA_SIZE 240

8) 可通过以下宏定义来选择是否开启LCD显示:

#define LCD_DISPLAY

9) 应用效果展示视频链接如下:

https://b23.tv/Y4nhMNR

6.png

图6. LCD显示解析数据

7.png

图7. USB传到上位机数据

来源:AT32 MCU 雅特力科技

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 49