程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python+pyzbar識別二維碼條形碼

編輯:Python

前言
如何是使用 pyzbar 快速識別二維碼和條形碼

一、pyzbar 是什麼?
首先需要了解下 ZBar:ZBar是一個開源軟件套件,用於從各種來源(如視頻流、圖像文件和原始強度傳感器)讀取條形碼。它支持許多流行的符號(條形碼類型),包括EAN-13/UPC-A、UPC-E、EAN-8、代碼128、代碼39、交錯2/5和二維碼。

而 pyzbar 是通過 Python2和3接口,使用 ZBar 庫讀取一維條形碼和QR碼 。
二、安裝 pyzbar

  1. Windows
    在 Windows 的環境下只需要使用 pip 安裝即可:

    pip install pyzbar

三、開始識別


import datetime
import time
from pathlib import Path
import numpy as np
import cv2
from pyzbar import pyzbar
def get_qrcode_result(image_input, binary_max=230, binary_step=2):
""" 獲取二維碼的結果 :param image_input: 輸入圖片數據 :param binary_max: 二值化的最大值 :param binary_step: 每次遞增的二值化步長 :return: pyzbar 預測的結果 """
# 把輸入圖像灰度化
if len(image_input.shape) >= 3:
image_input = cv2.cvtColor(image_input, cv2.COLOR_RGB2GRAY) # 轉換灰度圖
# 獲取自適配阈值
binary, _ = cv2.threshold(image_input, 0, 255, cv2.THRESH_OTSU)
# 二值化遞增檢測
res = []
while (binary < binary_max) and (len(res) == 0):
binary, mat = cv2.threshold(image, binary, 255, cv2.THRESH_BINARY)
res = pyzbar.decode(mat)
binary += binary_step
return res
if __name__ == '__main__':
image_dir = Path(r"圖片路徑")
total_image = 0
success_count = 0
for image_file in Path.iterdir(image_dir):
if image_file.suffix not in [".jpg", ".png"]:
# 非圖片,跳過該文件
continue
# 使用 cv2.imdecode 可以讀取中文路徑下的圖片
image = cv2.imdecode(np.fromfile(Path(image_dir).joinpath(image_file),
dtype=np.uint8),
cv2.IMREAD_COLOR)
start_time = time.time()
result = get_qrcode_result(image, binary_max=230, binary_step=2)
print(f"Got {
image_file} result: {
result}, "
f"using time : {
datetime.timedelta(seconds=(time.time() - start_time))}")
if len(result) > 0:
success_count += 1
total_image += 1
print(f"total image = {
total_image}, success count = {
success_count}")

可能出現的問題:
安裝完,run,出現如下報錯!
FileNotFoundError: Could not find module ‘你的路徑\Python\Python38\site-packages\pyzbar\libzbar-64.dll’ (or one of its dependencies). Try using the full path with constructor syntax.


解決方法:
沒事,這個坑我已經踩過。這個報錯的原因是沒有安裝 Visual C++ 的依賴庫

下載地址:Visual C++ Redistributable Packages for Visual Studio 2013

進入之後,拉到下面可以看到下載的按鈕,下載完之後安裝即可!:

參考:
[1] pyzbar 安裝
[2] OSError: [WinError 126] Cannot find the specified module.


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved