Qt/C++. Object Recognition and Geo Position Info.

В статье описан пример формирования и использования географического (Geo) положения в контексте Object Recognition. Эта задача может быть актуальной в том случае, когда камера, распознающая объекты, находится в движении. Geo положение предствляет собой вектор, состоящий из 9 значений и изменяющийся с некоторой частотой. Предположим, что мы нашли способ его формирования. Однако cам по себе вектор мало что значит. Для полной картины его значения требуется сопоставлять с другими данными, такими как: имя объекта, время обнаружения, фотографией, верояностью распознавания. Предположим, что мы создаем такой список. Однако эти данные надо где-то сохранять с тем, чтобы затем их использовать. Как вариант решения, полученную информацию можно записывать в таблицы базы данных с соответствующими связями между записями (кортежами).
Ниже описан пример формирования geo положения объектов с использованием классов QGeoPositionInfoSource, QGeoPositionInfo, QGeoCoordinate. Детектирование объектов выполняется средствами Qt/C++, Open/CV и нейронной сетью из группы YOLO. Сохраняется информация в базе данных СУБД PostgreSQL в двух таблицах detectedobjects и geoposition.

Это пятая статья из цикла "Real-Time Object Recognition". Первые четыре статьи обубликованы ранее здесь, здесь, здесь и здесь.
При разработке программы использовались:
  • операционная система macOS BigSur версия 11.4;
  • среда разработки 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. Программа выполняет следующие функции:
  • принимает поток данных с видеокамеры в режиме реального времени;
  • детектирует объекты с помощью нейронной сети (Deep Neural Networks) yolov4-tiny;
  • принимает настройки пользователя для установки связи между объектами и действиями;
  • озвучивает (произносит) имена обнаруженных объектов и вероятности их распознавния;
  • принимает и устанавливает настройки пользователя для модуля голосовых данных (высоту тона, громкость, скорость речи);
  • сохраняет изображения обнаруженных объектов (images) в виде jpg файллов на SSD диске и в базе данных PostgreSQL;
  • отсылает файлы images по заданным в программе адресам e-mail;
  • отсылает файлы images по протоколу FTP на удаленный сервер;
  • записывает звук с микрофона на SSD диск в виде wav файлов;
  • отображает в Status Bar приложения уровень звукового сигнала, поступающего на вход микрофона;
  • выводит на экран сохраненные на диске images;
  • формирует текущeе герафическое положение устройства и сохраняет его в базе данных.
2. Формирование вектора Geo Position.
В состав вектора входят значения:
  • QGeoPositionInfo::Direction
  • Пеленг.
  • QGeoPositionInfo::GroundSpeed
  • Cкорость.
  • QGeoPositionInfo::VerticalSpeed
  • Вертикальная скорость.
  • QGeoPositionInfo::MagneticVariation
  • Магнитное склонение.
  • QGeoPositionInfo::HorizontalAccuracy
  • Точность широты и долготы в метрах.
  • QGeoPositionInfo::VerticalAccuracy
  • Точность высоты в метрах.
  • QGeoCoordinate. Latitude.
  • Широта.
  • QGeoCoordinate. Longitude.
  • Долгота
  • QGeoCoordinate. Altitude .
  • Высота.
При использовании wi-fi для определения geo координат из приведенного выше перечня будут формироваться только последние пять позиций. Программа при этом выведет сообщение об отсутствии GPS трекера: "serialnmea: No known GPS device found. Specify the COM port via QT_NMEA_SERIAL_PORT."
Формирование вектора реализовано в файлах positionclient.cpp и positionserver.cpp. В программе использованы фрагменты исходных текстов из примеров к книге: Hands-On Mobile and Embedded Development with Qt 5: Build apps for Android, iOS, and Raspberry Pi with C++ and Qt. Рекомендую эту книгу.
3. Сохранение информации в базе данных.
Приложение имеет две таблицы: detectedobjects и geoposition. Таблица detectedobjects содержит следующий перечень полей и соответствующих им значений:
  • id
  • primary key.
  • objectname
  • имя объекта.
  • detectiontime
  • время обнаружения объекта .
  • probability
  • вероятность обнаружения объекта.
  • linkphoto
  • ссылка на фотографию.
Таблица geoposition содержит следующий перечень полей в которых хранятся значения вектора Geo Position:
  • id
  • primary key,foreign key.
  • direction
  • пеленг.
  • ground_speed
  • скорость.
  • vertical_speed
  • вертикальная скорость.
  • magnetic_variation
  • магнитное склонение.
  • horizontal_accuracy
  • точность широты и долготы в метрах
  • vertical_accuracy
  • точность высоты в метрах.
  • latitude
  • широта.
  • longitude
  • долгота.
  • altitude
  • высота.
Записи в таблицах имеют отношение один к одному.
Полное описание программы предоставляется платно в файлах pdf или odt.
Проект можно загрузить.
Евгений Вересов.
21.08.2021 года.