AI嵌入式K210项目(26)-二维码识别


前言

本章介绍基于机器视觉实现二维码识别,主要包含两个过程,首先检测图像中是否有二维码,如果有则框出并打印二维码信息;

一、什么是二维码?

二维码,也称为二维条码,是一种在二维方向上编码信息的方式。它使用特定的几何图形按一定规律在平面上分布,形成黑白相间的图形。二维码是在一维条码的基础上扩展出来的,比一维条码能存更多的信息,也可以表示更多的数据类型。设备通过扫描二维码,可以识别条码中的二进制数据并获取其中的信息。二维码具有成本低、稳定可靠、简单易用等特点,被广泛应用于电子公文、票据、证件管理、包裹、货运物品追踪、仓储盘点、出版印刷业信息交换等领域,极大地提高了数据采集和信息处理的速度,提高了工作效率。此外,二维码还可以表示图像、多种语言,便于加密处理。同时,融入数字水印防伪技术后的二维码可以防止对条码的伪造和非法复制,能够更有效的对信息进行加密,进一步保护产权,打击盗版,具有广阔的商业开发价值和应用前景。

二、实验准备

首先我们先生成一个带有信息的二维码图片,用于验证我们的功能;可以到https://cli.im/url这个网站上进行免费生成
在这里插入图片描述

生成后如下图所示:
在这里插入图片描述

三、实验过程

导入相关库,并初始化摄像头和LCD显示屏;

import sensor, image, time, lcd
​
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 100)

利用内置find_qrcodes函数来查找是否有二维码,如果有则把二维码框出来,并打印出二维码信息。

clock = time.clock()
while(True):
    clock.tick()
    img = sensor.snapshot()
    for code in img.find_qrcodes():
        img.draw_rectangle(code.rect(), color = 127, thickness=3)
        print(code)
    lcd.display(img)
    #print(clock.fps())

在这里插入图片描述
串口信息大小印如下,可以看到二维码信息被正确读取了;
在这里插入图片描述

四、API接口

更多API接口可以参考https://developer.canaan-creative.com/canmv/main/canmv/library/index.html
在这里插入图片描述

函数说明
qrcode.corners()返回一个由该对象的四个角组成的四个元组(x,y)的列表。四个角通常是按照从左上角开始沿顺时针顺序返回的。
qrcode.rect()返回一个矩形元组(x, y, w, h),用于如二维码的边界框的
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不支持解析这类文本。

总结

本章介绍了使用K210调用qrcode接口进行二维码识别的应用。

  • 25
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要使用K210识别二维码后通过串口将结果发送给STM32F103,你可以按照以下步骤进行操作: 1. 首先,确保K210和STM32F103之间的串口连接正确,包括引脚连接和通信参数设置。 2. 在K210上使用适当的固件或软件来进行二维码识别和解码。你可以使用MaixPy或MicroPython等语言和框架来编写相关的代码。 3. 在K210的代码中,你可以使用相应的库或API来调用二维码识别功能,并获取识别结果。 4. 在获取到二维码识别结果后,使用串口将结果发送给STM32F103。你可以使用K210的串口库或API来进行串口通信。示例代码如下: ```python from machine import UART # 初始化K210串口 uart_k210 = UART(UART.UART1, baudrate=115200, bits=8, parity=None, stop=1, timeout=1000, read_buf_len=4096) # 初始化STM32F103串口 uart_stm32 = UART(UART.UART2, baudrate=115200, bits=8, parity=None, stop=1, timeout=1000, read_buf_len=4096) # 识别二维码并获取结果 def recognize_qrcode(): # 识别二维码的代码逻辑 # 返回识别结果 return qrcode_result # 主循环 while True: # 识别二维码 result = recognize_qrcode() # 发送结果给STM32F103 uart_stm32.write(result) # 延时一段时间,等待STM32F103处理结果 time.sleep(1) ``` 5. 在STM32F103端,你需要编写相应的代码来接收来自K210的数据,并进行处理。你可以使用STM32F103的串口库或API来进行串口通信。 请注意,以上代码仅为示例,具体的实现可能会因为你所使用的开发板、操作系统和编程语言而有所不同。在实际应用中,你需要根据具体的硬件和软件环境进行适当的调整。同时,还需确保K210和STM32F103之间串口连接的正确性,包括引脚连接和通信参数的设置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂飙车的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值