精华内容
下载资源
问答
  • 小知识:浅谈二维码的生成和识别原理

    万次阅读 多人点赞 2019-12-26 15:14:15
    静态二维码 二进制生成图形码 二维码的定位 前言 不知不觉中,我们的生活到处充满了二维码。登录账户需要二维码;加好友需要二维码;共享单车需要二维码;商品包装上也有二维码;甚至连楼下卖水果的阿姨手里都...

     

    目录

    前言

    条形码

    静态二维码

    二进制生成图形码

    二维码的定位


    前言

    不知不觉中,我们的生活到处充满了二维码。登录账户需要二维码;加好友需要二维码;共享单车需要二维码;商品包装上也有二维码;甚至连楼下卖水果的阿姨手里都拿张二维码收款。那么,有没有想过这个二维码到底是什么东西呢?那么这个二维码的图案会不会多到不小心重合了呢?

     

    条形码

    在二维码出现之前,大行其道的还得是条形码,比如超市收银员扫的那个黑白条就是条形码。条形码是一维数据,当机器在水平方向上扫码这些粗细不同的黑白条时能够获取到其中的数据信息。相比于只在一个维度上携带信息的条形码,二维码在水平、垂直两个维度上都携带了数据。

    说白了,条形码和二维码都是对一些数字、字母、字符等人们共识的常规文字,转换成另外一种相对应的符号(黑白条、黑白方块),然后又让这些符号能够被机器识别和翻译成为常规文字。

     

    静态二维码

    二维码其实有点类似于我们学生时代考试中用到的答题卡。我们在考试中将需要选择的正确答案用2B铅笔✏️涂黑后,这个信息就可以被机器扫描出来。机器批阅的效率非常高,一秒钟就可以知道你考了多少分。

    当然,二维码和答题卡的原理还不太一样。二维码的生成原理并不难理解,其实就是把数据信息转换成对应的黑白方块,最后拼接成了一个日常可见的正方形图案。也就意味着,如果改变了数据信息,就会直接改变二维码的图案,这也是静态码的重要特点。

     

    二进制生成图形码

    说了半天,还是没用说到关键点,就是怎么就把数据信息转换成对应的条形码和二维码。

    这里先介绍一下划时代意义的“二进制”。二进制由0和1组成,二进制的过程也被称为编码过程,它可以将数字、字母等字符转换成由0和1组成的数字集合。

    下面是字符转二进制的转换表格,在线二进制转换http://www.txttool.com/wenben_strbinary.asp

    字符二进制
    000110000
    100110001
    200110010
    300110011
    1000110001 00110000
    1100110001 00110001
    a01100001
    b01100010
    c01100011
    ab01100001 01100010
    .00101110

    比如,百度的网址 “www.baidu.com ” 转换成二进制后如下所示:

    01110111011101110111011100101110011000100110000101101001011001000111010100101110011000110110111101101101

    如果,此时“0”对应白色方块、“1”对应黑色方块的话,就会出现许多大大小小黑白方块。最后把这些方块填入一个大的正方形内,就形成了二维码图案了。

     

    二维码的定位

    不知道,大家有没有好奇,为什么所有的二维码的边角都有三个大的黑色方块。如下图所示:

    其实,这三个大小相同的黑色方块是为了给二维做定位的。定位?啥意思?很简单啊,就是你的二维可能斜了、歪了、倒立了,相机就可以通过这三个黑方块点判断二维的正确存放位置了啊!💡叮咚!这下大家都明白了吧。

     

    展开全文
  • 前言 不知不觉中,我们的生活到处充满了二维码。登录账户需要二维码;加好友需要二维码;共享单车需要二维码;商品包装上也有二维码;甚至连楼下卖水果的阿姨手里都拿张二维码收款...条形码是一维数据,当机器在水...

    前言

           不知不觉中,我们的生活到处充满了二维码。登录账户需要二维码;加好友需要二维码;共享单车需要二维码;商品包装上也有二维码;甚至连楼下卖水果的阿姨手里都拿张二维码收款。那么,有没有想过这个二维码到底是什么东西呢?那么这个二维码的图案会不会多到不小心重合了呢?

    条形码

    在二维码出现之前,大行其道的还得是条形码,比如超市收银员扫的那个黑白条就是条形码。条形码是一维数据,当机器在水平方向上扫码这些粗细不同的黑白条时能够获取到其中的数据信息。相比于只在一个维度上携带信息的条形码,二维码在水平、垂直两个维度上都携带了数据。

    说白了,条形码和二维码都是对一些数字、字母、字符等人们共识的常规文字,转换成另外一种相对应的符号(黑白条、黑白方块),然后又让这些符号能够被机器识别和翻译成为常规文字。

    静态二维码

           二维码其实有点类似于我们学生时代考试中用到的答题卡。我们在考试中将需要选择的正确答案用2B铅笔✏️涂黑后,这个信息就可以被机器扫描出来。机器批阅的效率非常高,一秒钟就可以知道你考了多少分。

    当然,二维码和答题卡的原理还不太一样。二维码的生成原理并不难理解,其实就是把数据信息转换成对应的黑白方块,最后拼接成了一个日常可见的正方形图案。也就意味着,如果改变了数据信息,就会直接改变二维码的图案,这也是静态码的重要特点。

    二进制生成图形码

    说了半天,还是没用说到关键点,就是怎么就把数据信息转换成对应的条形码和二维码。

    这里先介绍一下划时代意义的“二进制”。二进制由0和1组成,二进制的过程也被称为编码过程,它可以将数字、字母等字符转换成由0和1组成的数字集合。

    下面是字符转二进制的转换表格,在线二进制转换:http://www.txttool.com/wenben_strbinary.asp。

    字符二进制
    000110000
    100110001
    200110010
    300110011
    1000110001 00110000
    1100110001 00110001
    a01100001
    b01100010
    c01100011
    ab01100001 01100010
    .00101110

    比如,百度的网址 “www.baidu.com ” 转换成二进制后如下所示:

    01110111011101110111011100101110011000100110000101101001011001000111010100101110011000110110111101101101

    如果,此时“0”对应白色方块、“1”对应黑色方块的话,就会出现许多大大小小黑白方块。最后把这些方块填入一个大的正方形内,就形成了二维码图案了。

    二维码的定位 

    不知道,大家有没有好奇,为什么所有的二维码的边角都有三个大的黑色方块。如下图所示:

    其实,这三个大小相同的黑色方块是为了给二维做定位的。定位?啥意思?很简单啊,就是你的二维可能斜了、歪了、倒立了,相机就可以通过这三个黑方块点判断二维的正确存放位置了啊!💡叮咚!这下大家都明白了吧。

    展开全文
  • 二维码及其识别技术

    千次阅读 2015-04-02 11:28:18
    二维码及其识别技术 什么是二维码  二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图案表示二进制数据,被设备扫描后可获取其中所包含的信息。一维条码的宽度记载着数据,而其...

    二维码及其识别技术

    什么是二维码

      二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图案表示二进制数据,被设备扫描后可获取其中所包含的信息。一维条码的宽度记载着数据,而其长度没有记载数据。二维条码的长度、宽度均记载着数据。二维条码有一维条码没有的“定位点”和“容错机制”。容错机制在即使没有辨识到全部的条码、或是说条码有污损时,也可以正确地还原条码上的资讯。

    二维码的分类

      二维码的种类很多,不同的机构开发出的二维码具有不同的结构以及编写、读取方法。主要有堆叠式二维码(又称:行排式二维条码或堆积式二维条码或层排式二维条码)和矩阵式二维码(又称棋盘式二维条码)两类:

    (1)堆叠式二维码

    • PDF417
    • Code49
    • Code16K
    • Ultracode

    (2)矩阵式二维码

    • QR码
    • Code One
    • Aztec
    • Data Matrix
    • Maxicode
    • 龙贝码
    • 矽感网格矩阵(GM)
    • 矽感紧密矩阵(CM)
    • 汉信码

      其中龙贝码、矽感网格矩阵(GM)、矽感紧密矩阵(CM)和汉信码具有国内专利技术的二维码。

    国外的二维码主要类型见下图

    国外的二维码类型

    国内技术的二维码主要类型见下图

    汉信码GM码

    CM码龙贝码

     

    PDF417码

      PDF417条码是一种高密度、高信息含量的便携式数据文件,是实现证件及卡片等大容量、高可靠性信息自动存储、携带并可用机器自动识读的理想手段

      PDF417码是由留美华人王寅敬(音)博士发明的。PDF是取英文Portable Data File三个单词的首字母的缩写,意为“便携数据文件”。因为组成条码的每一符号字符都是由4个条和4个空构成,如果将组成条码的最窄条或空称为一个模块,则上述的4个条和4个空的总模块数一定为17,所以称417码或PDF417码。

    PDF417 PDF4-17码

      PDF417二维条码是一种高密度、高信息含量的便携式数据文件,是实现证件及卡片等大容量、高可靠性信息自动存储、携带并可用机器自动识读的理想手段。PDF417条码可表示数字、字母或二进制数据,也可表示汉字。一个PDF417条码最多可容纳1850个字符或1108个字节的二进制数据,如果只表示数字则可容纳2710个数字。PDF417的纠错能力分为9级,级别越高,纠正能力越强。由于这种纠错功能,使得污损的417条码也可以正确读出。我国目前已制定了PDF417码的国家标准。中国-PDF417二维条码已列为95期间的国家重点科技攻关项目。97年12月PDF417条码国家标准《四一七条码》已经正式颁布。

      PDF417条码的特点及优点:

    1. 信息容量大:根据不同的条空比例每平方英寸可以容纳250到1100个字符。在国际标准的证卡有效面积上(相当于信用卡面积的2/3,约为76mm*25mm), PDF417条码可以容纳1848个字母字符或2729个数字字符,约500个汉字信息。这种二维条码比普通条码信息容量高几十倍。
    2. 编码范围广:PDF417条码超越了字母数字的限制,可以将照片、指纹、掌纹、签字、声音、文字等凡可数字化的信息进行编码
    3. 保密、防伪性能好:PDF417条码具有多重防伪特性,它可以采用密码防伪、软件加密及利用所包含的信息如指纹、照片等进行防伪,因此具有极强的保密防伪性能。
    4. 译码可靠性高:普通条码的译码错误率约为百万分之二左右,而PDF417条码的误码率不超过千万分之一,译码可靠性极高。
    5. 修正错误能力强:PDF417条码采用了世界上最先进的数学纠错理论,如果破损面积不超过50%,条码由于沾污、破损等所丢失的信息,可以照常破译出丢失的信息
    6. 容易制作且成本很低:利用现有的点阵、激光、喷墨、热敏/热转印、制卡机等打印技术,即可在纸张、卡片、PVC、甚至金属表面上印出PDF417二维条码。由此所增加的费用仅是油墨的成本,因此人们又称PDF417是“零成本”技术。
    7. 条码符号的形状可变:同样的信息量,PDF417条码的形状可以根据载体面积及美工设计等进行自我调整。

      PDF417在我国的应用前景:

      由于二维条码具有成本低,信息可随载体移动、不依赖于数据库和计算机网络、保密防伪性能强等优点,结合我国人口多、底子薄、计算机网络投资资金难度较大、对证件的防伪措施要求较高等特点,可以预见,PDF417条码在我国极有推广价值。可以应用在如下领域:

    1. 证件管理:由于二维条码可以把照片或指纹编在二维条码中,有效地解决了证件的可机读及防伪等问题,因此可广泛地应用在护照、身份证、驾驶证、暂住证、行车证、军人证、健康证、保险卡等任何需要唯一识别个人身份的证件上。
    2. 执照年检行车证、驾驶证的年审,各种工商营业执照、税务登记证、卫生检疫证、企事业代码证、 统计登记证等各种政府部门登记证件的年检,可以通过采用二维条码,解决年检登记的计算机录入问题,既节约了政府工作人员的时间,同时,为企事业单位提供了良好的服务。 采用这种先进的技术,有利于改善政府的服务和公众形象。
    3. 报表管理海关报关单、税务报表、保险登记表等任何需重复录入或禁止伪造、删改的表格,都可以将表中填写的信息编在PDF417条码中,以解决表格的自动录入和防止篡改表中内容。
    4. 机电产品的生产和组配线:如汽车总装线、电子产品总装线,皆可采用二维条码并通过二维条码实现数据的自动交换。
    5. 银行票据管理。
    6. 行包、货物的运输和邮递。

     

    QR二维码 

      QR码是二维条码的一种,1994年由日本DENSO WAVE公司发明。QR来自英文“Quick Response”的缩写,即快速反应的意思,源自发明者希望QR码可让其内容快速被解码。根据Denso Wave公司的网站数据,QR码是属于开放式的标准,QR码的规格公开,虽由Denso Wave公司持有的专利权益,但不会被运行。QR码最常见于日本,并为目前日本最流行的二维空间条码。QR码比普通条码可存储更多数据,亦无需像普通条码般在扫描时需直线对准扫描仪。

      QR码呈正方形,只有黑白两色。在3个角落,印有较小,像“回”字的的正方图案。这3个是帮助解码软件定位的图案,用户不需要对准,无论以任何角度扫描,数据仍可正确被读取。符号规格21×21模块(版本1)-177×177 模块(版本40)(每一规格:每边增加4个模块)。数据表示方法:深色模块表示二进制“1”,浅色模块表示二进制“0”。除了标准的QR码之外,也存在一种称为“微型QR码”的格式,是QR码标准的缩小版本,主要是为了无法处理较大型扫描的应用而设计。微型QR码同样有多种标准,最高可存储35个字符。

    诫子书
    QR码示例:

      内容为诸葛亮的《诫子书》:夫君子之行,静以修身,俭以养德,非澹薄无以明志,非宁静无以致远。夫学须静也,才须学也,非学无以广才,非志无以成学。淫慢则不能励精,险躁则不能治性。年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及。

     

    QR码与PDF417比较: 

    1. QR码比PDF417识别速度快,可达到30个/秒,而PDF417为3个/秒;
    2. QR码可以实现360°全方向旋转识读,PDF417需要在+/-10°的范围内才能被识读;
    3. QR码表示汉字的效率比PDF417码高20%,QR码使用13bit表示一个汉字,而PDF417使用16bits表示一个汉字
    4. QR码数据容量大,信息密度大,最多可表示多达3KB的内容,PDF417最多确只能表示1KB的内容
    5. QR码是正方形,PDF417是长方形,同样数据容量、有限的面积的情况下QR码可以表示更多的内容;
    6. QR码对识读设备要求较低,PDF417当容量比较大时长度也会随之增加,所以就要求识读设备可以读取较长的空间;
    7. 支持QR码开发的工具控件非常多,使用起来非常方便;
    8. QR码又被称为手机二维码,所以QR码不但支持了传统PC设备上的Windows、Linux等系统,还支持了手机平台的主要系统,例如:Windows Mobile、Symbian OS、等,而PDF417尚未见过类似的应用。

    QR码数据容量:

    数字最多7,089字符
    字母最多4,296字符
    二进制数(8 bit)最多2,953 字节
    日文汉字/片假名最多1,817字符(采用Shift JIS)
    中文汉字最多984字符(采用UTF-8)
    中文汉字最多1,800字符(采用BIG5)

     

     

     

     

     

    千字文上        千字文下

    以上是用QR码制作的《千字文》,前图960个字符,后图为290个字符,两图合起来共1250个字,为千字文全文(含标点)。

     

    QR码的纠错能力:

    L水平7%的字码可被修正
    M水平15%的字码可被修正
    Q水平25%的字码可被修正
    H水平30%的字码可被修正

     

     

     

      QR code有容错能力,QR码图形如果有破损,仍然可以被机器读取内容,最高可以到7%~30%面积破损仍可被读取。所以 QR code 可以被广泛使用在运输外箱上。相对的,容错愈高, QR code 图形面积愈大。所以一般折衷使用15%容错能力。

    QR码的应用:

      利用30万像素以上的照相手机,搭配手机内的QR码解码软件,对着QR码一照,解码软件会自动解读此信息,显示于手机屏幕上面。目前也有运用到Webcam的镜头来解码,预计未来所有有镜头的科技产品,都会被导入此QR码的机制。

    此外,QRDOOR、QuickMark提供PC版的QR码解码软件,让没有照相手机的用户也能直接通过PC版QR码解码软件直接截取屏幕上的QR码,以得到相关信息,让一般手机和PC用户也能体验QR码带来的方便性。

      运用QR码及GPS的手机导航技术,让用户简化在手机中输入座目标程序,只须通过QR码照像手机一照,便可及时将地理座标存储在手机当中。

    QR码的主要应用的项目可分成四类:

    1. 自动化文字传输:通常应用在文字的传输,利用快速方便的模式,让人可以轻松输入如地址、电话号码、行事历等,进行名片、进程数据等的快速交换
    2. 数字内容下载:通常应用在电信公司游戏及影音的下载,在帐单中打印相关的QR码信息供消费者下载,消费者通过QR码的解码,就能轻易连接到下载的网页,下载需要的数字内容。
    3. 网址快速链接:以提供用户进行网址快速链接、电话快速调用等。
    4. 身分鉴别与商务交易:许多公司现在正在推行QR码防伪机制,利用商品提供的QR码链接至交易网站,付款完成后系统发回QR码当成购买身分鉴别,应用于购买票券、贩卖机等。在消费者端,也开始有企业提供了商品品牌确认的服务,通过QR码链接至统一验证中心,去核对商品数据是否正确,并提供生产履历供消费者查询,消费者能够更明白商品的信息,除了能够杜绝仿冒品,对消费者的购物更是多了一层保护

     

     

     

     

    与一维条码一样,二维条码也有许多不同的编码方法,或称码制。就这些码制的编码原理而言,通常可分为以下两种类型

    1. 行排式二维条码 

      行排式二维条码(又称堆积式二维条码或层排式二维条码)
    ,其编码原理是建立在一维条码基础之上,按需要堆积成二行或多行。它在编码设计、校验原理、识读方式等方面继承了一维条码的一些特点,识读设备与条码印刷与一维条码技术兼容。但由于行数的增加,需要对行进行判定,其译码算法与软件也不完全相同于一维条码。有代表性的行排式二维条码有:Code 16K、Code 49、PDF417等。

    2. 矩阵式二维条码 

      短阵式二维条码(又称棋盘式二维条码)它是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列组合确定了矩阵式二维条码所代表的意义。矩阵式二维条码是建立在计算机图像处理技术、组合编码原理等基础上的一种新型图形符号自动识读处理码制。具有代表性的矩阵式二维条码有:Code One、Maxi Code、QR Code、 Data Matrix等。

      在目前几十种二维要码中,常用的码制有:PDF417, Data Matrix, Maxi Code,QR Code, Code 49, Code 16K ,Code one,等,除了这些常见的二维条码之外,还有Vericode条码、CP条码、Codablock F条码、田字码,Ultracode条码,Aztec条码。

    展开全文
  • halcon二维码识别

    千次阅读 2019-10-18 14:57:55
    堆叠式/行排式二维条码(又称堆积式或层排式二维码),其编码原理是建立在一维条码基础之上,按需要堆积成二行或多行。它在编码设计、校验原理、识读方式等方面继承了一维条码的一些特点,识读设备与条码印刷与一维...

    1、一维条码
    一维条码:由一组规则排列的条、空以及对应的字符组成的标记,“条”指对光线反射率较低的部分,“空”指对光线反射率较高的部分,这些条和空组成的数据表达一定的信息,并能够用特定的设备识读,转换成与计算机兼容的二进制和十进制信息。

    一维条码的码制: EAN码、39码、交叉25码、UPC码、128码、93码,ISBN码,及Codabar(库德巴码)等。

    EAN 码:是国际通用的符号体系,是一种长度固定、无含意的条码,所表达的信息全部为数字,主要应用于商品标识
    39码和128码:为目前国内企业内部自定义码制,可以根据需要确定条码的长度和信息,它编码的信息可以是数字,也可以包含字母,主要应用于工业生产线领域、图书管理等
    93码:是一种类似于39码的条码,它的密度较高,能够替代39码
    25码:主要应用于包装、运输以及国际航空系统的机票顺序编号等
    Codabar码:应用于血库、图书馆、包裹等的跟踪管理
    ISBN:用于图书管理

    组成:

    一个完整的条码的组成次序依次为:静区(前)、起始符、数据符、(中间分割符,主要用于EAN码)、(校验符)、终止符、静区(后),
    如图:

    静区,指条码左右两端外侧与空的反射率相同的限定区域,它能使阅读器进入准备阅读的状态,当两个条码相距距离较近时,静区则有助于对它们加以区分,静区的宽度通常应不小于6mm(或10倍模块宽度)。
    起始/终止符,指位于条码开始和结束的若干条与空,标志条码的开始和结束,同时提供了码制识别信息和阅读方向的信息。
    数据符,位于条码中间的条、空结构,它包含条码所表达的特定信息。
    构成条码的基本单位是模块,模块是指条码中最窄的条或空,模块的宽度通常以mm或mil(千分之一英寸)为单位。构成条码的一个条或空称为一个单元,一个单元包含的模块数是由编码方式决定的,有些码制中,如EAN码,所有单元由一个或多个模块组成;而另一些码制,如39码中,所有单元只有两种宽度,即宽单元和窄单元,其中的窄单元即为一个模块。

    2、二维条码
    二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图案表示二进制数据,被设备扫描后可获取其中所包含的信息。一维条码的宽度记载着数据,而其长度没有记载数据。二维条码的长度、宽度均记载着数据。二维条码有一维条码没有的“定位点”和“容错机制”。容错机制在即使没有辨识到全部的条码、或是说条码有污损时,也可以正确地还原条码上的信息。

    ××××××××××××××××××××××××××××××××××××××××××××
    二维条码的码制:

    1. 堆叠式/行排式二维条码
      堆叠式/行排式二维条码(又称堆积式或层排式二维码),其编码原理是建立在一维条码基础之上,按需要堆积成二行或多行。它在编码设计、校验原理、识读方式等方面继承了一维条码的一些特点,识读设备与条码印刷与一维条码技术兼容。但由于行数的增加,需要对行进行判定,其译码算法与软件也不完全相同于一维条码。有代表性的行排式二维条码有:Code 16K、Code 49、PDF417等。
    2. 矩阵式二维码
      短阵式二维条码(又称棋盘式二维码)它是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列组合确定了矩阵式二维条码所代表的意义。矩阵式二维条码是建立在计算机图像处理技术、组合编码原理等基础上的一种新型图形符号自动识读处理码制。具有代表性的矩阵式二维条码有:Code One、Maxi Code、QR Code、 Data Matrix等。
      整体说下二维码的码制:PDF417二维条码, Datamatrix二维条码, Maxicode二维条码, QR Code, Code 49, Code 16K ,Code one,等,除了这些常见的二维条码之外,还有Vericode条码、CP条码、Codablock F码、田字码、 Ultracode码,Aztec条码。
      ×××××××××××××××××××××××××××××××××××××
      特点:

    二维条码/二维码的特点
    1.高密度编码,信息容量大:可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。
    2.编码范围广:该条码可以把图片、声音、文字、签字、指纹等可以数字化的信息进行编码,用条码表示出来;可以表示多种语言文字;可表示图像数据。
    3.容错能力强,具有纠错功能:这使得二维条码因穿孔、污损等引起局部损坏时,照样可以正确得到识读,损毁面积达50%仍可恢复信息。
    4.译码可靠性高:它比普通条码译码错误率百万分之二要低得多,误码率不超过千万分之一。
    5.可引入加密措施:保密性、防伪性好。
    6.成本低,易制作,持久耐用。
    7.条码符号形状、尺寸大小比例可变。
    8.二维条码可以使用激光或CCD阅读器识读。

    3、halcon中支持的一维条码与二维码
    HALCON支持的一维码的码制:
    ‘2/5 Industrial’, ‘2/5 Interleaved’, ‘Codabar’, ‘Code 128’, ‘Code 39’, ‘Code 93’, ‘EAN-13 Add-On 2’, ‘EAN-13 Add-On 5’, ‘EAN-13’, ‘EAN-8 Add-On 2’, ‘EAN-8 Add-On 5’, ‘EAN-8’, ‘GS1 DataBar Expanded Stacked’, ‘GS1 DataBar Expanded’, ‘GS1 DataBar Limited’, ‘GS1 DataBar Omnidir’, ‘GS1 DataBar Stacked Omnidir’, ‘GS1 DataBar Stacked’, ‘GS1 DataBar Truncated’, ‘GS1-128’, ‘MSI’, ‘PharmaCode’, ‘UPC-A Add-On 2’, ‘UPC-A Add-On 5’, ‘UPC-A’, ‘UPC-E Add-On 2’, ‘UPC-E Add-On 5’, ‘UPC-E’, ‘auto’

    用到的函数:
    create_bar_code_model
    find_bar_code
    clear_bar_code_model
    ×××××××××××××××××××××××××××××××××××××××××××××××××××
    HALCON支持的二维码的码制:
    ‘Aztec Code’, ‘Data Matrix ECC 200’, ‘GS1 Aztec Code’, ‘GS1 DataMatrix’, ‘GS1 QR Code’, ‘Micro QR Code’, ‘PDF417’, ‘QR Code’
    用到的函数:
    create_data_code_2d_model
    find_data_code_2d
    clear_data_code_2d_model

    4、一维条码halcon中实战
    首先测试 一维码。 码制选择为:Code 128
    相关资料:http://www.systron.com.cn/128.htm
    素材见下图:

    read_image(Image,‘128.jpg’)
    rgb1_to_gray (Image, GrayImage)
    dev_set_draw (‘margin’)
    *第一步:读取模板
    *创建一个条形码阅读器的模型。
    *参数一:输入 通用参数可以调整条形码模型的名称。
    *参数二:通用参数可以调整条形码模型值。
    *参数三: 返回的条码模板句柄
    create_bar_code_model ([], [], BarCodeHandle)
    *第二步:使用模板
    *检测和读取条形码符号中的图像。
    **参数以此是:
    *输入的图像,输出的区域。
    *输入的模板句柄,输入条码的码制
    *返回所有成功解码的条码数据字符串。
    find_bar_code (GrayImage, SymbolRegions, \
    BarCodeHandle, ‘auto’, \
    DecodedDataStrings)
    **既然读取来就显示一下吧
    disp_message (3600, DecodedDataStrings, \
    ‘window’, 12, 12, ‘black’, ‘true’)
    *第三步:从内存中把模板清理掉,当然了 你想叫销毁也可以
    clear_bar_code_model (BarCodeHandle)

    read_image :读图

    create_data_code_2d_model :创建二维码模型

    find_data_code_2d :查找二维码

    clear_data_code_2d_model :清除二维码模型

    还有几个算子也值得注意一下:

    set_data_code_2d_param :设置解码时的参数

    get_data_code_2d_param :获取解码时的参数(如果没有设置过,则获得的是默认值)

    get_data_code_2d_results :获得解码后的一些结果
    四、提高解码能力的其他措施

    如果二维码图像预处理以后,仍旧解码困难或者解码率不高,那么可以通过以下措施进一步提高解码能力:

    1、如果整张图信息太多,则可以先把二维码区域挖出来,使用reduce_domain和crop_domain算子,这样不仅可以降低解码难度,还可以减少解码时间。

    2、当二维码很小的时候,可以尝试用zoom_image_factor放大了二维码图像。

    3、create_data_code_2d_model (‘QR Code’, [], [], DataCodeHandleQR)

    创建模型时,[ ]中不填内容,实际默认属性名是‘default_parameters’,默认属性值是‘standard_recognition’。

    如果想大幅度提高解码成功率,可以将属性值置为‘enhanced_recognition’或者‘maximum_recognition’。注意:解码能力越强,解码时间越长。

    4、find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, ‘train’, ‘all’, ResultHandles, DecodedDataStrings)

    该算子中的GenParamNames、GenParamValues默认是空的,就是说直接找,找不到拉倒。如果是’train’,就是一面找一面调整模板参数。

    默认情况下,它只会最多找到1个二维码。如果想找出更多的二维码(例如3个),可以这样:

    find_data_code_2d (Image2, SymbolXLDs, DataCodeHandle, ‘stop_after_result_num’, 3, ResultHandles, DecodedDataStrings)

    5、如果对于质量很差的二维码,可以模拟日常手机扫码时的操作,即多次改变曝光,多次解码的方式,参考文章:

    https://www.cnblogs.com/xh6300/p/9809692.html

    6、通过set_data_code_2d_param算子设置解码时的参数,可以有效提高解码能力。(见下文)

    五、set_data_code_2d_param算子的参数解析

    ‘default_parameters’

    ‘standard_recognition’、‘enhanced_recognition’、‘maximum_recognition’

    ‘timeout’

    延迟时间,超过这个时间还没找到就不找了

    ‘polarity’

    极性,可设置’dark_on_light’(白色背景黑码)或者’light_on_dark’

    ‘module_size_min’

    最小码粒像素大小,码粒大小指的二维码中矩形颗粒的宽度(存疑)

    ‘module_size_max’

    最大码粒像素大小
    5、二维码识别halcon中实战
    素材:

    read_image(Image,‘222.jpg’)
    rgb1_to_gray (Image, GrayImage)
    第一步:创建模板***************************************************************************
    *初学者创建模板时建议选择使用默认参数集(参数集,是多个参数构成的集合):‘default_parameters’
    *default_parameters有3种识别模式(识别模式越强,适应场合越广,适应能力和识别能力越强,但耗时越多):
    *standard_recognition 标准模式
    *enhanced_recognition 加强模式
    *maximum_recognition 最强模式
    *建议初学者选用 ‘maximum_recognition’
    *参数一:输入你要读取的二维码的码制
    *参数二:通用参数可以调整为二维码数据模型的名称。
    *参数三:通用参数可以调整为二维码数据模型的价值。
    *参数四:返回二维码模板句柄

    create_data_code_2d_model (‘QR Code’,\
    ‘default_parameters’, \
    ‘maximum_recognition’,\
    DataCodeHandle)
    **第二步:使用模板
    find_data_code_2d (GrayImage,\
    SymbolXLDs,\
    DataCodeHandle, ‘train’, ‘all’,\
    ResultHandles, DecodedDataStrings)

    • 参数依次是
      *参数一:输入的图像
      *参数二:XLD轮廓包围成功解码后的数据代码符号。 就是如果找到二维码所在的区域 ,
      *就将那个区域的XLD返回,注意可能输组
      *参数三:所使用的模板句柄
      *参数四:查找模式。 默认是空的 就是说直接找,找不到拉倒。 如果是train,就是一面找一面调整模板参数。
      *参数五:可选的泛型参数的值。
      *参数六:所有成功解码二维码数据符号的句柄。为啥是句柄呢? 如果解码的数据可能很多了。
      *参数七:返回图像中的所有检测到的二维码的数据符号的译码数据串。
      **第三步: 释放模板
      clear_data_code_2d_model(DataCodeHandle)
      ————————————————
    *提高解码率的设置项:
    *1'default_parameters', ''enhanced_recognition''
    *2'polarity', 'dark_on_light'
    *3['module_size_min','module_size_max']
    *4、挖出二维码区域,挖得越精确越好(周围最好不要有其他黑色像素块干扰),这一部分我现在只是粗略挖了一下
    *5、增强图像对比度,我设计的函数enhanced_contrast (将图像色阶从0-255重新映射到Min到Max之间)
    
    * create_data_code_2d_model ('QR Code', 'default_parameters', 'enhanced_recognition', DataCodeHandleQR) 
    create_data_code_2d_model ('QR Code', [], [], DataCodeHandleQR) 
    
    set_data_code_2d_param (DataCodeHandleQR, 'default_parameters', 'enhanced_recognition')
    set_data_code_2d_param (DataCodeHandleQR, 'timeout', 200)
    set_data_code_2d_param (DataCodeHandleQR, 'polarity', 'dark_on_light')
    
    * 码粒个数设置(有几种二维码设置这个参数非法)
    * set_data_code_2d_param(DataCodeHandleQR,'symbol_size_max', 11)
    * set_data_code_2d_param(DataCodeHandleQR,'symbol_size_max', 31)
    
    count := 0
    dev_set_line_width (3)
    dev_set_draw('margin')
    
    list_files ('OK_NG', ['files','follow_links','recursive'], ImageFiles)
    tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
    for i:= 0 to |ImageFiles|-1 by 1       
        read_image(Image,ImageFiles[i])  
        
        *挖出条码区域,提高解码率和解码速度
        gen_rectangle1 (Rectangle, 50, 100, 560, 700)  
        reduce_domain (Image, Rectangle, ImageReduced)
        crop_domain (ImageReduced, ImagePart)
        
        *增强图像对比度(后文有该函数说明)
        enhanced_contrast (ImagePart, Image2, 40, 180)
       
        * 码粒像素设置
        set_data_code_2d_param(DataCodeHandleQR, ['module_size_min','module_size_max'], [12,40])
        
        *如果GenParamNames, GenParamValues不填,那么默认只找一个二维码,将'stop_after_result_num'设置为3指最多找3*     find_data_code_2d (Image2, SymbolXLDs, DataCodeHandleQR, [], [], ResultHandles, DecodedDataStrings)
        find_data_code_2d (Image2, SymbolXLDs, DataCodeHandleQR, 'stop_after_result_num', 3, ResultHandles, DecodedDataStrings)
    
        tuple_length (DecodedDataStrings, Length)
        
        *找不到的话,改一下参数再找一遍
        if (Length == 0)
            set_data_code_2d_param (DataCodeHandleQR, ['module_size_min','module_size_max'], [20,40])
            find_data_code_2d (Image2, SymbolXLDs, DataCodeHandleQR, [], [], ResultHandles, DecodedDataStrings)
        endif
        
        tuple_length (DecodedDataStrings, Length)
        if (Length > 0 )
            count := count + 1
        endif
        
        *这个算子好像并不能评价质量
        get_data_code_2d_results (DataCodeHandleQR, 'all_candidates', 'quality_isoiec15415_labels', ResultValues)
        get_data_code_2d_param (DataCodeHandleQR, 'polarity', GenParamValues)
        dev_display(SymbolXLDs)
        disp_message (3600, '解码结果:' + DecodedDataStrings, 'image', 20, 50, 'black', 'true')
        disp_message (3600, '解码成功率:' + count + '/' +|ImageFiles| , 'image', 40, 50, 'black', 'true')
    *      stop ()
    endfor
    
    展开全文
  • 方案背景 随着社会生活水平的不断提高,电子烟已普遍成为一种大众消费电子产品。...使用正运动技术机器视觉二维码识别系统可对电子烟追踪和生产过程进行有效控制。产品上印刷的日期代码和批次可以..
  • 点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达 本文转自|新机器视觉生活在数字时代的我们,很多场合都用到了二维码。看网页要扫二维码,加好友要扫二维...
  • 现在内容中的二维码会被自动替换为相应的链接,并缀以“(二维码自动识别)”字样。今天就来看,如何用Python自动识别二维码。01. 编码首先要熟悉一套理论:什么是二维码?条形码我们都见过,这就是一种“一维码”。...
  • 基于matlab GUI 二维码生成与识别 二、源代码 function varargout = QRcode(varargin) % QRCODE MATLAB code for QRcode.fig % QRCODE, by itself, creates a new QRCODE or raises the existing % singleton*. % % ...
  • 二维码识别 基于stm32 ov7725

    千次阅读 2018-04-03 15:56:00
    二维码识别技术在我们的生活中应用的很方便了,但基本都是基于手机的,目前在公交车上也存在了扫描二维码机器,上次坏了之后,发现一只小企鹅,原来是基于linux的,这里介绍一下基于stm32f767和ov7725以及zbar的...
  • 浅析二维码基本原理

    千次阅读 2020-10-21 16:08:01
    随着科技的发展,人的感官认识能力逐渐的被机器模拟出来。模式识别是对物体的直观信息进行读取识别,而这些信息通常数据量大且较为复杂,所以模式识别技术很难应用到对识别效率要求较高的应用领域,例如交通运输、...
  • 基于MATLAB的一维条码二维码识别课题背景介绍条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、...
  • 二维码工作原理

    千次阅读 2012-09-06 15:47:35
     条码技术是研究如何把计算机所需要的数据表示成条码形式,和如何将条码表示的数据和符号转变为计算机可以自动采集、识别的数据。因而,条码技术就包括从编码到制作、识读、处理等一系列技术。  根据不同的编码...
  • 二维码原理

    千次阅读 2012-05-24 11:21:33
     条码技术是研究如何把计算机所需要的数据表示成条码形式,和如何将条码表示的数据和符号转变为计算机可以自动采集、识别的数据。因而,条码技术就包括从编码到制作、识读、处理等一系列技术。  根据不同的编码...
  • 相信大家在平常的生活中,如果遇到扫码的场景第一个想到的应该就是微信了,可以说微信使用二维码打开了移动互联网的另一扇大门,并且在扫码体验上及其优秀,本该有一定要求的扫码过程,在经过微信的优化之后,让用户...
  • 二维码是什么原理?不知道从什么时候开始,我们的生活突然之间就充满了二维码,看网页要扫二维码,加好友要扫二维码,现在连楼下卖草莓的大爷都支持扫码支付,那么,你有没有想过,这个长得很奇怪的二维码,到底是...
  • 软件设计就是在嵌入式Arduino上构建控制系统,用来控制物料车基本的移动,机器臂的抓取,摄像头的位置等操作,而在树莓派上构建软件开发环境,在OpenCV框架下,通过C++语言实现二维码的检测和...
  • 随时支付宝和微信的线下不断推广,目前使用手机进行二维码支付已经逐渐成为一种时尚了。 但是大家有没有思考过:这种便捷的支付方式到底安不安全呢?今天我们就针对这个话题来进行一些探讨吧。 2二维码简介 ...
  • 数据挖掘和机器学习中,数据以向量表示。例如某个淘宝店2012年全年的流量及交易情况可以看成一组记录的集合,其中每一天的数据是一条记录,格式如下: (日期, 浏览量, 访客数, 下单数, 成交数, 成交金额) 其中“日期...
  • 二维码的生成细节和原理

    千次阅读 2015-03-10 15:34:13
    二维码的生成细节和原理 FROM: http://coolshell.cn/articles/10590.html#jtss-tsina 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存...
  • opencv-python作为经典的计算机视觉,图片处理平台,可以用来开发很多基础应用,关于opencv-python里边函数的应用小结如下,欢迎讨论: 人脸检测 一般用 haar...识别形状 如直线 圆形 可以用hough_LineP, hough_c...
  • 深圳市巨风科技有限公司专注人脸识别与人证核验研发生产,提供人脸识别场景应用解决方案,致力智慧城市建设智能化管理。公司围绕全场景智慧生活...电梯刷卡、二维码、人脸识别梯控功能可分层控制,自动点亮楼层。免布
  • 【MaixPY 教程】用mixly玩转k210——条形码、二维码、AprilTag识别 【MaixPy系列教程:】 【MaixPy教程】用maixHub训练模型进行开源硬件识别 【MaixPy 教程】用mixly玩转K210——口罩识别 【MaixPy教程】用mixly玩...
  • 二维码

    2012-04-18 14:52:24
     条码技术是研究如何把计算机所需要的数据表示成条码形式,和如何将条码表示的数据和符号转变为计算机可以自动采集、识别的数据。因而,条码技术就包括从编码到制作、识读、处理等一系列技术。  根据不同的编码...
  • 机器来说还是同样的二维码,除了软件操作的部分,我们人类对二维码的修改主要常见的有这几种情况,我们不妨盘点一下。 1.二维码颜色的调整 这种比较常见,一般普通的二维码是黑白色调,颜色调整就是做简单的替换,...
  • 手机端车牌识别过程包括图像采集、图像预处理、车牌定位、字符分割、字符识别、输出结果等一系列算法运算,其流程如下图所示: 其中图像采集是通过视频流识别,对视频进行解...,移动端车牌识别识别速度为毫秒级别...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,429
精华内容 2,171
关键字:

二维码机器识别原理