Алгоритмы распознавания штрих-кодов и QR-кодов

Мобильная робототехника

Сегодня мы рассмотрим, что такое QR-код и штрихкод, посмотрим, как они работают и как их запрограммировать. Для реализации урока нам потребуется веб-камера, подключенная к компьютеру, LabVIEW библиотека Vision. Начнем!
Глоссарий
Для успешного освоения материала рекомендуем вам изучить следующие понятия:
Бинарный код
Способ представления данных в виде кода, в котором каждый разряд принимает одно из двух возможных значений, обычно обозначаемых цифрами 0 и 1
Штрихкод
Графическая информация, наносимая на поверхность, маркировку или упаковку изделий, предоставляющая возможность считывания ее техническими средствами — последовательность черных и белых полос, либо других геометрических фигур
Image Display (Silver)
Индикатор в графическом языке программирования LabView, функцией которого является вывод изображения, полученного с использованием камеры, на фронтальную панель для пользователя
Видеолекция
Конспект

Машинное зрение
Машинное зрение — это применение компьютерного зрения для промышленности и производства; является подразделением инженерии, связанной с вычислительной техникой, машиностроением и промышленной автоматизацией. Одно из наиболее распространенных приложений машинного зрения — инспекция промышленных товаров, таких как продукты питания и лекарственные препараты. Системы машинного зрения для этих целей используют цифровые и интеллектуальные камеры, а также программное обеспечение, обрабатывающее изображения для выполнения аналогичных проверок.
Сканер штрихкода
Сканеры штрихкода используются как инструмент для учета или вывода информации. Каждый объект, будь то товар или просто изделия, на которые нужно получить информацию, снабжается штрихкодом. Штрихкод обычно хранит в себе некоторый уникальный номер, по которому всегда можно найти подробную информацию об объекте. Штрихкод — это закодированная информация, представленная в пригодном для считывания сканером виде.
Составные части штрихкода
Штрихкод состоит из чередования объектов: полоски, точки и белое пространство. Все эти фигуры обладают разными геометрическими характеристиками. Получается матрица, которая может быть превращена в цифровой код при обработке.
Виды штрихкодов
Одномерные
Одномерный код содержит обычно минимальный набор-информацию. Длину одномерного кода невозможно увеличивать бесконечно, а значит и количество информации ограничено. Одномерным этот код называется потому, что вся информация считывается в одной плоскости — вдоль оси X.
Двумерные
Двумерный код может содержать до двух печатных листов информации. Код записан в двух координатах — Х и Y, где пересечением этих координат является ячейка данных.
С появлением таких кодов изменилась и методика распознавания: внедрили, так называемую Image технологию.
Инструменты для Image технологии
1
Открываем LabVIEW и создаем программу.
2
Нажимаем правой кнопкой мыши на фронтальной панели.
3
Чтобы отразить весь список библиотек, нажимаем стрелки вниз.
4
Закрепляем вкладку Vision.
5
Возьмем третий дисплей Image Display (Silver) и сделаем его размер приемлемым для отображения.
Палитра на блоке диаграммы
Чтобы получать информацию с камеры, давайте рассмотрим палитру на блоке диаграммы, в которой есть функции для работы с изображением.

1. Щелкаем правой кнопкой мыши.

2. Выбираем в списке Vision and Motion.

Здесь есть пять блоков.
Нас интересуют три первых и один нижний.

Левый нижний блок содержит в себе операции и функции, которые помогают инициализировать изображение и начать получать его с камеры:
  • Open
  • конфигурация, где мы задаем настройки нашего изображения
  • Grab для того, чтобы получать видеопоток
  • Snap для того, чтобы получать кадры.
Следующий блок — Vision Utilities. Здесь мы можем работать с исходным изображением:
  • переворачивать изображение
  • инициализировать изображение
  • показать в программе, что мы хотим открыть файл из какой-то папки, а не получать его с камеры
  • выделять какие-то элементы на изображении.
Следующая вкладка — Image Processing. Здесь процедуры и функции, при помощи которых и происходит распознавание того же, к примеру, цвета, штрихкода, либо силуэтов какого-то объекта:
  • блоки для работы с цветом
  • морфология
  • анализ
  • Processing.
Следующая вкладка, это машинное зрение — Mission Vision:
  • готовое решение алгоритмов по распознаванию
  • распознавание силуэтов объекта
  • измерение объектов
  • определение окружности объекта.
Примеры программ
1. Программа, которая определяет диаметр шайб. Такие программы применяются в случаях, когда нужна сортировка, чтобы определить точные размеры, либо для контроля качества на промышленных производственных линиях.
2. Программа, которая следит за качеством производства жестяных изделий, в данном случае — это банка из-под газированного напитка, и она проходит проверку на пригодность к товарному виду.
3. Программа, которая следит за тем, чтобы расстояние между ножками были одинаковые.
Программирование
Будем пользоваться готовыми алгоритмами распознавания шифровок. Инициализируем изображение и распознаем на нем необходимые для нас метки.
1. В корпусе без доступа к токопроводящим элементам.

2. В виде макета печатной платы с доступом к токопроводящим элементам.

3. В виде нескольких печатных плат, соединенных между собой гибкими перемычками, также с доступом к токопроводящим элементам.
Принцип работы
1
Когда на блок расшифровок поступает информация, уже содержащая конкретный код, блок начинает анализировать.
2
Сначала он понимает, какой кодировки штрихкод к нему пришел, либо же QR-код, как в данном случае. Для этого он берет самые крайние позиции точек.
3
Следующим действием блок начинает каждую точку поэтапно считывать, как 0 либо 1; если точка незакрашенная, это 0, если закрашенная и черная, то программа считывает это как 1.
4
Дальше программа составляет бинарный код.
5
Результаты этой информации мы как раз с вами наблюдаем, когда считываем тот же самый QR-код или штрихкод.
Написание программы
1. Вытаскиваем Image Display Server.

2. Block Diagram.

3. Заходим в структуры и возьмем Whileloop.

4. Так как у нас программа будет зациклена, сразу поместим ее в цикл.

5. Переходим Vision and Motion, NHMAQ.

6. В Session In добавляем константу.

7. Подключаем все последовательно и подводим к циклу.

8. Сам цикл помещаем в Grub.

9. Программе нужно указать, что это за изображение, и назвать его. Для этого переходим на вкладку Vision Utilitas, Image Management и достаем IMAQ Create.

10. Достаем два блока. Первому дадим название QR, второму — Lum.

11. Переходим на вкладку Vision Utilitas, здесь нас интересует Color Utilitas. Берем Extract.

12. Image Out подключаем к Image Src, и дальше ниже подключаем, как раз-таки Lum во вторую Image Dst.

13. Создаем константу и указываем, по какому принципу мы хотим в дальнейшем передавать изображение на блок распознавания QR-кода.

14. Переходим в следующий блок Machine Vision и берем инструмент Readers.

15. Подключаем Image Dst Out к Image QR Code снизу, где QR Code Cell Size в пикселях, мы создаем контроллер.

16. К QR Code Record подключаем Unbundle By Name.

17. Еще раз достанем Unbundle By Name и выберем здесь Bounding Box. Дальше в переменной Data создаем индикатор.

18. Bounding Box нужен нам для того, чтобы знать границы нашего QR-кода и в дальнейшем выделить его и понимать, распознает ли наша программа QR-код.

19. Перейдем в Numeric и достанем здесь DUBL.

20. Вытаскиваем блок, который будет выделять наш QR-код.

21. Подключаем наш Bounding Box в Line and Points.

22. Image Duplicate и подключаем к Image.

23. Ставим константу.

24. Берем наш Image и подключаем Image Out к нашему заранее подготовленному Image.
Тестирование
1. Добавим контроллер, кнопку «стоп», чтобы можно было устанавливать программу.

2. Нажимаем Cntrl + T, чтобы отображались сразу два окна — и фронтальная панель, и Block Diagram.

3. Нажимаем запуск.

QR-код выделяется в красную рамку, которую мы показывали. Сверху выходит информация, которую содержит данный QR-код.
Подведем итоги. Мы посмотрели, как и по какому принципу применяется машинное зрение. На практическом примере разобрали и написали расшифровку в двух видах кодировки. Для закрепления знания предлагаем выполнить небольшие задания.
Интерактивное задание
Тест
Для закрепления полученных знаний пройдите тест
Стартуем!
Какие виды штрихкодов существуют?
Дальше
Проверить
Узнать результат
Двумерный штрихкод — это…
Дальше
Проверить
Узнать результат
Какие типы двумерного кодирования существуют?
Дальше
Проверить
Узнать результат
К сожалению, вы ответили неправильно
Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Неплохо!
Но можно лучше. Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Отлично!
Вы отлично справились. Теперь можете ознакомиться с другими компетенциями
Пройти еще раз