在生活中我们有时候会遇到用电脑扫描更方便的情形,但是奈何现在的电脑程序都没有提供扫描二维码的功能,所以我花了半天的时间专门做了一个电脑扫描二维码程序。
实现目标:利用电脑摄像头识别二维码中的内容并自动打开浏览器进行浏览,同时发出扫描成功的音效。
废话不多说,上代码!
"""
准备工作:
二维码图片
导入pyzbar库:pip install pyzbar
实现目标:
利用摄像头识别二维码中的内容并打印出来
"""
import cv2
import pyzbar.pyzbar as pyzbar
import webbrowser
import os
from pygame import mixer
import time
def decodeDisplay(video,flag):
# 转为灰度图像
gray = cv2.cvtColor(video, cv2.COLOR_BGR2GRAY)
barcodes = pyzbar.decode(gray)
for barcode in barcodes:
# 提取二维码的位置,然后用边框标识出来在视频中
(x, y, w, h) = barcode.rect
cv2.rectangle(video, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 字符串转换
barcodeData = barcode.data.decode("utf-8")
barcodeType = barcode.type
# 在图像上面显示识别出来的内容
text = "{}".format(barcodeData)
cv2.putText(video, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,1, (0, 255, 0), 2)
# 打印识别后的内容
print("[扫描结果]: {0}".format(barcodeData))
#识别到结果后打开网页,并将识别程序自动关闭(否则会不停的识别,弹出非常多的网页)
for i in range(0,1):
result = barcodeData
webbrowser.open(result)
flag=27
#播放二维码识别成功音效
mixer.init()
mixer.music.load('二维码.wav')
mixer.music.play()
time.sleep(5)
mixer.music.stop()
return flag
cv2.imshow("QRCODE",video)
def detect():
cap = cv2.VideoCapture(0)
while(True):
# 逐帧捕获
ret, frame = cap.read()
flag = cv2.waitKey(1)
flag = decodeDisplay(frame,flag)
if flag == 27:#按下ESC键退出
break
# 一切完成后,释放捕获
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
detect()
是不是很像我们手机扫描二维码的感觉呢?