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

В текущей версии (1.6) программы Object Detector реализована функция сохранения в файлах на диске видео сигнала, поступающего с камеры. Предлагаются два режима сохранения.
В первом режиме запись на диск начинается при распознавании программой заданных пользователем объектов. Например, если пользователь решил, что сохранение должно начинаться при обнаружении объектов: человек, кошка, автобус, то при распознавании программой этих обьектов по отдельности или вместе, запускается подпрограмма сохранение видео. Что произойдет если из поля зрения камеры уйдет автобус, а остальные объекты останутся? Ничего не произойдет, запись продолжится. А что будет, если все заданные пользователем объекты исчезнут? В этом случае программа продолжит сохранение видео в течении 10 секунд и затем прекратит запись.
Ну хорошо, а что, если любой из этих объектов вновь появится перед камерой через какое-то время? Программа вновь начнет запись видео, но уже в новый файл. Так работает алгоритм первого режима.
Второй алгоритм работы программы более прост. Пользователь может запустить/остановить сохранение видео в любой момент времени без распознавания обьектов. Это просто режим сохранения видео в файл. Однако может возникнуть вопрос. А есть ли возможность параллельно запустить процесс распознавания объектов, скажем, для передачи фотографий распознанных объектов по какому-либо из реализованных в программе протоколов: FTP,TCP,SMTP, ... ? Да, есть. Программа будет писать видео в файл, одновременно распознавать объекты и рассылать jpg файлы по заданному протоколу или, например, генерировать звук.
Напомню, что программа имеет функцию сохранения речи в звуковых файлах на диске. Можно ли объединить видео и звук в единый мультимедиа файл? Да, можно. Правда, для этого надо воспользоваться сторонней программой, например, FFmpeg. Было бы хорошим решением создавать мультимеда файлы в тексте С++ программы Object Detector, предварительно скомпилировав библиотеку OpenCV с ключом FFMPEG. Но при компиляции OpenCV версий 4.5 - 4.7 с ключом FFMPEG у меня (и возможно не уменя одного) генерируется исключение.
Это восемнадцатая статья из цикла "Real-Time Object Recognition". Первые семнадцать опубликованы здесь: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 и 17.
При разработке программ использовались:
  • операционная система macOS Big Sur версия 11.6.2;
  • среда разработки Qt Creator версия 8.0.0;
  • компилятор Apple Clang версия 13.0.0 (clang-1300.0.29.30);
  • библиотека OpenCV версия 4.5.5
  • нейронная сеть из группы YOLO, обученная на наборе данных COCO.
  • СУБД (система управления базами данных) PostgreSQL 14.7
  • администратор баз данных pqAdmin 4 version 6.4
1. Программа Object Detector выполняет следующие функции:
  • принимает поток данных с видеокамеры в режиме реального времени;
  • детектирует объекты с помощью нейронной сети (Deep Neural Networks) yolov4-tiny;
  • принимает настройки пользователя для установки связи между объектами и действиями;
  • озвучивает (произносит) имена обнаруженных объектов и вероятности их распознавания;
  • принимает и устанавливает настройки пользователя для модуля голосовых данных (высоту тона, громкость, скорость речи);
  • сохраняет изображения обнаруженных объектов (images) в виде jpg файллов на SSD диске и ссылки на них в базе данных PostgreSQL;
  • отсылает файлы images по заданному в программе e-mail адресу;
  • отсылает файлы images по протоколу FTP на удаленный сервер;
  • записывает звук с микрофона на диск в виде wav файлов;
  • отображает в Status Bar приложения уровень звукового сигнала, поступающего на вход микрофона;
  • выводит на экран сохраненные на диске images;
  • формирует текущeе графическое положение устройства и сохраняет его в базе данных;
  • подключается к брокеру broker.hivemq.com;
  • подписывается на канал приема команд от программы Client Mqtt;
  • передает программе Client Mqtt через брокера фотографии обнаруженных объектов;
  • выполняет команды, полученные от приложения Client Mqtt;
  • тестирует исправность канала связи Mqtt;
  • открывает карту и показывает место нахождения (обнаружения) объекта(объектов);
  • выполняет SQL выборки по комбинациям параметров: тип объекта, период времени, вероятность распознавания;
  • предоставляет возможность редактирования снимков распознанных объектов;
  • загружает с веб сервера HTML страницу с фотографиями распознанных объектов и сохраняет ее на локальном диске компьютера;
  • сканирует и находит устройства Bluetooth;
  • подключается к выбранному пользователем устройству Bluetooth, образуя пару;
  • пересылает на удаленное устройство Bluetooth, например, телефон файлы изображений, распознанных программой объектов.
  • формирует матрицы настроек программы;
  • выполняет операции: Save As, Save, Open, Open Recent для файлов, содержащих матрицы настроек;
  • выполняет операции connect/disconnect для клиентов, работающих по протоколу TCP/IP;
  • выполняет операции read/send для объектов QByteArray и QString, содержащих изображения и имена файлов изображений по протоколу TCP/IP;
  • реализует протоколы SSL и WebSocket;
  • запускает/останавливает QuickTime Player для создания видео клипов;
  • включает/отключает Activity: MQTT, Bluetooth, Speech;
  • измеряет, выводит на экран и озвучивает дистанции до распознанных объектов;
  • сохраняет на диске видео с камеры в файлах формата avi.
2. Сохранение видео в файлах формата avi.
Первый режим сохранения видео начинается при нажатии на кнопку "Start", при этом последует вызов функции void SelectName::startButton_clicked(). Затем последовательно вызывается множество других функций из классов: MainWindow, NewThread. Отмечу, что в программе используется несколько потоков и таймеров. Алгоритм может показаться не простым.
Второй режим стартует при выборе пункта меню "Start Video Saving", при этом последует вызов функции void startVideoSaving(). В этом режиме алгоритм записи видео более прост. Однако в программе предусмотрена возможность одновременно с записью видео в файл, запуск и выполнение множества других действий, как то: cохранение звука, сохранение фотографий, отсылка jpg файлов по сети, "проговариваение увиденного".
3. Описание исходных текстов.
Полное описание исходных текстов проектов: Object Detector version 1.6, iOS MQTT Client, macOS MQTT Client, Client TCP, SslWebSocketServer, SslWebSocketClient предоставляются платно в файлах pdf или odt при запросе через e-mail: veresov@jdesign.ru.
Проекты можно загрузить и поблагодарить: Спасибо!  2202   2005   9442   6213   (сбербанк)
Евгений Вересов.
21.07.2023 года.