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


套件網址與介紹






119會員
201內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
這次我們使用影像差分處理,用來檢測圖像中的瑕疵。 首先定義瑕疵樣態,以下原圖為例,較淡的可能是錫油的反光,較亮的部分可能是瑕疵或者是刮痕造成,那我們的目的就是檢測出這些瑕疵或者是刮痕。
yield 在影像處理中也是蠻好用的,特別是當你需要處理大量影像或希望逐步處理影像時。它可以用來生成一個影像流,讓你能夠一次處理一張影像而不需要一次性加載所有影像進記憶體。 yield 是 Python 中的一個關鍵字,用於創建生成器(generator)。 生成器是一種特殊類型的迭代器,允許你
透過 Python 的 tracemalloc 模組來比較兩種方法在執行過程中佔用的記憶體大小。以下是兩者的記憶體佔用比較範例。 程式說明 tracemalloc.start():開始追踪記憶體分配。 tracemalloc.get_traced_memory():返回當前和峰值的記憶體使用量
現在有一推AI網站提供模糊圖片變高清的工具,Google關鍵字一下就一推了,例如MyEdit,Artguru等等。 Python的OpenCV有提供一個DnnSuperResImpl Class Reference,也可以做到這件事,就讓我們繼續往下看吧。 在OpenCV DnnSuperRe
現在的圖片都蠻大張的,若整張丟下去做AVI檢測,相對的時間會要比較久一點,事先擷取出感興趣的區域來檢測,就會縮短整個測試的時間。 本文主要提供一個擷取ROI的函式。 從圖片中裁剪出指定的感興趣區域(ROI)。 def crop_img(img, x, y, h, w): """
本文延續上兩篇文章,新增印出圖像中OCR的面積及位置,與驗證連通域分析計算的面積是否正確,利用cv2.countNonZero來計算區域內非零的元素,因圖像OCR在連通域分析前就需轉換成黑底白字,剛好可利用此函數來計算面積。 [OpenCV][Python]印出圖像中文字的位置及高寬 結果圖
這次我們使用影像差分處理,用來檢測圖像中的瑕疵。 首先定義瑕疵樣態,以下原圖為例,較淡的可能是錫油的反光,較亮的部分可能是瑕疵或者是刮痕造成,那我們的目的就是檢測出這些瑕疵或者是刮痕。
yield 在影像處理中也是蠻好用的,特別是當你需要處理大量影像或希望逐步處理影像時。它可以用來生成一個影像流,讓你能夠一次處理一張影像而不需要一次性加載所有影像進記憶體。 yield 是 Python 中的一個關鍵字,用於創建生成器(generator)。 生成器是一種特殊類型的迭代器,允許你
透過 Python 的 tracemalloc 模組來比較兩種方法在執行過程中佔用的記憶體大小。以下是兩者的記憶體佔用比較範例。 程式說明 tracemalloc.start():開始追踪記憶體分配。 tracemalloc.get_traced_memory():返回當前和峰值的記憶體使用量
現在有一推AI網站提供模糊圖片變高清的工具,Google關鍵字一下就一推了,例如MyEdit,Artguru等等。 Python的OpenCV有提供一個DnnSuperResImpl Class Reference,也可以做到這件事,就讓我們繼續往下看吧。 在OpenCV DnnSuperRe
現在的圖片都蠻大張的,若整張丟下去做AVI檢測,相對的時間會要比較久一點,事先擷取出感興趣的區域來檢測,就會縮短整個測試的時間。 本文主要提供一個擷取ROI的函式。 從圖片中裁剪出指定的感興趣區域(ROI)。 def crop_img(img, x, y, h, w): """
本文延續上兩篇文章,新增印出圖像中OCR的面積及位置,與驗證連通域分析計算的面積是否正確,利用cv2.countNonZero來計算區域內非零的元素,因圖像OCR在連通域分析前就需轉換成黑底白字,剛好可利用此函數來計算面積。 [OpenCV][Python]印出圖像中文字的位置及高寬 結果圖
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
上兩篇有關List的文章,此篇文上兩章的延續,整理一些常用的方法和操作。 [Python]List(列表)新增、修改、刪除元素 [Python基礎]容器 list(列表),tuple(元組) 還有一些常用的 list 方法和操作,讓你能更靈活地處理列表數據
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
在Python中, 要寫一個完整的「符元化類 Tokenizer Class」, 這個Class需要的功能有: 1.「編碼 Encode」:將「文本 Text」分割成「符元 Token」。 2.「詞彙 Vocabulary」:將「符元 Token」映射到「符元ID TokenID
解讀JSON 字串 首先,你需要使用 Python 的 json 模組來解讀JSON 字串。 JSON的基本結構: 由花括號 {} 包圍,內部是鍵值對的集合,每個鍵值對之間用逗號分隔。 鍵是字串類型,值可以是任何JSON支持的資料類型(字串、數字、布林值、陣列、物件或 null)。 {
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
JSON 格式因為其輕巧、易於讀寫的特性,所以普遍應用於數據儲存。本文將介紹如何使用 Python 來讀取、處理、解析和修改 JSON 檔案。
Thumbnail
在數據分析的工作中,處理 CSV 檔案是一項基礎且重要的技能,CSV 格式的檔案是以純文字形式儲存表格數據,簡潔的結構使其普遍應用於數據儲存。本文將介紹如何使用Python 來讀取、處理和儲存 CSV 檔案。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
上兩篇有關List的文章,此篇文上兩章的延續,整理一些常用的方法和操作。 [Python]List(列表)新增、修改、刪除元素 [Python基礎]容器 list(列表),tuple(元組) 還有一些常用的 list 方法和操作,讓你能更靈活地處理列表數據
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
在Python中, 要寫一個完整的「符元化類 Tokenizer Class」, 這個Class需要的功能有: 1.「編碼 Encode」:將「文本 Text」分割成「符元 Token」。 2.「詞彙 Vocabulary」:將「符元 Token」映射到「符元ID TokenID
解讀JSON 字串 首先,你需要使用 Python 的 json 模組來解讀JSON 字串。 JSON的基本結構: 由花括號 {} 包圍,內部是鍵值對的集合,每個鍵值對之間用逗號分隔。 鍵是字串類型,值可以是任何JSON支持的資料類型(字串、數字、布林值、陣列、物件或 null)。 {
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
JSON 格式因為其輕巧、易於讀寫的特性,所以普遍應用於數據儲存。本文將介紹如何使用 Python 來讀取、處理、解析和修改 JSON 檔案。
Thumbnail
在數據分析的工作中,處理 CSV 檔案是一項基礎且重要的技能,CSV 格式的檔案是以純文字形式儲存表格數據,簡潔的結構使其普遍應用於數據儲存。本文將介紹如何使用Python 來讀取、處理和儲存 CSV 檔案。