Предварительная обработка изображений для обнаружения QR в python - PullRequest
0 голосов
/ 26 апреля 2020

Я использовал Zbar и OpenCV, чтобы прочитать QR-код на изображении ниже, но оба не смогли его обнаружить. Для ZBar я использую библиотеку pyzbar в качестве оболочки python. Есть изображения, которые QR обнаруживаются правильно, и изображения действительно похожи на успешные, которые терпят неудачу. Камера моего телефона может прочитать QR-код в загруженном изображении, что означает, что он действительный. Ниже приведен фрагмент кода:

from pyzbar.pyzbar import decode
from pyzbar.pyzbar import ZBarSymbol
import cv2

# zbar    
results = decode(cv2.imread(image_path), symbols=[ZBarSymbol.QRCODE])
print(results) 

# opencv
qr_decoder = cv2.QRCodeDetector()
data, bbox, rectified_image = qr_decoder.detectAndDecode(cv2.imread(image_path))
print(data, bbox)

Какой тип предварительной обработки поможет повысить скорость обнаружения кодов QR?

the image attached

1 Ответ

1 голос
/ 26 апреля 2020

zbar, который выполняет некоторую предварительную обработку, не обнаруживает QR-код, который можно протестировать, выполняя zbarimg image.jpg.

Хорошо Бинаризация полезна здесь. Я заставил это работать, используя функцию kraken.binarization.nlbin() библиотеки Кракена. Библиотека предназначена для распознавания текста, но очень хорошо работает и для QR-кодов, используя нелинейную обработку. Код бинаризации Кракена здесь .

Вот код для образца:

from kraken import binarization
from PIL import Image
from pyzbar.pyzbar import decode
from pyzbar.pyzbar import ZBarSymbol

image_path = "image.jpg"
# binarization using kraken
im = Image.open(image_path)
bw_im = binarization.nlbin(im)
# zbar
decode(bw_im, symbols=[ZBarSymbol.QRCODE])

[Decoded(data=b'DE-AAA002065', type='QRCODE', rect=Rect(left=1429, top=361, width=300, height=306), polygon=[Point(x=1429, y=361), Point(x=1429, y=667), Point(x=1729, y=667), Point(x=1723, y=365)])]

На следующем рисунке показан четкое изображение QR-кода после бинаризации:

Binarized picture

...