人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

Python實(shí)現(xiàn)的掃碼工具居然這么好用!

發(fā)布日期:2022-03-17 12:33 | 文章來源:源碼之家

一、案例分析

我們先思考一下,實(shí)現(xiàn)掃碼工具需要寫什么操作。在掃碼過程中我們需要打開攝像頭,如何由手機(jī)或者電腦識別二維碼。所以我們要實(shí)現(xiàn)兩個(gè)關(guān)鍵的步驟:調(diào)用攝像頭、識別二維碼。
這兩個(gè)操作分別對應(yīng)了兩個(gè)模塊,它們就是opencvpyzbar,其中opencv是英特爾的計(jì)算機(jī)視覺處理模塊,而pyzbar則是用于解析二維碼的模塊。

二、環(huán)境

環(huán)境包括python環(huán)境和模塊。我的環(huán)境如下:

系統(tǒng):Windows 10
python:python 3.7.9
opencv:opencv-python-4.4.0.44
pyzbar:pyzbar-0.1.8

模塊安裝很簡單,我們直接用pip安裝,先安裝opencv模塊:

pip install opencv-python

然后是pyzbar模塊:

pip install pyzbar

在未指定安裝版本時(shí),系統(tǒng)會自動安裝最新版。安裝好模塊后,我們就可以來實(shí)現(xiàn)掃碼工具了。

三、識別二維碼

有了pyzbar模塊后,我們識別二維碼的工作就非常簡單了,首先需要準(zhǔn)備一張二維碼。有了二維碼后就可以開始解析了,具體步驟如下:

1.讀取二維碼圖片

2.解析二維碼中的數(shù)據(jù)

3.在解析出的數(shù)據(jù)中提取data信息

實(shí)現(xiàn)代碼如下:

import cv2
from pyzbar import pyzbar
# 1、讀取二維碼圖片
qrcode = cv2.imread('qrcode.jpg')
# 2、解析二維碼中的數(shù)據(jù)
data = pyzbar.decode(qrcode)
print(data)
# 3、在數(shù)據(jù)中解析出二維碼的data信息
text = data[0].data.decode('utf-8')
print(text)

在上面我們解析了兩次,第一次獲取了一個(gè)data,我們先來看看data長什么樣子:

[Decoded(data=b'http://weixin.qq.com/r/vC_fhynEKnRVrW3k93qu', type='QRCODE', rect=Rect(left=140, top=113, width=390, height=390), polygon=[Point(x=140, y=113), Point(x=140, y=503), Point(x=530, y=503), Point(x=530, y=113)])]

可以看到是一個(gè)列表,而且列表的第一個(gè)數(shù)據(jù)包含url的信息。所以我們需要通過下面的代碼再次解析:

text = data[0].data.decode('utf-8')

這樣我們就能拿到二維碼中包含的信息了。為了方便后續(xù)使用,可以將上面的代碼寫成一個(gè)函數(shù):

def scan_qrcode(img_path):
 qrcode = cv2.imread(img_path)
 data = pyzbar.decode(qrcode)
 return data[0].data.decode('utf-8')

接下來我們再看看如何調(diào)用攝像頭。

四、調(diào)用攝像頭

opencv中提供了一個(gè)VideoCapture類用于讀取視頻,同樣可以用來調(diào)用攝像頭。調(diào)用攝像頭的步驟如下:

1.調(diào)用攝像頭

2.循環(huán)

3.在循環(huán)內(nèi)讀取一幀畫面

4.顯示當(dāng)前讀取的畫面

5.等待鍵盤輸入

6.判斷是否按退出鍵q

7.按了推出鍵則退出,沒按則繼續(xù)循環(huán)

具體代碼如下:

import cv2
# 調(diào)用攝像頭
cap = cv2.VideoCapture(0)
while True:
 # 讀取一幀畫面
 ret, frame = cap.read()
 # 顯示當(dāng)前幀
 cv2.imshow('scan qrcode', frame)
 # 等待鍵盤輸入
 key = cv2.waitKey(10)
 # 當(dāng)按下q鍵時(shí)關(guān)閉攝像頭
 if key == ord('q'):
  break
# 銷毀所有窗口
cv2.destroyAllWindows()

你們可以自己嘗試運(yùn)行一下上面的代碼,效果就像是打開了自己的前置攝像頭。
現(xiàn)在調(diào)用了攝像頭,我們可以把兩部分的代碼結(jié)合起來。

五、實(shí)現(xiàn)掃碼工具

我們掃碼工具的主體部分是調(diào)用攝像頭的操作,我們需要對讀取到的每一幀畫面進(jìn)行解析,當(dāng)解析出結(jié)果后輸出并退出。具體代碼如下:

import cv2
from pyzbar import pyzbar
def scan_qrcode(qrcode):
 data = pyzbar.decode(qrcode)
 return data[0].data.decode('utf-8')
cap = cv2.VideoCapture(0)
while True:
 ret, frame = cap.read()
 cv2.imshow('scan qrcode', frame)
 # 解析二維碼
 text = None
 try:
  text = scan_qrcode(frame)
 except Exception as e:
  pass
 if text:
  print(text)
  break
 key = cv2.waitKey(10)
 if key == ord('q'):
  break
cv2.destroyAllWindows()

上面我們把scan_qrcode函數(shù)修改了一下,從原來的傳入圖片路徑到直接傳入圖片對象。因?yàn)橥ㄟ^VideoCapture對象獲取的圖片幀和通過cv2.imread獲取的圖片是同一數(shù)據(jù)類型。

上面關(guān)鍵步驟在解析二維碼的操作。首先定義一個(gè)text,因?yàn)榻馕鲞^程中如果沒有二維碼會出現(xiàn)異常,所以用語句處理。如何通過if判斷text的內(nèi)容,只有當(dāng)我們真正解析到了數(shù)據(jù),程序才會輸出結(jié)果,并退出程序。

到這里,我們就實(shí)現(xiàn)了掃碼工具。

到此這篇關(guān)于Python實(shí)現(xiàn)的掃碼工具居然這么好用!的文章就介紹到這了,更多相關(guān)Python掃碼工具內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

美國服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部