Как получить координаты x, y обнаруженного QR-кода на изображении с помощью zbar?

Я закодировал число 1639 в двух QR-кодах изображения ниже (можно загрузить здесь) . Распечатал, сфотографировал и попытался обнаружить:

import zbar
from PIL import Image 

scanner = zbar.ImageScanner()
pil = Image.open('20180520_170027_2.jpg').convert('L')
width, height = pil.size
raw = pil.tobytes()
image = zbar.Image(width, height, 'Y800', raw)
result = scanner.scan(image)

for symbol in image:
    print symbol.data.decode(u'utf-8')     # 1639

Работает, даже если размер QR-кода небольшой (~ 1x1 см), и это здорово!

Вопрос: как получить координаты x, y углов QR-кодов?

Конечно, zbar имеет эту информацию внутри (обязательно для возможности декодирования QR-кода!), Но как получить к ней доступ?

Примечание: вот как установить zbar в Windows и Python 2.7.

введите здесь описание изображения


person Basj    schedule 20.05.2018    source источник
comment
Вы пробовали dir(symbol)?   -  person Burhan Khalid    schedule 20.05.2018


Ответы (2)


Как подсказывает намек в комментарии,

print(symbol.location)

дает координаты.

person Basj    schedule 20.05.2018

Похоже, что класс zbar::Symbol в C ++ документации zlib имеет методы get_location_x(), get_location_y() и get_location_size(), поэтому ваша интуиция, что эти данные существуют внизу, была правильной.

Возвращаясь к Python, при чтении документации привязки zbar Python он выглядит как position доступно поле для получения местоположения QR-кода:

import zbar
image = read_image_into_numpy_array(...) # whatever function you use to read an image file into a numpy array
scanner = zbar.Scanner()
results = scanner.scan(image)
for result in results:
    print(result.type, result.data, result.quality, result.position)

Размер QR-кода, вероятно, также доступен в виде поля в result (например, result.size), и вы можете использовать его, чтобы найти 3 других угла.

person Pierre    schedule 20.05.2018