首页 > 【MaixPY 教程】用mixly玩转k210——条形码、二维码、AprilTag...

pdf417在线二维码生成,【MaixPY 教程】用mixly玩转k210——条形码、二维码、AprilTag...

互联网 2021-03-04 19:59:04
本帖最后由 猪百岁 于 2021-3-4 16:43 编辑 【MaixPY 教程】用mixly玩转k210——条形码、二维码、AprilTag识别

WedMarch-202103036880..png (94.24 KB, 下载次数: 0)

下载附件 保存到相册

昨天 14:37 上传

前言

随着科技的发展,移动支付让人们的生活变得越来越便捷,可是与之背后的原理我们又了解多少呢?那么今天就让我带领大家一起用milxy一起去实现:条形码、二维码、AprilTag识别。

准备阶段

Maixduino

typec 数据线

条形码、二维码、Apriltag码若干

条形码什么是条形码

条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用

条形码识别原理

条码符号是由反射率不同的“条”、“空”按照一定的编码规则组合起来的一种信息符号。由于条码符号中“条”、“空”对光线具有不同的反射率,从而使条码扫描器接受到强弱不同的反射光信号,相应地产生电位高低不同的电脉冲。而条码符号中“条”、“空”的宽度则决定电位高低不同的电脉冲信号的长短。扫描器接收到的光信号需要经光电转换成电信号并通过放大电路进行放大。由于扫描光点具有一定的尺寸、条码印刷时的边缘模糊性以及一些其他原因,经过电路放大的条码电信号是一种平滑的起伏信号,这种信号被称为“模拟电信号”。“模拟电信号”需经整形变成通常的“数字信号”。根据码制所对应的编码规则,译码器便可将“数字信号”识读译成数字、字符信息

BarCode类

MaixPy固件中的内置库image库内置了BarCode类,专门用于识别条形码。其中他的方法有:

方法名称功能barcode.corners()返回一个由该对象的四个角组成的四个元组(x,y)的列表。四个角通常是按照从左上角开始沿顺时针顺序返回的。barcode.rect()返回一个矩形元组(x, y, w, h),用于如数据矩阵的边界框的 image.draw_rectangle 等其他的 image 方法barcode.x()返回条形码的边界框的x坐标(int)barcode.y()返回条形码的边界框的y坐标(int)barcode.w()返回条形码的边界框的w宽度(int)barcode.h()返回条形码的边界框的h高度(int)barcode.payload()返回条形码的有效载荷的字符串。例:数量barcode.type()返回条形码的列举类型 (int)barcode.rotation()返回以弧度计的条形码的旋度(浮点数)barcode.quality()返回条形码在图像中被检测到的次数(int)

mixly中也有相应的条形码识别积木块在机器视觉中维码识别中如下图所示:

WedMarch-202103032697..png (18.07 KB, 下载次数: 0)

下载附件 保存到相册

昨天 14:37 上传

示例程序

WedMarch-202103032151..png (43.18 KB, 下载次数: 0)

下载附件 保存到相册

昨天 14:37 上传

import sensorimport machineimport imagesensor.reset()sensor.set_pixformat(sensor.RGB565)sensor.set_framesize(sensor.QVGA)sensor.run(1)sensor.skip_frames(10)while True:    img = sensor.snapshot()    code = img.find_barcodes([0,0,320,240])    for i in code:        code_text = i.payload()        print(code_text)

实验结果:

WedMarch-202103034151..png (104.18 KB, 下载次数: 0)

下载附件 保存到相册

昨天 14:37 上传

二维码什么是二维码

二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。

二维码的分类

二维码,从字面上看就是用两个维度(水平方向和垂直方向)来进行数据的编码,条形码只利用了一个维度(水平方向)表示信息,在另一个维度(垂直方向)没有意义,所以二维码比条形码有着更高的数据存储容量。

从形成方式上,二维码可以分为两类,

堆叠式二维码:在一维条形码的基础上,将多个条形码堆积在一起进行编码,常见的编码标准有PDF417等

ThuMarch-202103045575..png (9.98 KB, 下载次数: 0)

下载附件 保存到相册

3 小时前 上传

矩阵式二维码:在一个矩阵空间中通过黑色和白色的方块进行信息的表示,黑色的方块表示1,白色的方块表示0,相应的组合表示了一系列的信息,常见的编码标准有QR 码,汉信码等

ThuMarch-202103046654..png (33.75 KB, 下载次数: 0)

下载附件 保存到相册

3 小时前 上传

PDF417由美国研发,在美国地区使用广泛汉信码由中国自主研发,目前已在政府相关领域得到初步的使用。QR码由日本研发,目前很多的应用都是用QR码进行编码,译码(目前使用最广的是QR码,所以接下来的内容会对QR码进行讲解)

二维码的结构

一个二维码可以分为两个部分,功能图形和编码区域

ThuMarch-202103049445..png (72.07 KB, 下载次数: 0)

下载附件 保存到相册

3 小时前 上传

功能图形起到定位的作用

名称作用位置探测图形由三个黑白相间的大正方形嵌套组成,分别位于二维码左上角、右上角、左下角,目的是为了确定二维码的大小和位置。定位图形由两条黑白相间的直线组成,便于确定二维码的角度,纠正扭曲。矫正图形仅在版本2以上存在,由三个黑白相间的小正方形嵌套组成,便于确定中心,纠正扭曲。

数据区记录了具体的数据信息,纠错信息与版本信息

名称作用数据和纠错码记录了数据信息和相应的纠错码,纠错码的存在使得当二维码的数据出现允许范围内的错误时,也可以正确解码。版本信息仅在版本7以上存在,记录具体的版本信息。格式信息记录使用的掩码和纠错等级。

二维码的外围还留有一圈空白区,主要是为了便于识别而存在。

QRCode类MaixPy固件中的内置库image库内置了QRCode类,专门用于识别二位码。其中它的方法有:方法名称作用qrcode.corners()返回一个由该对象的四个角组成的四个元组(x,y)的列表。四个角通常是按照从左上角开始沿顺时针顺序返回的。qrcode.rect()返回一个矩形元组(x, y, w, h),用于如二维码的边界框的 image.draw_rectangle 等其他的 image 方法。qrcode.x()返回二维码的边界框的x坐标(int)qrcode.y()返回二维码的边界框的y坐标(int)。qrcode.w()返回二维码的边界框的w坐标(int)。qrcode.h()返回二维码的边界框的h坐标(int)。qrcode.payload()返回二维码有效载荷的字符串,例如URL 。qrcode.version()返回二维码的版本号(int)。qrcode.ecc_level()返回二维码的ECC水平(int)。qrcode.data_type()返回二维码的数据类型。qrcode.eci()返回二维码的ECI。ECI储存了QR码中存储数据字节的编码。若您想要处理包含超过标准ASCII文本的二维码,您需要查看这一数值。qrcode.is_numeric()若二维码的数据类型为数字式,则返回Trueqrcode.is_alphanumeric()若二维码的数据类型为文字数字式,则返回True。qrcode.is_binary()若二维码的数据类型为二进制式,则返回Trueqrcode.is_kanji()若二维码的数据类型为日本汉字,则返回True

mixly中也有相应的条形码识别积木块在机器视觉中维码识别中如下图所示:

ThuMarch-202103041779..png (18.32 KB, 下载次数: 0)

下载附件 保存到相册

3 小时前 上传

示例程序

ThuMarch-202103046524..png (47.08 KB, 下载次数: 0)

下载附件 保存到相册

3 小时前 上传

程序代码

import sensorimport machineimport imagesensor.reset()sensor.set_pixformat(sensor.RGB565)sensor.set_framesize(sensor.QVGA)sensor.run(1)sensor.skip_frames(10)sensor.set_hmirror(0)while True:    img = sensor.snapshot()    code = img.find_qrcodes([0,0,320,240])    for i in code:        code_text = i.payload()        print(code_text)

实验结果:可以用草料二维码生成器在线生成我们想要的内容。

ThuMarch-202103046673..png (93.85 KB, 下载次数: 0)

下载附件 保存到相册

3 小时前 上传

AprilTag什么是AprilTag?

AprilTags是基准标记的一种流行形式。它在机器人技术中具有广泛的应用,包括对象跟踪,视觉定位,SLAM准确性评估和人机交互。Isaac通过利用GPU加速同时实现高解码鲁棒性来提供实时AprilTag检测。

和条形码二维码的区别

AprilTag标记在机器视觉中显得比条形码、二维码更加有用,因为它能够通过AprilTag检测程序可以计算相对于相机的精确3D位置,方向和id;真实世界中的3D位置对于机器来说非常有用!AprilTag常用于各种任务,包括AR,机器人和相机校准。

Apriltag生成

MaixPy IDE 中在工具-》机器视觉选择中有不同码的生成如下图

ThuMarch-202103042460..png (208.19 KB, 下载次数: 0)

下载附件 保存到相册

3 小时前 上传

如果用的老师用二哈觉得官方给的标签可以用这个生成哦。

AprilTag类方法名称作用apriltag.corners()返回一个由该对象的四个角组成的四个元组(x,y)的列表。apriltag.rect()返回一个矩形元组(x, y, w, h),用于如AprilTag边界框的 image.draw_rectangle 等其他的 image 方法apriltag.x()返回AprilTag边界框的x坐标(int)。apriltag.y()返回AprilTag边界框的y坐标(int)。apriltag.w()返回AprilTag边界框的w坐标(int)。apriltag.h()返回AprilTag边界框的h坐标(int)。apriltag.id()返回AprilTag的数字ID。apriltag.family()返回AprilTag的数字家庭。apriltag.cx()返回AprilTag的中心x位置(int)。apriltag.cy()返回AprilTag的中心y位置(int)。apriltag.rotation()返回以弧度计的AprilTag的旋度(int)。apriltag.decision_margin()返回AprilTag匹配的色饱和度(取值0.0 - 1.0),其中1.0为最佳。apriltag.hamming()返回AprilTag的可接受的数位误差数值。apriltag.goodness()返回AprilTag图像的色饱和度(取值0.0 - 1.0),其中1.0为最佳。apriltag.x_translation()返回距离摄像机x方向的变换,距离的单位未知。apriltag.y_translation()返回距离摄像机y方向的变换,距离的单位未知。apriltag.z_translation()返回距离摄像机z方向的变换,距离的单位未知。apriltag.x_rotation()返回以弧度计的AprilTag在X平面上的旋度。例:目视AprilTag,从左至右移动摄像头。apriltag.y_rotation()返回以弧度计的AprilTag在Y平面上的旋度。例:目视AprilTag,从上至下移动摄像头。apriltag.z_rotation()返回以弧度计的AprilTag在Z平面上的旋度。例:目视AprilTag,旋转摄像头。

mixly中也有相应的AprilTag识别积木块在机器视觉中维码识别中如下图所示:

ThuMarch-202103044504..png (26.95 KB, 下载次数: 0)

下载附件 保存到相册

3 小时前 上传

示例程序

ThuMarch-202103046712..png (47.79 KB, 下载次数: 0)

下载附件 保存到相册

3 小时前 上传

**识别性能问题,我们应该设计摄像头的帧大小为:160120,同样ArilTag识别图像区域同样为:0,0,160,120***

程序代码import sensorimport machineimport imagesensor.reset()sensor.set_pixformat(sensor.RGB565)sensor.set_framesize(sensor.QQVGA)sensor.run(1)sensor.skip_frames(10)sensor.set_hmirror(0)while True:    img = sensor.snapshot()    code = img.find_apriltags([0,0,160,120])    for i in code:        code_text = i.id()        print(code_text)

实验结果

ThuMarch-202103048496..png (53.01 KB, 下载次数: 0)

下载附件 保存到相册

3 小时前 上传

版权声明:本文为CSDN博主「tonycarson」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/tonycarson/article/details/105999352

免责声明:非本网注明原创的信息,皆为程序自动获取自互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件24小时内删除。

相关阅读