Как получить тип стиля кодирования QR/штрих-кода с помощью python-qrtools/ZBar?

На моем сервере Ubuntu я установил пакет python-qrtools (который использует zbar), используя sudo apt-get install python-qrtools для декодирования изображений QR-кодов и штрих-кодов в Python следующим образом:

>>> qr = qrtools.QR()
>>> qr.decode('the_qrcode_or_barcode_image.jpg')
True
>>> print qr.data
Hello! :)

Это прекрасно работает.

Теперь я хочу сохранить эти данные и восстановить изображение позже. Но проблема в том, что я не знаю, было ли исходное изображение QR-кодом или каким-то штрих-кодом. Я проверил все свойства объекта qr, но ни одно из них, похоже, не дает мне тип стиля кодирования (QR/bar/other).

В этой теме SO описано, что ZBar делает верните тип стиля кодирования, но он дает только пример в Objective-C, плюс я не уверен, действительно ли это ответ на то, что я ищу.

Кто-нибудь знает, как я могу узнать тип стиля кодирования (например, QR-код/BAR-код/другой) в Python (желательно с использованием пакета python-qrtools)? И если не в Python, есть ли какие-нибудь инструменты командной строки Linux, которые могут это узнать? Все советы приветствуются!


person kramer65    schedule 13.08.2015    source источник


Ответы (1)


Глядя на источник qrtools, я не вижу никакого способа получить тип, но есть zbar python lib, основанный на scan_image примере, код ниже, похоже, делает то, что вы хотите:

import zbar
import Image

scanner = zbar.ImageScanner()

scanner.parse_config('enable')

img = Image.open("br.png").convert('L')
width, height = img.size
stream = zbar.Image(width, height, 'Y800', img.tostring())

scanner.scan(stream)

for symbol in stream:
    print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data

Используя случайный штрих-код, который я взял с сайта net:

decoded UPCA symbol "123456789012"

Используя этот код QR выводит:

 decoded QRCODE symbol "http://www.reichmann-racing.de"
person Padraic Cunningham    schedule 17.08.2015
comment
Привет, Падрайк. Спасибо миллион за этот код! Работает как шарм. Только последний вопрос; Вы знаете, что означает 'Y800'? - person kramer65; 24.08.2015
comment
@Kramer, добро пожаловать. Третий аргумент - четырехзначный код формата изображения, изображения должны быть либо "Y800"(greyscale), либо "GRAY" для zbar. - person Padraic Cunningham; 24.08.2015