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类 – 二维码对象函数。

  • 11
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你好!感谢提问。下面是有关 K210 学习笔记五中串口通信的一些内容: 在 K210 开发板上,串口是一种常见的通信接口,用于将数据从一个设备传输到另一个设备。串口通信通常使用 UART (Universal Asynchronous Receiver/Transmitter) 协议。 要在 K210 上进行串口通信,首先需要使用两个引脚:一个用于接收数据(RX),一个用于发送数据(TX)。这些引脚可以通过 GPIO 端口与外部设备连接。 在 K210 的开发环境中,可以使用 MaixPy 或者 Kendryte Standalone SDK 进行串口编程。 在 MaixPy 中,可以使用 `uart` 模块来进行串口通信。例如,要初始化一个串口对象并设置波特率为 115200,可以使用以下代码: ```python from machine import UART uart = UART(UART.UART1, 115200) ``` 然后,可以使用 `uart.write()` 函数发送数据,使用 `uart.read()` 函数接收数据。例如: ```python uart.write("Hello, world!\n") data = uart.read(10) ``` 在 Kendryte Standalone SDK 中,可以使用 `uart.h` 头文件中的函数来进行串口通信。例如,要初始化一个串口对象并设置波特率为 115200,可以使用以下代码: ```c #include "uart.h" uart_init(UART_DEVICE_1, 115200); ``` 然后,可以使用 `uart_send_data()` 函数发送数据,使用 `uart_receive_data()` 函数接收数据。例如: ```c uart_send_data(UART_DEVICE_1, "Hello, world!\n", 14); char buffer[10]; uart_receive_data(UART_DEVICE_1, buffer, 10); ``` 以上是关于 K210 学习笔记五中串口通信的简要介绍。如果你有更具体的问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值