鸽了好久,最近准备要更新了,想了很久将来可能会固定化的更新内容,会照顾我各种读者,比如这个Python一小时栏目,我让你在一个小时内实现一个有趣有用的小玩意,适合Python初学者或者编程兴趣者来食用。这期给大家带来的是用opencv+pyzbar来实现一个实时二维码识别的功能。(可以适配树莓派哦)
1.准备工作
首先我们要安装我们本次开发所需要的库opencv和二维码解析库pyzbar
安装opencv很简单直接:
pip install opencv-python
然后我们接着安装pyzbar,我这里使用的是Linux系统进行的开发,我这里要多安装一个东西,具体如下:
sudo apt-get install libzbar0
pip install pyzbar
这样我们本次所需要的环境就搭建好了。
2.码代码
首先导入本次所需要的库,最后一个csv是Python自带的csv表格操作库,这里我们需要把我们扫到的二维码信息都存入csv表格里。
import cv2
from pyzbar import pyzbar
import csv
然后我们设置一个变量,来存放我们扫到的二维码信息,我们每次扫描一遍都会要检测扫描到的二维码是不是之前扫描到的,如果没有就存放到这里。接着我们调用opencv的方法来实例化一个摄像头,最后我们设置一些我们存放二维码信息的表格的路径,一定要提前存放一个表格文件哦。
found = set()
capture = cv2.VideoCapture(0)
PATH = "test.csv"
然后我们要写一个死循环,我们要不停的用摄像头来采集二维码,所以我们要在死循环里来写我们的二维码采集的代码。首先我们要用刚才实例化的摄像头来采集实时的照片,然后用pyzbar的函数来解析图片里面是否有二维码
while(1):
ret,frame = capture.read()
test = pyzbar.decode(frame)
接着我们要查看我们采集到的二维码是不是之前采集到的,如果不是我们就存放到我们的表格文件里:
for tests in test:
testdate = tests.data.decode('utf-8')#读取解析到的二维码信息
print(testdate)#输出二维码信息
if testdate not in found:#判断扫描到的信息是不是之前扫描到的
with open(PATH,'a+') as f:
csv_write = csv.writer(f)
date = [testdate]
csv_write.writerow(date)
found.add(testdate)#把没有扫描到的二维码信息存放到found变量里
我们可以使用opencv的函数来实时查看摄像头的采集情况,最后再写一个键盘监听,如果我们按下q键就让循环终止,程序停止工作,不然的话会无休止的运作下去。
cv2.imshow('Test',frame)
if cv2.waitKey(1) == ord('q'):
break
3.完整代码
import cv2
from pyzbar import pyzbar
import csv
found = set()
capture = cv2.VideoCapture(0)
PATH = "test.csv"
while(1):
ret,frame = capture.read()
test = pyzbar.decode(frame)
for tests in test:
testdate = tests.data.decode('utf-8')
print(testdate)
if testdate not in found:
with open(PATH,'a+') as f:
csv_write = csv.writer(f)
date = [testdate]
csv_write.writerow(date)
found.add(testdate)
cv2.imshow('Test',frame)
if cv2.waitKey(1) == ord('q'):
break
4.后记
本篇文章介绍了简单简单的opencv调用摄像头的方法,以及二维码解析库的使用方法,顺便还给大家展示了Python如何进行io操作。其实大家可以尝试一些,改写一下程序把二维码实时的圈起来显示。我尽量把这个专题做到周更吧,最后祝大家身体健康。