二维码分类

您所在的位置:网站首页 一维码的种类和用途 二维码分类

二维码分类

2024-07-13 18:16| 来源: 网络整理| 查看: 265

二维码分类

最近在做二维码解码的项目。用的是zxing库+VS2015+OPENCV3.4,网上说ZBAR库也ok; 概念: 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二位方向上)分布的黑白相间的图形记录数据符号信息的图形。

一维条码

一维条码是由一组粗细不同、黑白(或彩色)相间的条、空及其相应的字符(数字字母)组成的标记,即传统条码。

一维条码示意图: 一维码示意图 二维条码

二维条码是用某种特定的几何图形按一定规律在平面(二维方向)上分布的条、空相间的图形来记录数据符号信息。 二维码:

二维码示意图

二维条码也有许多不同的码制,就码制的编码原理而言,通常分为三种类型:

1.线性堆叠式二维码 2.矩阵式二维码 3.邮政码

线性堆叠式二维码 编码原理:建立在一维条码基础之上,按需要堆积成两行或多行,整体风格类似一维码。 线性堆叠式二维码示意图:

线性式堆叠式二维码 矩阵式二维码

在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,是最为常见的二维码类型,其中包含了最为流行的QR_Code。 矩阵式二维码示意图: 常见矩阵式二维码 邮政码

邮政码通过不同长度的条进行编码,主要用于邮件编码,如:POSTNET、BPO 4-STATE,一般通过不同长度的条作为邮件编码。 在这里插入图片描述

目前流行的三大国际标准: PDF417:不支持中文 DM:专利未公开,需支付专利费用 QR Code:专利公开,支持中文

QR Code比其他二维码相比具有的优势:

识读速度快数据密度大占用空间小

QR Code是由日本Denso公司于1994年研制的一种矩阵二维码符号吗,全称是Quick Response Code

Data Matrix码 ata Matrix原名Data code,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明,整个图形尺寸伸缩自如,大可以做成1米1米。小可以做成0.30.3mm。Data Matrix又可分为ECC000-140与ECC200两种类型,ECC000-140具有多种不同等级的错误纠正功能,而ECC200则透过Reed-Solomon演算法产生多项式计算出错误纠正码,其尺寸可以依需求印成不同大小,但采用的错误纠正码应与尺寸配合,由于其演算法较为容易,且尺寸较有弹性,故一般以ECC200较为普遍,常应用于电子产品表面。 ECC200 是最新的 Data Matrix码版本,可以配置为正方形或矩形。ECC200 已国际标准化。当需要 Data Matrix 码时,通常使用 ECC200 版本。 Data Matrix(ECC200)码结构 Data Matrix 码的数据区域四周为 L 形框(称为“对准图案”)和点线(称为“时钟图案”)。读取器将捕获这些图案,通过图像处理技术确定代码的位置。因此,可从任何方向上读取 Data Matrix 码。 当模块数目超过 24 × 24 时,代码将分成区块,每侧不会超过 24 个模块。此结构可防止代码失真。 在这里插入图片描述 共有 24 种代码尺寸,范围为从 10 × 10 模块到 144 × 144 模块(对于矩形,共有六种尺寸)。 当某个代码的模块数目超过 26 × 26(对于数据,模块数目超过 24 × 24)时,它会划分为区块,如下所示,每侧不超过 24 个模块。此结构可防止代码失真。

在这里插入图片描述

工程中用到的一些二维码: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 AprilTags 换了份工作又要开始解码了,我是上辈子看太多毛片被诅咒了吗?要如此折磨我,不出意外的话,未来两年的工作重心就放在解码相关项目上。 最近的工作主要是以AprilTags二维码为主,AprilTags在概念上类似于QR码,因为它们是一种二维条形码。 但是,降低了复杂度以满足实时性要求,它们被设计用于编码更小的数据有效载荷(4到12位之间),从而可以更长距离地检测它们。 此外,它们设计用于高定位精度 - 可以计算AprilTag相对于相机的精确3D位置。 与普通二维码相比, AprilTags可在更远距离、较差光线和更扭曲的图像环境下被检测到。 AprilTags可应对所有种类的图像失真问题,而二维码并不能。也就是说, AprilTags只能将数字D编码作为其有效载荷。 官网:https://april.eecs.umich.edu/software/apriltag.html git仓库地址:https://github.com/AprilRobotics/apriltag

AprilTags可以应用于:

相机标定 目标大小估计 测量相机到目标的距离 3D 定位(3D positioning) 机器人 SLAM 自主导航(autonomous navigation)

AprilTag family默认的是:Tag36h11,在AprilTags中有六个系列families:

Tag36h11 TagStandard41h12 TagStandard52h13 TagCircle21h7 TagCircle49h12 TagCustom48h12

在这里插入图片描述

标签系列的区别?

例如,TAG16H5家族,16为16个像素块,5为假阳性值,其实际上是一个4x4的方形标签。一般来说,默认使用族TAG36H11。当然现在AprilTag更新到了第三代,使用tagStandard41h12更好。

APRILTAG原理 AprilTag内容主要包含三个步骤。

第一步:根据梯度检测出图像中的各种边缘 第二步:在边缘图像中找出需要的四边形图案并进行筛选 AprilTag尽可能的对检测出的边缘检测,首先剔除非直线边缘,在直线边缘进行邻接边缘查找,最终若形成闭环则为检测到一个四边形)

第三步:进行二维码编码和二维码解码 编码方式分为三种,其黑边色块长度分别为8,7,6三个色块长度,对于解码内容,要在检测到的四边形内生成点阵列用于计算每色块的值,再根据局部二值模式(Local Binary Patterns)构造简单分类器对四边形内的色块进行分类,将正例色块编码为1将负例色块编码为0,就可以得到该二维码的编码。得到编码以后再与已知库内的编码进行匹配,确定解码出的二维码是否为正确。

APRILTAG图像生成 下载openmv软件

中国官网地址:http://openmv.cc (点击 软件下载) 美国官网下载地址:https://openmv.io/pages/download 安装后打开,依次按照图示进行,选择相应文件夹生成即可 在这里插入图片描述 四、OPENMV实现 利用OpenMV自带函数 find_apriltags 寻找Apriltag

import sensor, image, time, math sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QQVGA) # 如果分辨率更大,我们的内存会耗尽... sensor.skip_frames(time = 2000) sensor.set_auto_gain(False) # 必须关闭此功能,以防止图像冲洗… sensor.set_auto_whitebal(False) # 必须关闭此功能,以防止图像冲洗… clock = time.clock() # 注意!与find_qrcodes不同,find_apriltags方法不需要对图像进行镜头校正 # apriltag代码最多支持可以同时处理6种tag家族。 # 返回的tag标记对象,将有其tag标记家族及其在tag标记家族内的id。 def family_name(tag): if(tag.family() == image.TAG16H5): return "TAG16H5" if(tag.family() == image.TAG25H7): return "TAG25H7" if(tag.family() == image.TAG25H9): return "TAG25H9" if(tag.family() == image.TAG36H10): return "TAG36H10" if(tag.family() == image.TAG36H11): return "TAG36H11" if(tag.family() == image.ARTOOLKIT): return "ARTOOLKIT" while(True): clock.tick() img = sensor.snapshot() for tag in img.find_apriltags(): # 如果没有给出家族,默认TAG36H11。 img.draw_rectangle(tag.rect(), color = (255, 0, 0)) img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0)) print_args = (family_name(tag), tag.id(), (180 * tag.rotation()) / math.pi) print("Tag Family %s, Tag ID %d, rotation %f (degrees)" % print_args) print(clock.fps())

另外,在查阅资料的时候发现MaixPY 也可以实现类似的功能。

在这里插入图片描述 在这里插入图片描述

最后感谢慕课网老师:https://www.imooc.com/video/10311 参考:https://www.freesion.com/article/42341128173/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3