最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年06月06日 16:14:15   作者:不想禿頭的晨晨  
二維碼作為一種信息傳遞的工具在當今社會發(fā)揮了重要作用.從手機用戶登錄到手機支付,生活的各個角落都能看到二維碼的存在.那你知道二維碼是怎么解析的嗎?有想過自己實現(xiàn)一個掃碼工具嗎?如果想的話就繼續(xù)看下去吧!需要的朋友可以參考下

一、案例分析

我們先思考一下,實現(xiàn)掃碼工具需要寫什么操作。在掃碼過程中我們需要打開攝像頭,如何由手機或者電腦識別二維碼。所以我們要實現(xiàn)兩個關鍵的步驟:調用攝像頭、識別二維碼。
這兩個操作分別對應了兩個模塊,它們就是opencvpyzbar,其中opencv是英特爾的計算機視覺處理模塊,而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

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

三、識別二維碼

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

1.讀取二維碼圖片

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

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

實現(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)

在上面我們解析了兩次,第一次獲取了一個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)])]

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

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

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

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

接下來我們再看看如何調用攝像頭。

四、調用攝像頭

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

1.調用攝像頭

2.循環(huán)

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

4.顯示當前讀取的畫面

5.等待鍵盤輸入

6.判斷是否按退出鍵q

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

具體代碼如下:

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

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

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

我們掃碼工具的主體部分是調用攝像頭的操作,我們需要對讀取到的每一幀畫面進行解析,當解析出結果后輸出并退出。具體代碼如下:

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ù)修改了一下,從原來的傳入圖片路徑到直接傳入圖片對象。因為通過VideoCapture對象獲取的圖片幀和通過cv2.imread獲取的圖片是同一數(shù)據(jù)類型。

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

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

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

相關文章

  • python生成器,可迭代對象,迭代器區(qū)別和聯(lián)系

    python生成器,可迭代對象,迭代器區(qū)別和聯(lián)系

    這篇文章主要介紹了python生成器,可迭代對象,迭代器區(qū)別和聯(lián)系,通過對比用法讓大家更加深入理解相關知識,需要的朋友參考學習下吧。
    2018-02-02
  • 詳解python Todo清單實戰(zhàn)

    詳解python Todo清單實戰(zhàn)

    這篇文章主要介紹了詳解python Todo清單實戰(zhàn),需要實現(xiàn)的功能有添加任務、刪除任務、編輯任務,操作要關聯(lián)數(shù)據(jù)庫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • python通過shutil實現(xiàn)快速文件復制的方法

    python通過shutil實現(xiàn)快速文件復制的方法

    這篇文章主要介紹了python通過shutil實現(xiàn)快速文件復制的方法,涉及Python中shutil模塊的使用技巧,需要的朋友可以參考下
    2015-03-03
  • django中ORM模型常用的字段的使用方法

    django中ORM模型常用的字段的使用方法

    這篇文章主要介紹了django中ORM模型常用的字段的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 10個易被忽視但應掌握的Python基本用法

    10個易被忽視但應掌握的Python基本用法

    這篇文章主要介紹了10個易被忽視但應掌握的Python基本用法,如字典推導、內省工具等,主要針對Python3版本,需要的朋友可以參考下
    2015-04-04
  • keras處理欠擬合和過擬合的實例講解

    keras處理欠擬合和過擬合的實例講解

    這篇文章主要介紹了keras處理欠擬合和過擬合的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python接口測試返回數(shù)據(jù)為字典取值方式

    python接口測試返回數(shù)據(jù)為字典取值方式

    這篇文章主要介紹了python接口測試返回數(shù)據(jù)為字典取值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 定位python內存泄漏問題及解決

    定位python內存泄漏問題及解決

    這篇文章主要介紹了定位python內存泄漏問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • python使用datetime模塊計算各種時間間隔的方法

    python使用datetime模塊計算各種時間間隔的方法

    這篇文章主要介紹了python使用datetime模塊計算各種時間間隔的方法,實例分析了Python使用datetime模塊進行各種常用的時間操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Qt5 實現(xiàn)主窗口狀態(tài)欄顯示時間

    Qt5 實現(xiàn)主窗口狀態(tài)欄顯示時間

    這篇文章主要介紹了Qt5 實現(xiàn)主窗口狀態(tài)欄顯示時間,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論

玛曲县| 南汇区| 乌鲁木齐市| 邯郸县| 南陵县| 沛县| 盖州市| 运城市| 河北区| 贡觉县| 太白县| 陈巴尔虎旗| 手游| 汉沽区| 清镇市| 五河县| 巍山| 安化县| 兴安盟| 丹巴县| 广平县| 内乡县| 达尔| 建瓯市| 长白| 通河县| 炉霍县| 东丽区| 涟水县| 昭平县| 临潭县| 四平市| 沙洋县| 丹棱县| 郧西县| 崇信县| 信阳市| 德阳市| 台东县| 稷山县| 嫩江县|