K210学习笔记(十)——二维码识别

前言

MAIX BIT(K210)和openmv在传统视觉处理这个方面代码是通用的,掌握K210的色块识别和二维码识别其实也掌握了openmv对应的用法。

一、二维码是什么?

二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。从对二维码的定位上看,二维码是一个门、一扇窗,或是一个通道,我们所看到的会因扫描它呈现出另一番广阔的景象。打开手机扫一扫、拍一拍,整个操作过程只需短短几分钟,甚至是几十秒钟。大多数情况下,通过扫描二维码可以得到制作者想要告知你的信息。
QR码的特点:
1、容错率高
QR二维码有着30%的容错率。因此即便出现30%的不正确,扫描软件也可以正确完成解读二维码。

2、信息含量大
QR二维码最多可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,是一维条形码的几十倍。计算机中常见的文字、声音、图片等信息都可以储存在二维码中,众多的语言和图像数据也可以用二维码轻松完成。

3、等等…想知道更多可以点击这里
在这里插入图片描述

二、使用方法

1.find_qrcodes() 函数

在image 模块中已经实现有查找二维码方法,需要使用非 minimum 固件版本(点击这里下载),需要准备一个二维码,可以用草料二维码生成你想要的内容.

import image, sensor
img=sensor.snapshot()
#从摄像头获取图片,将摄像头对准二维码
res = img.find_qrcodes()
#从图片中查找所有二维码对象(image.qrcode)列表
print(res[0].payload())
#操作二维码对象,例如打印信息

2.QRCode类 – 二维码对象函数

二维码对象是由 image.find_qrcodes 返回的。

函数 说明
qrcode.corners() 返回一个由该对象的四个角组成的四个元组(x,y)的列表。四个角通常是按照从左上角开始沿顺时针顺序返回的。
qrcode.rect() 返回一个矩形元组(x, y, w, h),用于如二维码的边界框的 image.draw_rectangle 等其他的 image 方法。
qrcode.x() 返回二维码的边界框的x坐标(int)。也可以通过索引 [0] 取得这个值。
qrcode.y() 返回二维码的边界框的y坐标(int)。也可以通过索引 [1] 取得这个值。
qrcode.w() 返回二维码的边界框的w坐标(int)。也可以通过索引 [2] 取得这个值。
qrcode.h() 返回二维码的边界框的h坐标(int)。也可以通过索引 [3] 取得这个值。
qrcode.payload() 返回二维码有效载荷的字符串,例如URL 。也可以通过索引 [4] 取得这个值。
qrcode.version() 返回二维码的版本号(int)。也可以通过索引 [5] 取得这个值。
qrcode.ecc_level() 返回二维码的ECC水平(int)。也可以通过索引 [6] 取得这个值。
qrcode.mask() 返回二维码的掩码(int)。也可以通过索引 [7] 取得这个值。
qrcode.data_type() 返回二维码的数据类型。也可以通过索引 [8] 取得这个值。
qrcode.eci() 返回二维码的ECI。ECI储存了QR码中存储数据字节的编码。若您想要处理包含超过标准ASCII文本的二维码,您需要查看这一数值。您也可以通过索引 [9] 取得这个值。
qrcode.is_numeric() 若二维码的数据类型为数字式,则返回True。
qrcode.is_alphanumeric() 若二维码的数据类型为文字数字式,则返回True。
qrcode.is_binary() 若二维码的数据类型为二进制式,则返回True。如果您认真处理所有类型的文本,则需要检查eci是否为True,以确定数据的文本编码。通常它只是标准的ASCII,但是它也可能是有两个字节字符的UTF8。
qrcode.is_kanji() 若二维码的数据类型为日本汉字,则返回True。设置为True后,您就需要自行解码字符串,因为日本汉字符号每个字符是10位,而MicroPython不支持解析这类文本。

三、MAIX BIT(K210)识别二维码并与STM32通讯

先用草料二维码生成一个二维码,maix bit识别后将二维码框出来并识别到的信息打印出来。有了之前与stm32串口通讯的经验,就可以将识别到的信息通过串口发送到stm32。(下面的程序没有加串口,有需要的可以cv一下)
程序:

import image
import sensor
import lcd
import time
clock = time.clock()
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(0)
lcd.rotation(2)
sensor.skip_frames(30)
while True:
    clock.tick()
    img = sensor.snapshot()
    res = img.find_qrcodes() #识别二维码
    fps =clock.fps()
    if res:
        for b in res:
            tmp=img.draw_rectangle(b[0:4])
            img.draw_string(2,2, res[0].payload(), color=(0,128,0), scale=2)#将二维码框出
            print(res[0].payload())
    lcd.display(img)

运行效果:

maix bit识别二维码

总结

用maix bit识别二维码的方法与openmv一样,现在只是初步学习了二维码识别的用法,想要深入学习,还得多使用一下QRCode类 – 二维码对象函数。

猜你喜欢

转载自blog.csdn.net/Thousand_drive/article/details/124187632
今日推荐