Computer Vision в помощь декодирования QR-кода на Python
В моей работе встретилась такая задача, как проверка кассовых чеков на корректность и легальность. Чеки хранились в отсканированном виде и требовалось найти решение получения платежных данных для последующей проверки в налоговых органах. На помощь пришла технология Computer Vision (компьютерное зрение). С помощью этой технологии получилось считать с изображений QR-коды чеков, расшифровать и проверить их.
Классическая задача компьютерного зрения — это обработка изображений и видеоданных, и библиотека pyzbar эту задачу успешно выполняет. Поиск QR-кода реализует на достаточно высоком уровне, поэтому мой выбор пал на нее.
Но для начала краткая истории появления QR-кода. QR-код (Quick response code – код быстрого реагирования) был разработан Масахиро Хара в японской компании Denso-Wave в 1994г. Несмотря на то что код был разработан для упрощения работы сотрудников на производстве за счет простоты и удобства он получил распространение во многих сферах деятельности человека.
В первой части статьи я расскажу, как сгенерировать свой QR-код. Во второй части будет рассказано как считать и декодировать QR-код.
Первым делом установим все необходимые библиотеки.
pyzbar - декодирование QR-кодов;
qrcode - создание QR-кодов;
opencv-python - работа с изображениями;
glob - считывание всех файлов в указанной папке.
Как сгенерировать QR-код
Создать собственный QR-код легче, чем может показаться.
Результат работы кода.
Если требуется создать код под свои нужды, можно вписать параметры создания QR-кода.
В таком простом исполнении параметры создания QR-кода будут выставлены автоматически, но можно создать и по своим параметрам.
Тот же самый адрес сайта, но QR-код уже отличается.
Параметр version может быть от 1 до 40, от 21х21 до 177х177 пикселей, не учитывая поля.
Параметр box_size отвечает за количество пикселей в каждом квадрате QR-кода.
Параметр border создает границу вокруг QR-кода.
Параметр Error_correction служит для восстановления кода, если код повредился и плохо читаем.
Каждый уровень указывает на процент данных для восстановления.
В методе make_image() добавил параметр back_color, отвечающий за цвет фона и fill_color- за цвет QR-кода.
Добавим логотип в наш QR-код. Раз у нас ссылка ведет на сайт yandex.ru, то и логотип будем использовать от Яндекса.
Вставляя логотип, мы повреждаем часть QR-кода, но из-за того, что мы добавили 30% на восстановление при ошибках, код считывается без проблем.
Перейдем ко второй части и попробуем декодировать зашифрованные данные кода.
Как декодировать QR-код
Импортируем установленные библиотеки.
Также я буду использовать библиотеку glob. Glob создает список файлов по указанному пути и мы поочередно их считываем.
Чтобы показать, как работает библиотека, считаем 1 чек и посмотрим, какой результат она выдаст.
pyzbar.decode() принимает изображение с QR-кодом и декодирует его, выдавая параметры самого QR-кода и обнаруженные данные.
Для тестирования я взял несколько чеков, для тестового решения можно взять любые QR-коды, которые вы сможете найти.
Для упрощения работы все операции с изображением я вывел в отдельную функцию.
В основном коде дополнительно импортировал библиотеку pandas для создания датафрейма.
Посмотрим удачно считанные коды.
А вот название файлов не найденных, либо не считанных кодов.
Т.е. файлы, в которых pyzbar не нашел QR-кодов, можно дополнительно обработать, сделать изображение черно-белым добавляя четкости, убирать шумы и т.д.
Как вы уже увидели в создании и декодировании QR-кодов нет ничего сложного. Я показал лишь основу, которую вы можете модернизировать, добавляя дополнительные библиотеки или встраивая в другие программы. Это еще один пример того, как Computer Vision облегчает жизнь и работу людей.