项目Introduce:
项目名称:
通过调取摄像头实现对二维码和条形码的识别。
项目流程预览:
1.使用pip 下载pyzbar
2.创建文件
3.生成二维码
4.调取摄像头实时扫描
5.decode函数对图像解码,最后绘制图像。
项目与知识衔接:
视频处理(VideoCapture)、pyzbar条码处理、图形绘制putText
Learning From:
Python+pyzbar识别二维码条形码_wu_zhiyuan的博客-CSDN博客
Python-二维码处理(qrcode、pyzbar)_梦之海岛的博客-CSDN博客_pyzbar.decode()是什么意思
Opencv项目实战:03 扫描二维码&条形码_c#使用opencv调用摄像头识别条码_夏天是冰红茶的博客-CSDN博客
具体操作步骤以及代码:
1.创建文件,下载pyzbar:
创建一个目录,并且创建两个py文件和一个text文件
DataFile的text文件供传入二维码扫描内容,条形码信息无需填入。
下载pyzbar库,可以用pip install下载,我的配置用的是conda包,所以我在conda的命令窗口下载
然后在pycharm里查看资源包,如果看到pyzbar即表示下载成功
导入库
import cv2
import numpy as np
from pyzbar.pyzbar import decode
2.摄像头读取条形码
cap = cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)
3.读取成功时,进入while True,使用pyzbar中的dacode函数处理条码,并且绘制出条形码区域
while True:
success,img = cap.read()
for barcode in decode(img):
myData = barcode.data.decode('utf-8')
print(myData)
pts = np.array([barcode.polygon],np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255),5)
pts2 = barcode.rect
cv2.putText(img,myData,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,255),2)
4.展示结果
cv2.imshow('Result',img)
k=cv2.waitKey(1) &0xFF
if k == 27:
break
项目所需要的工具以及预设参数:
pycharm+openCV+python
实现结果展示:
代码整体展示:
#二维码条形码扫描
import cv2
import numpy as np
from pyzbar.pyzbar import decode
cap = cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)
while True:
success,img = cap.read()
for barcode in decode(img):
myData = barcode.data.decode('utf-8')
print(myData)
pts = np.array([barcode.polygon],np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255),5)
pts2 = barcode.rect
cv2.putText(img,myData,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,255),2)
cv2.imshow('Result',img)
k=cv2.waitKey(1) &0xFF
if k == 27:
break
####延伸
做一个二维码授权登陆的环节:代码如下
# #利用二维码扫描识别授权状况
import cv2
import numpy as np
from pyzbar.pyzbar import decode
cap = cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)
with open('DataFile.text') as f:
myDataList = f.read().splitlines()
while True:
success,img = cap.read()
for barcode in decode(img):
myData = barcode.data.decode('utf-8')
print(myData)
if myData in myDataList:
myOutput = 'Authorized'
myColor = (0,255,0)
else :
myOutput = 'Un-Autorized'
myColor = (0,0,255)
pts = np.array([barcode.polygon], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,myColor,5)
pts2 = barcode.rect
cv2.putText(img,myOutput,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX,0.9,myColor,2)
cv2.imshow('Result',img)
k=cv2.waitKey(1) &0xFF
if k==27:
break
实现效果: