簡體   English   中英

如何提高 pylibdmtx 的性能?

[英]How to improve pylibdmtx performance?

我在 Python 3.6 中使用 pylibdmtx 來檢測 zbar 無法檢測到的條形碼類型 (Datamatrix)。 不幸的是,文檔很少,條形碼檢測速度非常慢,在硬件相對較新的機器上每張圖像最多需要 30 秒。 有哪些方法可以加快檢測時間? 我當前的代碼如下,它讓我減少到大約 20 秒,但仍然太慢了。

from PIL import Image
import cv2
from pylibdmtx.pylibdmtx import decode as dmtxdecode
image = cv2.imread(imagepath, cv2.IMREAD_UNCHANGED);
scale_percent = 50
width = int(image.shape[1] * scale_percent / 100)
height = int(image.shape[0] * scale_percent / 100)
dsize = (width, height)
# calculate the 50 percent of original dimensions
output = cv2.resize(image, dsize)
gray = cv2.cvtColor(output, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
pylibresult = dmtxdecode(thresh)

速度是一個問題,但通過一些妥協可以實現合理的速度。

我從互聯網上隨機挑選了一張中等分辨率的圖片。 例如https://www.matthews.com.au/application/third_party/ckfinder/userfiles/images/printed-datamtrix.jpg

這里是檢測到的output(要知道寬度和高度):[解碼(數據=b'011234567890123110HJS6491715022821923Z845Y716W',rect=Rect(left=372,top=250,width=47,height=70)]

這張沒有任何 arguments 的圖片需要 4.18 秒才能運行!

添加參數:

  • max_count=1 -> 0.75 秒(5.5 倍改進!)

現在所有以下測試都有 max_count=1

  • 閾值=50 -> 0.26 秒(2.9 倍進一步改進)
  • min_edge=20 -> 0.71 秒 (1,05x)
  • max_edge=60 -> 0.22 秒 (3,4x)
  • shape=DmtxSymbolSize.DmtxSymbol24x24 -> na - 一些進一步的改進可能。

組合:max_count=1,threshold=50,min_edge=20,max_edge=60 -> 0.17 sec (4,4x)

請注意:這只是說明參數的影響。 實際時間取決於圖像內容、分辨率、position 和第一個標簽的大小等。平均超過 2 次測試的持續時間(因為值非常匹配)。

CPU:2.6 GHz i5-4278U,MBP 2014 年末 libdmtx:0.7.5 pylibdmtx:0.1.9

from pylibdmtx.pylibdmtx import decode
import cv2, time

path = 'printed-datamtrix.jpg'
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

for _ in range(2):
    start = time.time()
    res = decode(gray, max_count=1, threshold=50, min_edge=20, max_edge=60)
    print("elapsed: ", time.time() - start)

Shrink 和 Threshold 結合起來會減少到 4 秒

import cv2
from pylibdmtx.pylibdmtx import decode

image = cv2.imread('img.png')
decode(image, shrink=3, threshold=6)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM