【问题标题】:How can i pass image itself not path of it to zxing library for decode pdf417我如何将图像本身而不是它的路径传递给 zxing 库以解码 pdf417
【发布时间】:2021-01-19 11:39:53
【问题描述】:

代码:

import zxing
from PIL import Image

reader = zxing.BarCodeReader()
path = 'C:/Users/UI UX/Desktop/Uasa.png'
im = Image.open(path)

barcode = reader.decode(path)
print(barcode)

当我使用上面的代码工作正常并返回结果时: 条码(raw='P

我需要使用这个代码:

import zxing
import cv2

reader = zxing.BarCodeReader()
path = 'C:/Users/UI UX/Desktop/Uasa.png'

img = cv2.imread (path)
cv2.imshow('img', img)
cv2.waitKey(0)

barcode = reader.decode(img)
print(barcode)

但此代码返回错误: TypeError: 预期的 str、bytes 或 os.PathLike 对象,而不是 numpy.ndarray

在另一个程序中,我有 base64 的图像可以帮助我这里的某个地方吗?

任何机构都可以帮助我解决这个问题?

【问题讨论】:

  • this 适合你吗?
  • 没有。我试过了,然后给我这个错误 TypeError: expected str, bytes or os.PathLike object, not numpy.ndarray

标签: python decode zxing cv2 pdf417


【解决方案1】:

ZXing 不支持直接传递图像,因为它使用外部应用程序处理条码图像。如果您不喜欢使用 ZXing 库来解码 PDF417 条码,可以查看 PyPI 包 pdf417decoder

如果您从示例中的 Numpy 数组开始,则必须先将其转换为 PIL 图像。

import cv2
import pdf417decoder
from PIL import Image

npimg = cv2.imread (path)
cv2.imshow('img', npimg)
cv2.waitKey(0)

img = Image.fromarray(npimg)
decoder = PDF417Decoder(img)

if (decoder.decode() > 0):
    print(decoder.barcode_data_index_to_string(0))
else:
    print("Failed to decode barcode.")

【讨论】:

    【解决方案2】:

    你不能。如果您查看source code,您会发现它所做的是使用提供的路径(特别是com.google.zxing.client.j2se.CommandLineRunner)调用一个java 应用程序。

    如果您需要对图像进行预处理,则必须将其保存在某处并将其路径传递给您的库

    【讨论】:

    • 感谢您的回答.. 我正在使用烧瓶并且无法将图像保存在特定文件夹中我该怎么办?
    • 为什么不能保存图片?如果您使用的是 linux,您至少应该能够写信给/dev/shm/,但不要在使用完图像后伪造删除图像
    • 为什么你不能写图像呢?甚至没有os.environ['TEMP']
    【解决方案3】:

    我通过以下方式解决此问题:

    path = os.getcwd()
    # print(path)
    writeStatus = cv2.imwrite(os.path.join(path, 'test.jpg'), pdf_image)
    if writeStatus is True:
        print("image written")
    else:
        print("problem")  # or raise exception, handle problem, etc.
    sss = (os.path.join(path, 'test.jpg'))
    # print(sss)
    pp = sss.replace('\\', '/')
    # print(pp)
    reader = zxing.BarCodeReader()
    barcode = reader.decode(pp)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      相关资源
      最近更新 更多