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

更新於 發佈於 閱讀時間約 1 分鐘

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


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

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

結果圖

raw-image
raw-image
raw-image

以下是使用 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)


套件網址與介紹






留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
147會員
262內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
螃蟹_crab的沙龍的其他內容
2025/03/24
在影像處理或機器學習的應用中,我們常常需要將影片逐幀擷取出來,進一步進行辨識或分析。 本篇教學將示範如何使用 Python + OpenCV 來: ✅ 讀取 MP4 影片 測試影片可由下方超連結下載,從file-examples.com下載 file-examples.com 是一個 免費提
Thumbnail
2025/03/24
在影像處理或機器學習的應用中,我們常常需要將影片逐幀擷取出來,進一步進行辨識或分析。 本篇教學將示範如何使用 Python + OpenCV 來: ✅ 讀取 MP4 影片 測試影片可由下方超連結下載,從file-examples.com下載 file-examples.com 是一個 免費提
Thumbnail
2024/10/11
本文將指導你如何修改現有的 OpenCV 程式碼,使其利用 CUDA 加速進行深度神經網絡(DNN)推理,如超分辨率圖像放大任務。這將顯著提升運行速度,特別是在高分辨率圖像處理中。 在CMake上這選項要開,才可支援DNN模組。 CMake編譯OpenCV教學文 連結 [OpenCV][Py
Thumbnail
2024/10/11
本文將指導你如何修改現有的 OpenCV 程式碼,使其利用 CUDA 加速進行深度神經網絡(DNN)推理,如超分辨率圖像放大任務。這將顯著提升運行速度,特別是在高分辨率圖像處理中。 在CMake上這選項要開,才可支援DNN模組。 CMake編譯OpenCV教學文 連結 [OpenCV][Py
Thumbnail
2024/10/10
OpenCV 提供了專門針對 CUDA 優化的模組,這些模組使用 cv2.cuda 命名空間,並且可以直接使用 GPU 進行加速。,cv2.cuda 模塊需要在 OpenCV 編譯時啟用 CUDA 支援才能使用。 本文主要比較經過CMAKE重新編譯OpenCV使其支援Cuda,原OpenCV只支援
Thumbnail
2024/10/10
OpenCV 提供了專門針對 CUDA 優化的模組,這些模組使用 cv2.cuda 命名空間,並且可以直接使用 GPU 進行加速。,cv2.cuda 模塊需要在 OpenCV 編譯時啟用 CUDA 支援才能使用。 本文主要比較經過CMAKE重新編譯OpenCV使其支援Cuda,原OpenCV只支援
Thumbnail
看更多
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
先前我們談論到靜態方法就像是定義工具箱一樣,那麼抽象方法就像是共用表格的概念,例如註冊帳號時會填寫的一些基本資料,就有包含制式的表格,裡面有需填寫的欄位,例如姓名,性別等。
Thumbnail
先前我們談論到靜態方法就像是定義工具箱一樣,那麼抽象方法就像是共用表格的概念,例如註冊帳號時會填寫的一些基本資料,就有包含制式的表格,裡面有需填寫的欄位,例如姓名,性別等。
Thumbnail
本文介紹了Python中zip與enumerate函式的使用,以及它們的語法說明和程式範例。zip函式允許同時迭代多個可迭代對象,這使得程式碼更簡潔;而enumerate函式則在迭代時,提供元素的索引,使得實用工具,尤其是當需要追蹤元素的位置時。
Thumbnail
本文介紹了Python中zip與enumerate函式的使用,以及它們的語法說明和程式範例。zip函式允許同時迭代多個可迭代對象,這使得程式碼更簡潔;而enumerate函式則在迭代時,提供元素的索引,使得實用工具,尤其是當需要追蹤元素的位置時。
Thumbnail
從 JavaScript 到 Python
Thumbnail
從 JavaScript 到 Python
Thumbnail
檔案存取 路徑與檔案處理是很常用的功能,他們可以獨立運作,但是常常搭配一起使用,如果你處理的檔案是在當下的目錄,可以不需要使用路徑的功能單獨讀寫檔案,如果是想要做一些資料夾的管理,就需要理解路徑和檔案之間的關係。
Thumbnail
檔案存取 路徑與檔案處理是很常用的功能,他們可以獨立運作,但是常常搭配一起使用,如果你處理的檔案是在當下的目錄,可以不需要使用路徑的功能單獨讀寫檔案,如果是想要做一些資料夾的管理,就需要理解路徑和檔案之間的關係。
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 身為專業的軟體開發者的我們, 除了讓程式會動之外, 也
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 身為專業的軟體開發者的我們, 除了讓程式會動之外, 也
Thumbnail
在第九課中,我們將學習 Python 的文件讀取與寫入。 Python 提供了一些內建的函式,使我們能夠輕鬆讀取和寫入文件。
Thumbnail
在第九課中,我們將學習 Python 的文件讀取與寫入。 Python 提供了一些內建的函式,使我們能夠輕鬆讀取和寫入文件。
Thumbnail
Hi,大家好。我是茶桁。 系统内置模块就是安装完Python解释器之后,系统本身所提供的模块。我知道,咱们之前的课程里有学习系统的内置函数,这个模块和函数不是一个东西。模块这种东西,是需要导入后才可以使用的,比如:json, re, os等等。
Thumbnail
Hi,大家好。我是茶桁。 系统内置模块就是安装完Python解释器之后,系统本身所提供的模块。我知道,咱们之前的课程里有学习系统的内置函数,这个模块和函数不是一个东西。模块这种东西,是需要导入后才可以使用的,比如:json, re, os等等。
Thumbnail
一個真實世界中的支持“讓孩童以更有趣的方式學習電腦”例子,只不過這篇演講,則是駭客等級程式專家們的 Bytes code 教學。不過這篇演講也說明了學習程式甚至參加程式會議,一樣可以樂趣無窮。
Thumbnail
一個真實世界中的支持“讓孩童以更有趣的方式學習電腦”例子,只不過這篇演講,則是駭客等級程式專家們的 Bytes code 教學。不過這篇演講也說明了學習程式甚至參加程式會議,一樣可以樂趣無窮。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News