banner
Qt/C++. Распознавание объектов и SQL запросы к базе данных.

В ранее опубликованной статье было описано применение СУБД PostgreSQL для создания базы данных и сохранения в ее таблицах объектов, найденных программой "Object Detector". В этой статье расскажем о реализации SQL запросов, позволяющих выбирать и отображать данные. Но для чего нужны этой программе SQL запросы? Дело в том, что "Object Detector" может распознавать и сохранять до 80 классов (типов) объектов. Понятно, что нужны запросы, реализующие выборки по каждому из классов.
Далее, программа за минуту может распознавать и сохранять на диске десятки фотографий объектов. Поэтому желательно иметь запросы для создания выборок по определенному периоду времени.
Еще одним требованием для создания SQL запросов могут быть выборки с учетом вероятности распознавания объектов. Из всего сказанного видно, что нужны SQL запросы по разным критериям поиска.
Другая задача, реализованная в программе - это возможность редактирования изображений. Дело в том, что качество изображений, получаемых с камеры, может быть разным, поэтому неплохо иметь инструментарий для их обработки.
В этой версии программы исправлены ошибки, допущенные в предыдущих версиях программы.
Это восьмая статья из цикла "Real-Time Object Recognition". Первые семь обубликованы здесь: 1, 2, 3, 4, 5, 6 и 7.
При разработке программы использовались:
  • операционная система macOS Big Sur версия 11.6.2;
  • среда разработки Qt Creator версия 6.0.2;
  • компилятор Apple Clang версия 13.0.0 (clang-1300.0.29.30);
  • библиотека OpenCV версия 4.5.5
  • нейронная сеть из группы YOLO, обученная на наборе данных COCO.
  • СУБД (система управления базами данных) PostgreSQL 14.1
  • администратор баз данных pqAdmin 4 version 6.4
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;
  • открывает карту и показывает место нахождения (обнаружения) объекта(объектов);
  • выполняет SQL выборки по комбинациям параметров: тип объекта, период времени, вероятность распознавания;
  • предоставляет возможность редактирования снимков распознанных объектов.
2. Реализация SQL запросов.
Весь исходный код SQL запросов находится в классах MainWindow и Sql. Класс Sql содержит форму для ввода параметров поискового образа. В состав формы входят поля: имя объекта, начало периода, конец периода, вероятность распознавания. В текущей версии программы реализованы 8 типов выборок:
  • все записи, содержащиеся в базе данных;
  • записи, имеющие определенный тип, например, "person";
  • записи c определенным коэффициентом вероятности распознавания;
  • записи, имеющие определенный тип и коэфициент вероятности распознавания. Например: "clock" и 0.78;
  • записи, созданные в определенный период времени;
  • записи, имеющие определенный тип и созданные в определенный период времени;
  • записи, созданные в определенный период времени и имеющие определенную вероятность;
  • записи, имеющие определенный тип, созданные в определенный период времени и имеющие определенную вероятность. Например: "car", в период c 20.02.2022 по 23.02.2022, с коэфициентом вероятности не менее 0.85.
Получаемые в результате SQL запроса множество записей помещается в объект класса QListView, расположенный в нижней части экрана приложения.
3. Редактирование снимков распознанных объектов.
Программа предоставляет следующие возможности редактирования изображенй: sharpen (резкость), blur (размытие), erode (эродирование), rotate (вращение). Для редактирования изображения достаточно выделить (mouse click) его в QListView, а затем выбрать нужный пункт в меню Edit. Пример работы программы в режиме редактирования приведен ниже на снимке экрана.
Все перечисленные функции редактирования реализованы средствами OpenCV. Исходный код находится в функции void MainWindow::editImage(int itemMenuEdit). Отдельные фрагменты кода для редактирования изображений взяты из примеров к хорошей книге "Qt 5 and OpenCV 4 Computer Vision Projects" .

edit_object_detection.png

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