2024-09-10|閱讀時間 ‧ 約 9 分鐘

[Python]使用pyzbar 與pylibdmtx讀取條碼

本文主要使用pyzbar 與pylibdmtx來讀取條碼,並用靜態方法將這兩個套件的讀碼功能包裝起來,因應不同需求,調用相對應的方法來讀取QR code,一維條碼,Data Matrix。最後再將讀到的條碼資料與框選條碼位子於原圖上。


靜態方法可參考我下方文章

[Python基礎]裝飾器staticmethod 定義靜態方法

結果圖

以下是使用 pyzbar 來讀取一維條碼和 QR Code,並使用 pylibdmtx.pylibdmtx 來讀取 Datamatrix 的內容。


確保你已經安裝了所需的 Python 套件

pip install opencv-python 
pip install pyzbar
pip install pylibdmtx

程式範例

將條碼讀取功能進行封裝,並根據不同條碼類型調用不同函式。

使用 pyzbar 來讀取一維條碼和 QR Code

使用 pylibdmtx.pylibdmtx 來讀取 Datamatrix

import cv2
import numpy as np
from pyzbar.pyzbar import decode as pyzbar_decode
import pylibdmtx.pylibdmtx

class BarcodeReader:

@staticmethod
def read_img(path):
img = cv2.imdecode(np.fromfile(file=path, dtype=np.uint8), cv2.IMREAD_COLOR)
return img

@staticmethod
def read_qr_and_1d(image):
"""使用 pyzbar 來讀取 QR Code 和一維條碼"""
barcodes = pyzbar_decode(image)

for barcode in barcodes:
x, y, w, h = barcode.rect
# 畫框顯示條碼位置
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)

# 條碼資訊
barcode_data = barcode.data.decode('utf-8')

# 顯示條碼資訊在影像上
text = f'{barcode_data}'
cv2.putText(image, text, (x, y-3), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

return barcode_data,image

@staticmethod
def read_datamatrix(image):
"""使用 pylibdmtx 來讀取 Datamatrix 條碼"""
barcodes = pylibdmtx.pylibdmtx.decode(image)
results =[]
if barcodes:
results = barcodes[0][0].decode('utf-8')
for barcode in barcodes:
x, y, w, h = barcode.rect.left, barcode.rect.top, barcode.rect.width, barcode.rect.height
# 畫框顯示條碼位置
cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)

# 顯示條碼資訊在影像上
text = f'Datamatrix: {results} '
cv2.putText(image, results, (x, y-3), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)

return results,image

@staticmethod
def show_image(image):
"""顯示處理後的影像"""
cv2.imshow('Barcode Reader', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 使用範例
if __name__ == "__main__":
# 調用read_img讀圖
QR_Code_img = BarcodeReader.read_img('PATH')
Data_Matrix_Code_img = BarcodeReader.read_img('PATH')
Code_128_img = BarcodeReader.read_img('PATH')

# 調用read_qr_and_1d讀取 QR 和一維條碼
qr_code_results, QR_Code_res_img = BarcodeReader.read_qr_and_1d(QR_Code_img)
print("QR Code : ", qr_code_results)

Code_128_1d_results, Data_Matrix_Code_res_img = BarcodeReader.read_qr_and_1d(Code_128_img)
print("1D Barcodes: ", Code_128_1d_results)

# 用read_datamatrix讀取 Datamatrix
Data_Matrix_results, Data_Matrix_res_img = BarcodeReader.read_datamatrix(Data_Matrix_Code_img)
print("Datamatrix: ", Data_Matrix_results)

# 顯示處理後的影像
show_image(QR_Code_res_img)
show_image(Data_Matrix_Code_res_img)
show_image(Data_Matrix_res_img)


套件網址與介紹






分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.