Qt/C++. Распознавание объектов и место на карте.

В программу распознавания объектов "Object Detection" добавим возможность формирования карты с указанием места (текущих координат), где обнаружен тот или иной объект. Это позволит воспринимать сцену, получаемую с видео камеры более полно.
При разработке программы использованы типы QML/Qt Quick: Map, MapItemView, PositionSource, Plugin и другие. QML - это язык разметки пользовательского интерфейса, а Qt Quick предоставляет библиотеку типов и функций для QML. За основу при реализации карты взят пример из документации places_map, который был модифицирован под требования программы "Object Detection".
Объем кода С++ в части создания карты минимален - всего около 30 строк. Bсе остальное выполнено средствами QML.
Это седьмая статья из цикла "Real-Time Object Recognition". Первые шесть обубликованы здесь: 1, 2, 3, 4, 5 и 6.
При разработке программы использовались:
  • операционная система macOS Monterey версия 12.0.1;
  • среда разработки Qt Creator версия 6.0.0;
  • компилятор Apple Clang версия 13.0.0 (clang-1300.0.29.3);
  • библиотека 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.
  • тестирует исправность канала связи Mqtt.
  • открывает карту и показывает место нахождения (обнаружения) объекта(объектов).
2. Реализация карты и места обнаружения обьекта(объектов).
Весь исходный QML код проекта находится в ресурсах в файле map.qml. Тип Qt Quick Map используется для отображения карты. Для Map требуется плагин гео-сервисов. В проекте мы использовали Plugin "OSM" (Open Street Map). Перечень используемых серверов "OSM" можно увидеть в исходном тексте файла map.qml.
Тип PositionSource предоставляет информацию о текущей позиции видео камеры. В нашем проекте это значение находится в переменной var currentPosition = positionSource.position.coordinate.
Тип MapItemView используется для заполнения карты дополнительными метками. Этот тип содержит два основных элемента: model и delegate. Model обеспечивает текущие координаты. Delegate предназначен для визуализации меток. В программе он выводит на карту в точку с координатами маркер и подпись.
Код С++ для работы с картой находится в файлах: main.cpp и mainwindow.cpp. Как уже было сказано, объем кода не велик. Обратите внимание на то, какие параметрами передаются в объект класса MainWindow: MainWindow(QQmlContext *objectContext, QObject *objectMap, QWidget *parent ).
Пример работы программы приведен на снимке экрана 1.
Cнимок экрана 1.

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