Qt/C++. Object Recognition and Protocol MQTT.

Как выглядят те приложения, что обмениваются данными и командами по протоколу MQTT? В нашем случае программа Object Detector распознает объекты и передает их изображения по протоколу MQTT. Другая программа Client Mqtt принимает и отображет эти фотографии. Интересно, что Client Mqtt может выдавать в принципе любые команды приложению Object Detector. Например, команды на останов или запуск передачи данных. Кроме того, оба приложения постоянно тестируют исправность каналов связи. Для организации связи между компьютерами нужен посредник. В качестве брокера используется broker.hivemq.com и TCP Port: 1883. При необходимости можно использовать TSL и другой порт.
В статье описаны примеры приложений для обмена данными и командами по протоколу MQTT с использованием классов QMqttClient, QMqttSubscription, QMqttTopicFilter. Установить модуль Qt MQTT можно, например, так. Детектирование объектов выполняется средствами Qt/C++, Open/CV и нейронной сетью из группы YOLO.
Это шестая статья из цикла "Real-Time Object Recognition". Первые пять обубликованы здесь: 1, 2, 3, 4 и 5. В приложение Object Detector внесены исправления которые повысили стабильность работы программы.
При разработке программы использовались:
  • операционная система macOS BigSur версия 11.5.2;
  • среда разработки Qt/C++ версия 5.15.2;
  • компилятор Apple Clang версия 12.0.5;
  • библиотека OpenCV версия 4.4.0
  • нейронная сеть из группы YOLO, обученная на наборе данных COCO.
  • СУБД (система управления базами данных) PostgreSQL 13.3
  • администратор баз данных pqAdmin 4 version 5.2
1. Программа Object Detector выполняет следующие функции:
  • принимает поток данных с видеокамеры в режиме реального времени;
  • детектирует объекты с помощью нейронной сети (Deep Neural Networks) yolov4-tiny;
  • принимает настройки пользователя для установки связи между объектами и действиями;
  • озвучивает (произносит) имена обнаруженных объектов и вероятности их распознавния;
  • принимает и устанавливает настройки пользователя для модуля голосовых данных (высоту тона, громкость, скорость речи);
  • сохраняет изображения обнаруженных объектов (images) в виде jpg файллов на SSD диске и в базе данных PostgreSQL;
  • отсылает файлы images по заданному в программе адресу e-mail;
  • отсылает файлы images по протоколу FTP на удаленный сервер;
  • записывает звук с микрофона на SSD диск в виде wav файлов;
  • отображает в Status Bar приложения уровень звукового сигнала, поступающего на вход микрофона;
  • выводит на экран сохраненные на диске images;
  • формирует текущeе герафическое положение устройства и сохраняет его в базе данных;
  • подключается к брокеру broker.hivemq.com;
  • подписывается на канал приема команд от программы Client Mqtt;
  • передает программе Client Mqtt через брокера фотографии обнаруженных объектов;
  • выполняет команды, полученные от приложения Client Mqtt.
  • тестирует исправность канала связи.
2. Программа Client Mqtt выполняет следующие функции:
  • подключается к брокеру broker.hivemq.com;
  • подписывается на канал приема данных от приложения Object Detector;
  • принимает от Object Detector через брокера фотографии присланных объектов и отображает их;
  • выдаёт по требованию пользователя приложению Object Detector команды start/stop для управления передачей данных;
  • тестирует исправность канала связи.
3. Реализация протокола MQTT.
Обмен информацией между программами начинается сразу без предварительной настройки, достаточно в программе Object Detector выбрать Check Box "Mqtt" для нужных вам типов объектов. При обнаружении программой указанных объектов она автоматически перешлет их изображения через брокера программе Client Mqtt.
Протокол MQTT реализован в файле mqttclient.cpp для приложения Object Detector и в файле mainwindow.cpp для приложения Client Mqtt. В программах использованы фрагменты исходных текстов из примеров к книге: Hands-On Mobile and Embedded Development with Qt 5: Build apps for Android, iOS, and Raspberry Pi with C++ and Qt. Рекомендую эту книгу.

Полное описание программы предоставляется платно в файлах pdf или odt.
Проект можно загрузить.
Евгений Вересов.
23.09.2021 года.