Qt/C++. Real-time object recognition and save their in database.

В статье описана программа, которая принимает информацию с видеокамеры, распознает изображения в режиме реального времени, сохраняет данные на диске и в базе данных. В качестве базы данных используется PostgreSQL. В базу данных записываются имена распознанных объектов, вероятности их распознавания, даты и время детектирования, а также ссылки на изображения. К перечисленным параметрам могут быть добавлены, например, значения геолокации, номера камер и другие значения, необходимые в конкретной реализации. Но что дает применение базы данных в системе детектирования объектов? Гибкость в работе с данными. Например, можно без труда получить выборку по полям: имя объекта && дата и время обнаружения && номер камеры. То есть можно посмотреть изображения нужных объектов во времени и по месту. Понятно, что возможны и любые другие выборки.
Кроме описанных функций программа озвучивает (произносит имена и вероятности) найденных нейронной сетью объектов, делает снимки экранов и передает их по e-mail. Программа является развитием работы описанной ранее в статье.
При разработке программы использовались:
  • операционная система macOS BigSur версия 11.0.1;
  • среда разработки Qt/C++ версия 5.15.2;
  • компилятор Clang версия 12.0.0;
  • библиотека OpenCV версия 4.4.0
  • нейронная сеть из группы YOLO, обученная на наборе данных COCO.
  • СУБД (система управления базами данных) PostgreSQL 13.1
  • менеджер баз данных DBeaver 7.3.5
1. Программа выполняет следующие функции:
  • принимает поток данных с видеокамеры в режиме реального времени;
  • детектирует объекты с помощью нейронной сети (Deep Neural Networks) yolov4-tiny;
  • принимает настройки пользователя для установки связи между объектами и действиями;
  • записывает информацию в базу данных;
  • озвучивает (произносит) имена обнаруженных объектов и их вероятности;
  • создает снимки экрана монитора, сохраняет их в виде jpg файла на SSD диске, отсылает файлы на e-mail;
  • принимает и устанавливает настройки пользователя для модуля голосовых данных (высоту тона, громкость, скорость речи);
  • выполняет тестовую проверку функции создания и отсылки jpg файлов по протоколу SMTP;
  • выводит на экран сохраненные на диске скрины.
2. Описание работы программы.
Подключение к PostgreSQL, cоздание таблицы для хранения данных реализованы в файле main.cpp. Здесь выполняются SQL операторы DROP TABLE и CREATE TABLE. Функция bool connectionPostgreSql(QSqlDatabase db) выполняет подключение к базе данных.
SQL операторы INSERT INTO (запись кортежа в таблицу) выполняются в файле mainwindow.cpp в функции void MainWindow::updateTimer(). SQL операторы включены в тект C++. Вставка строки выполняеся по таймеру, частоту срабатывания которого можно изменить в тексте программы. Но для чего нужен таймер? Дело в том, что c камеры программа считаывает 30 кадров в секунду. Записывать данные с такой частотой в базу данных нерационально. По этой причине поток данных с камеры и поток записи в базу данных разнесены по времени и частоте. Синхранизация между потоками выполняется с помощью семафоров. Поток данных с камеры и детектирование обьектов не сдерживаются потоком записи в базу данных.
Вывод таблицы базы данных на экран монитора реализован в файле viewtable.cpp. Пример вывода показан на рисунке 1. Обновление таблицы происходит автоматически после сохранения каждой новой записи (кортежа) в базе данных. Этот пример кроме окна таблицы базы данных содержит окно диалога для выбора параметров и окно с данными, поступающими с видеокамеры.
Рис. 1
Состав сторонних (не разработанных авторами статьи) подпрограмм, а также описание ранее реализованных возможностей программы можно найти на странице.
Полное описание программы предоставляется платно в файлах pdf или odt.
Проект можно загрузить.
Евгений Вересов. Семен Цветков.
5.03.2021 года.