二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。二维码由于自身设计特点,可包含更多的信息量,编码信息范围更广,并且由于二维码具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、以及处理图形旋转变化点,二维码译码更加准确,其误码率为千万分之一。下图为QR二维码构造框图。图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. QR码译码步骤1) 定位并获取符号图像。深色与浅色模块识别为“0”与“1”的阵列。2) 识读格式信息(如果需要,去除掩模图形并完成对格式信息模块的纠错,识别纠错等级与掩模图形参考)。3) 识读版本信息,确定符号的版本。4) 用掩模图形参考,从格式信息中得出对编码区的位图进行异或处理消除掩模。5) 根据模块排列规则,识读符号字符,恢复信息的数据与纠错码字。6) 用与纠错级别信息相对应的纠错码字检测错误,如果发现错误,立即纠错。7) 根据模式指示符和字符计数指示符将数据码字划分成多个部分。8) 最后,按照使用的模式译码得出数据字符并输出结果。二维码的解码流程具体实现的步骤和方法是比较复杂,涉及到了QR二维码的标准规则及相对应的算法,知识点很多,网络上相关资料充足,这里就不再赘述。
QR decode快速使用方法
硬件资源
1) USB2) LCD 93413) Sensor OV5640 or OV26404) Buzzer(PE3)5) USER Key6) AT32F435_DVP_EVB_V1.0实验板图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. 硬件连接及数据流图
QR decode demo使用
由于该demo运行占用了256KB的SRAM,而AT32F435/437的SRAM大小是可配置的(SRAM默认大小为384KB),为了方便使用,demo已经在启动文件中将SRAM修改为了默认大小,亦可自行在extend_sram()函数中进行SRAM大小的配置。图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 2408) 可通过以下宏定义来选择是否开启LCD显示:#define LCD_DISPLAY9) 应用效果展示视频链接如下:https://b23.tv/Y4nhMNR图6. LCD显示解析数据图7. USB传到上位机数据
关于雅特力雅特力科技于2016年成立,是一家致力于推动全球市场32位微控制器(MCU)创新趋势的芯片设计公司,专注于ARM Cortex-M4/M0+的32位微控制器研发与创新,全系列采用55nm先进工艺及ARM Cortex-M4高效能或M0+低功耗内核,缔造M4业界最高主频288MHz运算效能,并支持工业级别芯片工作温度范围(-40°~105°)。雅特力目前已累积相当多元的终端产品成功案例:如微型打印机、扫地机、光流无人机、热成像仪、激光雷达、工业缝纫机、伺服驱控、电竞周边市场、断路器、ADAS、T-BOX、数字电源、电动工具等终端设备应用,广泛地覆盖5G、物联网、消费、商务及工控等领域。
全部0条评论
快来发表一下你的评论吧 !