Штрих-код декодирования с pyzbar на малины пи - PullRequest
0 голосов
/ 10 июня 2019

Я использую pyzbar для декодирования штрих-кодов на Raspberry Pi 3 с помощью Pi Camera v1 (разрешение 1296x972).Коды Qr декодируются очень хорошо.При декодировании двумерных штрих-кодов (CODABAR) вероятность успеха очень низкая.

Я попытался сохранить один кадр из видеопотока и декодировать его с помощью pyzbar на Raspberry, и это не удалось.Когда я пытаюсь декодировать одно и то же изображение в Ubuntu и успешно его декодирует.

from pyzbar import pyzbar
from PIL import Image
img = Image.open('sampleImage.png')
d = pyzbar.decode(img)

print (d)

Есть мысли, в чем может быть проблема?

ОБНОВЛЕНИЕ:

Следующее изображение - мой конкретный пример использования.eBarcode image Поскольку я использую Pi Camera v1 для съемки изображений, я попытался отрегулировать резкость изображения:

from picamera import PiCamera
self.camera = PiCamera()
self.camera.sharpness = 100

Следующее изображение имеет резкость 100. Однако pyzbar по-прежнему не удается декодировать его на Raspberry Pi.

enter image description here

1 Ответ

0 голосов
/ 11 июня 2019

Вам нужно удалить черную рамку с вашего изображения.Согласно этому ответу , вы можете просто обрезать свое изображение и затем передать изображение в функцию pyzbar.decode().

import cv2
from pyzbar import pyzbar
import numpy as np


def autocrop(image, threshold=0):
    """Crops any edges below or equal to threshold
    Crops blank image to 1x1.
    Returns cropped image.
    """
    if len(image.shape) == 3:
        flatImage = np.max(image, 2)
    else:
        flatImage = image
    assert len(flatImage.shape) == 2

    rows = np.where(np.max(flatImage, 0) > threshold)[0]
    if rows.size:
        cols = np.where(np.max(flatImage, 1) > threshold)[0]
        image = image[cols[0]: cols[-1] + 1, rows[0]: rows[-1] + 1]
    else:
        image = image[:1, :1]

    return image


if __name__ == "__main__":
    image = cv2.imread('sampleImage.png')
    crop = autocrop(image, 165)
    d = pyzbar.decode(crop)
    print(d)
...