实物图
俩二维码识别实物图
这段时间接触了一下基于MaixPy的开发K210的摄像头设备,的确很有趣,运行速度很快,编程难度不大。很适合咱们视觉开发的同学们学习,以下是我玩设备的一些感悟,如有不妥之处,希望大家雅正,也希望能帮助初学者了解和学习,也可加bulidupup(vx)一起学习交流!
MaixPy IDE下载链接:下载站 - Sipeed
正常安装,打开界面:
快速上手手册:MicroPython 库 — MicroPython中文 1.17 文档
很多基础的东西看看就行,只要有基础的Python程序基础就可以开始进行开发了。
连接K210摄像头按钮:
连接摄像头视频:
成功链接之后:
如果没有如上图一样的界面(注意不要像我这个糊涂蛋一样,第一次找不到这个小按钮,
眼瞎):
将自己写的代码如何上传到 K210开发板中:
就是将打开的 脚本保存到开发板的boot.py 这样就把程序下载到了开发板中。
基于一张纸上的一个二维码识别检测。
首先我们要查找二维码:
常见的二维码为 QR Code,QR 全称 Quick Response,它比传统的条形码(Bar Code)能存更多的信息,也能表示更多的数据类型。
生成一个二维码,推荐草料二维码网页生成器。草料二维码生成器 (cli.im)
image(机器视觉) - Sipeed Wiki
MaixPy 查找二维码 - Sipeed Wiki
以下文章建立在官方示例的基础上,只是把我的理解融入做了自己的项目。
官方介绍:二维码对象
知识点:
#从摄像头获取图片,将摄像头对准二维码
import image, sensor
img=sensor.snapshot()
#从图片中查找所有二维码对象(image.qrcode)列表
res = img.find_qrcodes()
#打印二维码对象
print(res[0].payload())
官方例程:
import sensor
import image
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)
sensor.run(1)
sensor.skip_frames(30)
while True:
clock.tick()
img = sensor.snapshot()
res = img.find_qrcodes()
fps =clock.fps()
if len(res) > 0:
img.draw_string(2, 2, res[0].payload(), color=(0,128,0), scale=2)
print(res[0].payload())
lcd.display(img)
实物效果图:
读取数据结果图,数据读取正确:
三、双二维码检测
首先在识别一个二维码的基础上,我在想如果一张纸上有两个二维码如果都想要他们的数据该怎么办?
首先我们要明白识别的顺序,如果一张纸上两个二维码识别环境良好的基础上,识别顺序是自左向右去识别的,如果识别环境不好这种就看运气了,这种就考虑到了左右二维码的面积以及一些数据的处理了,这个我曾经已经使用openCV解决过一次了,理论上移植是没有问题,但是由于个人的时间问题没能移植,等有时间再准备判别左右二维码。
建立在识别环境良好的基础上,我们来做二维码的识别,两个二维码的识别很简单,在某种程度上只要判别两个二维码的数据是否一致,如果不一致就一直去识别,直到识别到那个不一样的二维码。
源码(由于部分问题源码工程不能共享,大家需要自行咨询):
def Two_Qrcode():
global TW_Flag
global qr_flag
global data_1
if TW_Flag:
res = img.find_qrcodes() # 寻找二维码
if len(res) > 0:
# 在图片和终端显示二维码信息
img.draw_rectangle(res[0].rect())
img.draw_string(2,2, res[0].payload(), color=(0,128,0), scale=2)
#print(res[0].payload()) #二维码信息
data = []
data_2 = []
data_3 = []
if qr_flag == 0:
for ch in res[0].payload():
if (ch>='1' and ch<='9') or (ch>='a' and ch<='z') or (ch>='A' and ch<='Z'):
data.append(ch)
data_1 = ''.join(data)
print('第一次得数据:'+data_1)
qr_flag = 1
if qr_flag == 1:
for ch in res[0].payload():
if (ch>='1' and ch<='9') or (ch>='a' and ch<='z') or (ch>='A' and ch<='Z'):
data_3.append(ch)
data_2 = ''.join(data_3)
if data_1 == data_2:
qr_flag = 1
data_3.clear()
data_2 = ''
print('未检出第二个二维码')
else:
qr_flag = 2
print('第二次得数据:'+data_2)
if qr_flag == 1:
TW_Flag = True
if qr_flag == 2:
TW_Flag = False
识别思想如上,请大家自行去思考一下,融汇一下自然能使用。
实物效果图:
识别结果图:
总结
以上项目总结希望对大家有所帮助,也希望大家一起来学习和努力,需要源码工程自行咨询即可!谢谢大家的支持!!!