Мы будем расширять код, который мы создали в первой части этой серии. Если вы еще не пробовали это, обязательно вернитесь, попробуйте и вернитесь сюда!

Ссылка на часть — 1 из этой серии



Ссылка на репозиторий GitHub

Он содержит все сценарии, модели и файлы привязки, которые используются в этой серии руководств.



Запускаем мир беседок

Перед запуском следующей команды убедитесь, что вы запустили git pull и получили файл setup.bash, который находится в папке {your_workspace_name}/devel/.

Затем, чтобы запустить мир беседки, запустите эту команду в терминале.

$ roslaunch pkg_cv_ros_tutorial_by_dhanuzch 2_world.launch

Это должно запустить мир беседки со стеной с QR-кодом и камерой. Это должно выглядеть примерно так…

Если вы видите это, поздравляю! На данный момент вы все правильно установили.

В качестве альтернативы, если вы хотите запустить мир беседки и запустить скрипт из коробки. Затем запустите

$ roslaunch pkg_cv_ros_tutorial_by_dhanuzch 2_world_and_script.launch

Если вы хотите узнать, как работает код, продолжайте читать…

Предварительная обработка изображения

Прежде чем перейти к коду, вы должны знать о такой вещи, как предварительная обработка изображений. Это то, что мы должны сделать, чтобы получить значимые данные из необработанного вывода камеры. Вот статья о предварительной обработке изображений, которую лично я нашел полезной. В этом уроке мы будем использовать некоторые очень простые методы предварительной обработки. Ниже я обсудил один из многих способов предварительной обработки изображений для декодирования QR-кодов.

  1. Преобразуйте изображение в изображение в градациях серого с помощью функции COLOR_BGR2GRAY, доступной в cv2.
  2. Поскольку QR-коды обычно состоят из двух цветов, мы можем использовать пороговую функцию. С помощью этой функции мы можем преобразовать изображение в градациях серого, которое мы получили выше, в бинарное изображение, которое имеет только два цвета, черный и белый.

Обратите внимание, насколько четким стало изображение после предварительной обработки. Теперь перейдем к коду

Код — объяснение.

Поскольку мы строим код, который мы обсуждали в Часть — 1, я сосредоточусь только на тех изменениях, которые были сделаны.

Этот код также доступен как часть пакета в моем репозитории GitHub.

библиотека pyzbar

Эта библиотека используется для декодирования QR-кодов и штрих-кодов. Чтобы узнать больше об этой библиотеке, взгляните на эту статью.

line 8импортирует функцию декодирования, доступную в библиотеке pyzbar.

Предварительная обработка изображения

line 29 заключается в преобразовании resized_image в изображение в градациях серого.

line 30 — установить пороговое значение. Обратите внимание, что пороговое значение зависит от множества факторов. И я установил его на 40. Чтобы узнать об этом подробнее, загляните в официальное руководство.

line 31 преобразует изображение в градациях серого в бинарное изображение. Здесь thresh,255означает, что все значения пикселей выше 40 будут установлены на 255 (белый).

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

Расшифровка

line 36самый простой 😛. Все, что вам нужно сделать, это вызвать функцию декодирования с изображением в качестве аргумента, а об остальном позаботится библиотека pyzbar. Это вернет декодированные результаты.

line 38распечатывает декодированные результаты.

Результат декодирования выглядит следующим образом…

[Decoded(data="You're breathtaking!", type='QRCODE', rect=Rect(left=100, top=278, width=216, height=214), polygon=[Point(x=100, y=278), Point(x=100, y=490), Point(x=316, y=492), Point(x=315, y=278)])]

Не содержит ли наш вывод слишком много информации?

Для печати только декодированных данных. Давайте вставим следующие строки в наш скрипт.

qr_data = qr_result[0].data
print qr_data

Хорошо, это дает нам желаемый результат. То есть… «От тебя захватывает дух» :) Не веришь? Вот результат хD

Не неудобно ли получить желаемый результат в терминале?

Итак, далее мы попробуем распечатать данные в окне вывода камеры.

Рисование и написание значимых вещей в окне резюме

Далее наша цель — нарисовать рамку над обнаруженным QR-кодом и напечатать сообщение поверх коробки.

line 43получает позицию QR-кода в окне от qr_result

Используя функцию прямоугольника, доступную в cv2, и данные, полученные из строки 43, line 45 рисует прямоугольник вокруг QR-кода красного цвета (0, 0, 255) и толщины 4.

line 47определяет формат для печати данных QR-кода

line 48 печатает данные QR-кода на 10 пикселей выше поля. Это определяется с помощью (x, y-10), тип шрифта Hershey simplex. Цвет красный (0, 0, 255) и толщина 2. Все эти детали будут напечатаны в окне, которое отображает resized_image

Теперь попробуйте это с другими QR-кодами. И посмотреть, работает ли код…

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

Это все для этой серии, ребята!

Пока!

Свяжись со мной :)