二维码生成与识别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南京航空航天大学
课程设计题目二维码的生成及识别
何俊豪韩怀晓晋晓飞小组成员:
瞿诗华薛莉
二〇一五年十一月
第一章QR码简介
QR码是由日本Denso公司与1994年制定出来的一种矩阵二维码符号,它除了具有信息容量大、可靠性高、可表示汉字及图像信息、保密性强等优点外,还具有超高速响应、全方位识别等特点。
QR码符号是由正方形的细小模块构成,分为功能区和编码区。功能图形包括位置探测图形、分隔符、定位图形、校正图形、格式信息、版本信息等,编码区域包括数据编码块和纠错码图形。普通QR码基本图形及区域功能对照图如图1.1所示。
图1.1 QR码基本结构
1.1 QR码的密度标识图形
位于两个“回”字标识符之间的黑白相间的条纹,用红色线标注的,这个区域可以用于确定QR码符号的像素方块的密度(即一个像素的大小),标识识别模块如图1.2所示。
图1.2 QR码密度标识图形
1.2 位置探测图形
位置探测图形由三个重叠的同心正方形构成,如图1.3所示。通过探测位置探测图形可以迅速的从背景图像中判断出QR码符号的大致位置。
图1.3 QR码探测图形
二维码定位就是找到二维码符号的位置探测图形,对有明显条码特征的区域进行定位,然后根据图形结构特征值对不同的条码符号进行进一步的处理。通过QR码的定位图形,可以得到左上角位置探测图形的边界点和左下角位置探测图形的边界点如图1.4(a)所示,因此可以采用鲁棒性较好的算法拟合条码左边框,然后通过直线拟合得到条码的上边框直线。在此基础上构建直角三角形,寻找出图形中心,如图1.4(b)所示,并可以得到第四个交点,如图1.4(c)所示。
(a)确定左边界和上边界(b)确定探测图形中心(c)确定第四个交点
图1.4 条码图像初步定位流程
1.3 版本信息
QR码符号共有40种规格,版本1的规格为21模块×21模块,版本2为25模块×25模块,以此类推,每一版本符号比前一版本每边增加4个模块,直到版本40,规格为177模块×177模块。QR码的版本信息图形在整个二维码图像中的位置如图1.5所示,QR码最高版本40可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。
图1.5 版本信息图形
1.4 纠错码
QR码具有“纠错能力”,即使在使用过程中遇到污损、折叠等现象,也可以自动恢复数据。这一“纠错能力”具备四个级别,级别越高,纠错能力越高,但是数据量也会增加,
编码尺寸也会变大。QR码各级别纠错码纠错能力如表1.1所示。
表1.1 纠错码级别纠错能力对照表
QR码的纠错能力
级别L 约7%
级别M 约15%
级别Q 约25%
级别H 约30%
第二章QR码编码规则介绍
将输入的数据转变为一个位流,如果最开始的模式指示符不是默认的,其前面要用ECI 标头,如果以默认的开始,位流的开头为第一个模式的指示符,如表2.1 所示,该表定义了不同模式下的模式指示符。表2.2定义了不同模式和符号版本下的字符计数指示符的长度。
表2.1 模式指示符
模式指示符
ECI 0111
数字0001
字母数字0010
8位字节0100
日本汉字1000
中国汉字1101
结构链接0011
FNCI 0101(第一位置)1001(第二位置)
终止符(信息结尾)0000
表2.2 字符计数指示符的位数
版本数字模式字母数字模式8位字节模式中国汉字模式1~9 10 9 8 8
10~26 12 11 16 10
27~40 14 13 16 12
2.1 数字模式编码实现
将输入的数据从左至右每三位转化成一个10位的二进制数,剩余的一位或者两位数据分别转化成4位或7位二进制数。然后在转换后的二进制数据前加上模式指示符和字符计数指示符。例如输入数据:88899966,编码步骤如图2.1所示。
图2.1 数字模式编码流程
2.2 字母模式编码实现
字母模式编码规则与数字模式编码规则类似,不过首先要根据对应的字母模式编码转换表2.3将字符转化为相应的数值,再将每两个字母分为一组,前面字符的值乘以与第二个字符的值相加,所得的结果转换为位二进制数。
2.3 中国汉字模式编码实现
GB2312标准规定的汉字字符为双字节表示。QR的汉字编码模式将16位的转换为13位二进制字符序列,提高了编码效率。编码具体步骤:
(1)将第一字节值减去0xA6;
(2)将(1)的结果乘以0x60;
(3)将第二字节值减去0xA1;
(4)将(2)的值加上(3)的值;
(5)将结果转化成13位二进制。
2.4 纠错编码
按需要将码字序列分块,并根据纠错等级和分块的码字,产生纠错码字,并把纠错码字
加入到数据码字序列后面,成为一个新的序列。在二维码规格和纠错等级确定的情况下,其实它所能容纳的码字总数和纠错码字数也就确定了。纠错码主要通过里德-所罗门纠错算法算出来,例如:版本10,纠错等级时H时,总共能容纳346个码字,其中224个纠错码字。就是说二维码区域中大约1/3的码字时冗余的。对于这224个纠错码字,它能够纠正112个替代错误(如黑白颠倒)或者224个据读错误(无法读到或者无法译码)。
在规格确定的条件下,将原先产生的序列按次序放如分块中,按规定把数据分块,然后对每一块进行计算,得出相应的纠错码字区块,把纠错码字区块按顺序构成一个序列,添加到原先的数据码字序列后面,如图2.2所示。
图2.2 二维码矩阵构造
2.5 Zxing简介
Zxing是一个开放源码的,用Java实现的多种格式一维或者二维的条码图像处理库,它包含了联系到其他语言的端口,通常使用Zxing生成相应的二维码码以及解码。
生成二维码的编码技术是指基于给定内容生成二维条码图片,Zxing可以对生成的二维码的图片格式、各项参数以及二维码类型进行设置,生成的图片包含给定的内容,当使用识别设备进行扫描时,能够读出给定的内容。
使用Zxing进行编码的步骤主要如下:首先,将所需的Zxing类库中的包导入工程;其次,对需要生成二维条码的给定内容进行编码方式处理,防止在显示中文时出现乱码问题,并指定所生成二维条码图片的路径、名称和文件格式;然后,找到Zxing中二维码QR码所对应的编码类QR-CodeWriter,调用encode方法生成给定内容对应的比特矩阵;最后将比特矩阵转化为制定的图片格式。