【问题标题】:How to improve pylibdmtx performance?如何提高 pylibdmtx 性能?
【发布时间】:2021-05-28 08:54:30
【问题描述】:

我在 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)

【问题讨论】:

  • 我也试过了,只要把 scale_percent 设置为 5 或 10 就超级快了!

标签: python image-processing ocr


【解决方案1】:

速度是个问题,但可以通过一些折衷来实现合理的速度。

我从互联网上随机挑选了一张中等分辨率的图片。例如https://www.matthews.com.au/application/third_party/ckfinder/userfiles/images/printed-datamtrix.jpg

这是检测到的输出(要知道宽度和高度): [解码(data=b'011234567890123110HJS6491715022821923Z845Y716W', rect=Rect(left=372, top=250, width=47, height=70))]

这张没有任何参数的图片需要 4.18 秒才能运行!

添加参数:

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

现在以下所有测试的 max_count=1

  • threshold=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 秒 (4,4x)

请注意:这只是说明参数的影响。实际时间取决于图像内容、分辨率、第一个标签的位置和大小等。持续时间平均超过 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2021-06-13
    • 2020-09-09
    • 2012-06-24
    • 2020-03-31
    • 2020-06-20
    • 1970-01-01
    相关资源
    最近更新 更多