婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python實現的掃碼工具居然這么好用!

Python實現的掃碼工具居然這么好用!

熱門標簽:北瀚ai電銷機器人官網手機版 地圖標注面積 小蘇云呼電話機器人 佛山400電話辦理 儋州電話機器人 朝陽手機外呼系統 所得系統電梯怎樣主板設置外呼 北京電銷外呼系統加盟 市場上的電銷機器人

一、案例分析

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

二、環境

環境包括python環境和模塊。我的環境如下:

系統: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

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

三、識別二維碼

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

1.讀取二維碼圖片

2.解析二維碼中的數據

3.在解析出的數據中提取data信息

實現代碼如下:

import cv2
from pyzbar import pyzbar
# 1、讀取二維碼圖片
qrcode = cv2.imread('qrcode.jpg')
# 2、解析二維碼中的數據
data = pyzbar.decode(qrcode)
print(data)
# 3、在數據中解析出二維碼的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)])]

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

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

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

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.循環

3.在循環內讀取一幀畫面

4.顯示當前讀取的畫面

5.等待鍵盤輸入

6.判斷是否按退出鍵q

7.按了推出鍵則退出,沒按則繼續循環

具體代碼如下:

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

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

五、實現掃碼工具

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

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

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

到這里,我們就實現了掃碼工具。

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

您可能感興趣的文章:
  • Python實現掃碼工具的示例代碼
  • python 使用MyQR和qrcode來制作二維碼
  • 基于python實現可視化生成二維碼工具
  • Python qrcode 生成一個二維碼的實例詳解
  • Python二維碼生成識別實例詳解
  • 用python生成(動態彩色)二維碼的方法(使用myqr庫實現)

標簽:龍巖 金融催收 酒泉 云南 江蘇 定西 商丘 寧夏

巨人網絡通訊聲明:本文標題《Python實現的掃碼工具居然這么好用!》,本文關鍵詞  Python,實現,的,掃碼,工具,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python實現的掃碼工具居然這么好用!》相關的同類信息!
  • 本頁收集關于Python實現的掃碼工具居然這么好用!的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 正阳县| 华安县| 莱阳市| 迁安市| 裕民县| 永修县| 郧西县| 长丰县| 始兴县| 绥中县| 敦煌市| 武夷山市| 新邵县| 仪陇县| 辛集市| 卢氏县| 灵台县| 新乡县| 玉溪市| 修文县| 乌什县| 彰化市| 丽江市| 遂平县| 阳高县| 喀喇| 界首市| 甘南县| 通海县| 嫩江县| 苗栗县| 阿克苏市| 福州市| 绵阳市| 外汇| 清河县| 达拉特旗| 牙克石市| 四子王旗| 禹州市| 崇仁县|