zoukankan      html  css  js  c++  java
  • Atitit java 二维码识别 图片识别

    Atitit java 二维码识别 图片识别



    1.1. 解码1
    1.2. 首先,我们先说一下二维码一共有40个尺寸。官方叫版本Version。1
    1.3. 二维码的样例:2
    1.4. 定位图案2
    1.5. 数据编码3
    1.6. 错误修正容量L水平7%的字码可被修正M水平15%的字码可被修正Q水平25%的字码可被修正H水平30%的字码可被修正3
    1.7. QR是怎么对数据码加上纠错码的?3
    1.8. 画二维码图4
    1.9. 简要的编码过程:数据分析:确定编码的字符类型,按相应的字符集转换成符号字符; 选择纠错等级,7
    1.10. qr长度容量7




    1.1.解码
    编码lib:Qrcode_swetake.jar   (官网介绍-- http://www.swetake.com/qr/index-e.html)             
    解码lib:qrcode.jar                 (官网介绍-- http://sourceforge.jp/projects/qrcode/)




    1.2.首先,我们先说一下二维码一共有40个尺寸。官方叫版本Version。
    Version 1是21 x 21的矩阵,Version 2是 25 x 25的矩阵,Version 3是29的尺寸,每增加一个version,就会增加4的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高Version 40,(40-1)*4+21 = 177,所以最高是177 x 177 的正方形。




        /**
         * @param args the command line arguments
         */ 
        public static void main(String[] args) { 
            QRCodeDecoderHandler handler = new QRCodeDecoderHandler(); 
            String imgPath = "c:\3bf33a87e950352a5936aa0a5543fbf2b2118b59.jpg"; 
            String decoderContent = handler.decoderQRCode(imgPath,"gbk"); 
            System.out.println("解析结果如下:"); 
            System.out.println(decoderContent); 
            System.out.println("========decoder success  !!!"); 
        } 
    1.3. 二维码的样例:




     
    1.4.定位图案
    Position Detection Pattern是定位图案,用于标记二维码的矩形大小。这三个定位图案有白边叫Separators for Postion Detection Patterns。之所以三个而不是四个意思就是三个就可以标识一个矩形了。
    Timing Patterns也是用于定位的。原因是二维码有40种尺寸,尺寸过大了后需要有根标准线,不然扫描的时候可能会扫歪了。
    Alignment Patterns 只有Version 2以上(包括Version2)的二维码需要这个东东,同样是为了定位用的。


    功能性数据
    Format Information 存在于所有的尺寸中,用于存放一些格式化数据的。
    Version Information 在 >= Version 7以上,需要预留两块3 x 6的区域存放一些版本信息。
    数据码和纠错码
    除了上述的那些地方,剩下的地方存放 Data Code 数据码 和 Error Correction Code 纠错码。
    1.5.数据编码
    我们先来说说数据编码。QR码支持如下的编码:数字,字符,byte


    1.6.错误修正容量L水平7%的字码可被修正M水平15%的字码可被修正Q水平25%的字码可被修正H水平30%的字码可被修正


    1.7.QR是怎么对数据码加上纠错码的?
    首先,我们需要对数据码进行分组,也就是分成不同的Block,然后对各个Block进行纠错编码,对于如何分组,我们可以查看QR Code Spec的第33页到44页的Table-13到Table-22的定义表。注意最后两列:




    1.8.画二维码图
    Position Detection Pattern
    首先,先把Position Detection图案画在三个角上。


    1.8.1.1.1.Alignment Pattern
    然后,再把Alignment图案画上


    关于Ali
    1.8.1.1.2.Timing Pattern
    接下来是Timing Pattern的线(这个不用多说了)


    1.8.1.1.3.Format Information
    再接下来是Formation Information,下图中的蓝色部分。


    Format Information是一个15个bits的信息,每一个bit的位置如下图所示:(注意图中的Dark Module,那是永远出现的)


    这15个bits中包括:
    5个数据bits:其中,2个bits用于表示使用什么样的Error Correction Level, 3个bits表示使用什么样的Mask
    10个纠错bits。主要通过BCH Code来计算
    然后15个bits还要与101010000010010做XOR操作。这样就保证不会因为我们选用了00的纠错级别,以及000的Mask,从重造
    1.8.1.1.4.Version Information
    再接下来是Version Information(版本7以后需要这个编码),下图中的蓝色部分。


    Version Information一共是18个bits,其中包括6个bits的版本号以及12个bits的纠错码,下面是一个示例:
    数据和数据纠错码
    然后是填接我们的最终编码,最终编码的填充方式如下:从左下角开始沿着红线填我们的各个bits,1是黑色,0是白色。如果遇到了上面的非数据区,则绕开或跳过。


    掩码图案
    这样下来,我们的图就填好了,但是,也许那些点并不均衡,所以,我们还要做Masking操作(靠,还嫌不复杂)QR的Spec中说了,QR有8个 Mask你可以使用,如下所示:其中,各个mask的公式在各个图下面。所谓mask,说白了,就是和上面生成的图做XOR操作。Mask只会和数据区进 行XOR,不会影响功能区。




    1.9.简要的编码过程:数据分析:确定编码的字符类型,按相应的字符集转换成符号字符; 选择纠错等级,
    在规格一定的条件下,纠错等级越高其真实数据的容量越小。数据编码:将数据字符转换为位流,每8位一个码字,整体构成一个数据的码字序列。其实知道这个数据码字序列就知道了二维码的数据内容。
    数据可以按照一种模式进行编码,以便进行更高效的解码,例如:对数据:01234567编码(版本1-H),1)分组:012 345 672)转成二进制:012→0000001100               345→0101011001                 67 →10000113)转成序列:0000001100 0101011001 10000114)字符数 转成二进制:8→00000010005)加入模式指示符(上图数字)0001:0001 0000001000 0000001100 0101011001 1000011对于字母、中文、日文等只是分组的方式、模式等内容有所区别。基本方法是一致的
    1.10.qr长度容量
    Cn utf8 984 
    Byte 2953byte 
    Ch 4296   num 7089








    1.11.二维码的解析


    1、定位图形:首先寻找探测图形,就是二维码上的三个方块。这三个方块的作用就是不管在哪个方向扫描图形,都可以扫到,不信可以将手机翻转测试一下。在通过二维码上的定位图形和分隔符确定二维码信息的图像。定位图形确定二维码符号中模块的坐标,二维码中的模块都是固定的,包括校正图形,版本信息,数据和纠错码。分隔符呢,就是将探测图形与二维码信息图像分开。


    2、灰度化二维码信息像素:手机拍到的图像都是彩色的,所以拍摄到二维码也不列外,它也是彩色的,只不过除了黑白,其他颜色非常浅而已。灰度化是指通过颜色的深浅来识别二维码,就是说颜色深的按深灰处理,浅色的按浅灰处理,去掉其他颜色。


    3、去掉二维码信息像素的噪点:相机的传感器在把光线作为接收信号和输出过程产生的粗糙像素,这些粗糙的像素是照片中不应该出现的干扰因素。噪点就是指这些粗糙的像素。


    4、二值化二维码信息像素:二值化是说将图像上像素灰度值设置为0或者255,也就是变成只有黑白两种颜色。第一步已经灰度化变成只有深灰和浅灰两种颜色,现在二值化是将深灰变成黑色,浅灰变成白色。为什么变成黑白色呢。因为二维码图像其实是由二进制的0或者1组成,0代表白色,1代表黑色。二维码在二值化时会将二维码图像变成只有黑白色的条码,然后根据解析公式什么的(因为像素是0-255之间,要全部转变成0或者255,估计得经过一些计算,然后0就是0,255变为1)转化成二进制信息。


    5、二维码译码和纠错:将得到的二进制信息进行译码和纠错。得到的二进制信息是版本格式信息、数据和纠错码经过一定的编码方式生成的,所以译码是对版本格式信息,数据和纠错码进行解码和对比。纠错是和译码同时进行的,将数据进行纠错。






    Atitit.二维码功能的设计实践 attilax 总结 - attilaxAti - 博客园.html
    atitit.二维码生成总结java zxing - attilax的专栏 - 博客频道 - CSDN.NET.html
     
    Java实现二维码QRCode的编码和解码 - 记忆是夏天 - 博客频道 - CSDN.NET.html
    二维码的生成细节和原理 - 51CTO.COM.html
    二维码原理介绍_百度经验.html
    二维码的生成和解析原理 - kelindame的专栏 - 博客频道 - CSDN.NET.html
    二维码的工作原理_百度知道.html


    作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 
    汉字名:艾提拉(艾龙),   EMAIL:1466519819@qq.com
    转载请注明来源: http://www.cnblogs.com/attilax/
    Atiend


  • 相关阅读:
    Java Output流写入包装问题
    SpringBoot项目单元测试不经过过滤器问题
    SpringSecurity集成启动报 In the composition of all global method configuration, no annotation support was actually activated 异常
    JWT jti和kid属性的说明
    Maven 排除依赖
    第五章 基因概念的发现
    第三章 孟德尔遗传的拓展
    第二章 孟德尔遗传
    第一章 引言
    GWAS全基因组关联分析
  • 原文地址:https://www.cnblogs.com/attilax/p/6009894.html
Copyright © 2011-2022 走看看