1

我正在尝试使用 python 通过 rasp 读取数据矩阵代码。

我正在使用 pylibdmtx 来阅读代码,但它只适用于我的笔记本电脑。当我将相同的代码放在覆盆子上时,它无法读取代码。目前我的覆盆子只能读取二维码和条形码。

我有两个 rasp 一个带有 raspbian,另一个带有 ubuntu 核心,这两个都不起作用。

下面的示例代码

import cv2
import time
from pylibdmtx.pylibdmtx import decode


data = None

video = cv2.VideoCapture(0)
video.set(cv2.CAP_PROP_FPS, 19)

while video.isOpened():
    time.sleep(1/9)
    ret, frame = video.read()
    if ret is False:
        break

    decodeObjects = decode(frame,
                           timeout=1000,
                           max_count=1,
                           corrections=3)

    for obj in decodeObjects:
        if obj.data:
            data = obj

    if data:
        break

video.release()
cv2.destroyAllWindows()
print(data)
4

3 回答 3

0

pylibdmtx只是 libdmtx 的包装。要使其工作,您必须先安装本机库。

.whl 文件已包含适用于 Windows 的 .DLL 文件:

在此处输入图像描述

至于 macOS 和 Linux,您可以通过命令行工具安装该库。

Mac OS X

brew install libdmtx

Linux

sudo apt-get install libdmtx0a

我想Raspberry Pi没有预构建的库。所以你可以自己构建它。这是源代码:

https://github.com/dmtx/libdmtx

采取 3 个步骤来构建和安装 libdmtx 库:

  $ ./configure
  $ make
  $ sudo make install

安装 libdmtx 库后,您的 Python 代码应该可以工作。

于 2020-02-10T03:45:51.313 回答
0
import cv2
import time
from pylibdmtx.pylibdmtx import decode

data = None

video = cv2.VideoCapture(0)
video.set(cv2.CAP_PROP_FPS, 19)

# Add
saveFilename = "./liveImage.jpg"

while video.isOpened():
    time.sleep(1/9)
    ret, frame = video.read()
    if ret is False:
        break

    # Add - save Live Image
    liveImage = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imwrite(saveFilename, liveImage)
    
    # Add - open File
    loadImage = cv2.imread(saveFilename)    
    
    # Modify
    decodeObjects = decode(loadImage,
                  # Delete timeout=1000, 
                           max_count=1,
                           corrections=3)

    for obj in decodeObjects:
        if obj.data:
            data = obj

    if data:
        break

video.release()
cv2.destroyAllWindows()
print(data)
于 2021-06-28T04:46:49.980 回答
0
import cv2
import time
from pylibdmtx.pylibdmtx import decode

data = None

video = cv2.VideoCapture(0)
video.set(cv2.CAP_PROP_FPS, 19)

# Add
saveFilename = "./liveImage.jpg"

while video.isOpened():
    time.sleep(1/9)
    ret, frame = video.read()
    if ret is False:
        break

    # Add - save Live Image
    liveImage = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imwrite(saveFilename, liveImage)
    
    # Add - open File
    loadImage = cv2.imread(saveFilename)    
    
    # Modify
    decodeObjects = decode(loadImage,
                           timeout=1000,
                           max_count=1,
                           corrections=3)

    for obj in decodeObjects:
        if obj.data:
            data = obj

    if data:
        break

video.release()
cv2.destroyAllWindows()
print(data)
于 2021-06-24T05:55:59.150 回答