Сканер QR кодов на основе Raspberry Pi и OpenCV


QR-код (код быстрого ответа) – это тип матричного штрих-кода, который содержит информацию об элементе, к которому он прикреплен, например, данные о местоположении, идентификатор или трекер, идентифицирующий веб-сайт или приложение и т.д. Это машиночитаемая оптическая этикетка, выполненная в виде 2D-изображения и имеющая рисунок определенного шаблона.

В данной статье мы рассмотрим создание сканера QR кодов на основе платы Raspberry Pi и библиотек OpenCV и ZBar. ZBar является наилучшей библиотекой для обнаружения и декодирования различных типов штриховых кодов и QR кодов. Библиотека OpenCV в нашем проекте будет использоваться для захвата нового кадра из видео потока и его обработки, а библиотека ZBar будет декодировать этот штриховой код и конвертировать его в вид, удобный для дальнейшей обработки (извлекать из него необходимую информацию). Дополнительно на нашем сайте мы рассматривали подключение к Raspberry Pi USB сканера штриховых кодов, с помощью которого можно также считывать и QR коды.

Также на нашем сайте вы можете проект распознавания лиц с помощью платы Raspberry Pi и библиотеки OpenCV.

Необходимые компоненты

  1. Плата Raspberry Pi 3 или выше (купить на AliExpress).
  2. Камера для Raspberry Pi (купить на AliExpress).

Установка OpenCV на Raspberry Pi

Для установки OpenCV на Raspberry Pi первым делом обновите программное обеспечение платы.

Далее установим ряд компонентов, необходимых для последующей установки OpenCV на плату Raspberry Pi.

После этого установим OpenCV на Raspberry Pi с помощью команды:

Также, если с помощью описанной последовательности действий вам не удалось по каким либо причинам установить OpenCV на Raspberry Pi, то можете попробовать установить ее с помощью CMake.

Установка других необходимых пакетов

Установка ZBar

ZBar является лучшей в настоящее время библиотекой для обнаружения и декодирования различных типов штрих-кодов и QR кодов. Для ее установки используйте следующую команду:

Установка imutils

Библиотека imutils используется для выполнения типовых операций обработки изображений, таких как сдвиг, поворот, изменение размера, скелетирование. Установить ее можно с помощью следующей команды:

Установка argparse

Библиотека argparse ответственна за парсинг аргументов командной строки. Для ее установки используйте команду:

Схема проекта

Для реализации нашего проекта сканера QR кодов нам потребуются только плата Raspberry Pi и камера для нее, поэтому для сборки конструкции проекта вам потребуется только подключить камеру к соответствующему слоту платы Raspberry Pi с помощью ленточного кабеля.

Внешний вид собранной конструкции проекта

Использование камеры вместе с платой Raspberry Pi вы можете посмотреть в таких проектах как:

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе необходимо подключить (импортировать) все используемые библиотеки.

Затем создадим парсер аргументов, с помощью которого будем парсить аргументы. Аргументы в командной строке (Command-line argument) содержат информацию о пути к CSV файлу. Файл CSV (Comma Separated Values – значения, разделенные запятыми) содержит информацию о времени и содержимом каждого штрих-кода, полученного из видео потока.

После этого инициализируем видео стрим и расскомментируем следующую закомментированную строчку если вы используете USB веб-камеру.

Далее, внутри цикла (loop) мы будем производить захват кадра из видео стрима и уменьшать его размер до 400 пикселов. После захвата кадра мы будем вызывать pyzbar.decode чтобы обнаруживать и декодировать QR код.

Затем в цикле мы будем извлекать местоположение штрих-кода и рисовать границы штрих-кода на его изображении.

Рисование границ QR кода на изображении

Затем мы будем конвертировать информацию, содержащуюся в штрих-коде, в строку в формате "utf-8" с помощью соответствующей функции, и извлекать тип штрих-кода с помощью функции barcode.type.

После этого сохраним извлеченные из штрих-кода данные и тип штрих-кода в переменной text и нарисуем данные штрих-кода и его тип на изображении.

Извлечение данных из QR кода

Затем покажем данные штрих-кода и его тип.

Отображение результатов распознавания QR кода

Далее, на заключительном шаге проверим, нажата ли клавиша ‘s’. Если она нажата, то прерываем основной цикл программы и начинаем процесс очистки.

Тестирование работы сканера QR кодов

Когда аппаратная часть проекта будет готова запустите программу проекта на выполнение. После этого вы увидите окно, в котором будет транслироваться видео в реальном времени, получаемое с камеры. После этого в поле зрения камеры вы можете помещать QR коды (штрих-коды). Когда плата Raspberry Pi произведет декодирование QR кода, она нарисует прямоугольник красного цвета вокруг QR кода и напишет его тип как показано на рисунке ниже.

Тестирование работы проекта

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы на Python

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
1 697 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *