教你用Python实现实时二维码识别

鸽了好久,最近准备要更新了,想了很久将来可能会固定化的更新内容,会照顾我各种读者,比如这个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操作。其实大家可以尝试一些,改写一下程序把二维码实时的圈起来显示。我尽量把这个专题做到周更吧,最后祝大家身体健康。

你可能感兴趣的:(教你用Python实现实时二维码识别)