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

В статье описана программа, которая принимает информацию с видеокамеры и микрофона, распознает изображения в режиме реального времени, сохраняет видео данные на диске и в базе данных как jpg файлы, сохраняет звук на диске в виде wav файлов. Включение записи звука происходит по команде из нейронной сети. Например, если пользователь определит в настройках программы, что включить запись звука с микрофона следует при появлении на видео изображения человека или собаки, то нейронная сеть при распознании этих объектов, выдаст команду на создание звукового файла и записи звука на диск. Как долго будет продолжаться процесс сохранения звука? До тех пор, пока нейронная сеть не потеряет эти объекты или пользователь не отключит Сheck Box сохранения звука для этих объектов.
Это третья статья из цикла "Real-time object recognition". Первые две статьи обубликованы ранее здесь и здесь. В этой версии программы кроме новой функциональности изменены методы сохранения видео данных в режиме мульти-выбора объектов. Теперь пользователь может выбрать любое количество объектов и любое количество действий (activity) для них.
При разработке программы использовались:
  • операционная система macOS BigSur версия 11.2.3;
  • среда разработки Qt/C++ версия 5.15.2;
  • компилятор Apple Clang версия 12.0.0;
  • библиотека OpenCV версия 4.4.0
  • нейронная сеть из группы YOLO, обученная на наборе данных COCO.
  • СУБД (система управления базами данных) PostgreSQL 13.1
  • менеджер баз данных DBeaver Версия 7.3.3
1. Программа выполняет следующие функции:
  • принимает поток данных с видеокамеры в режиме реального времени;
  • детектирует объекты с помощью нейронной сети (Deep Neural Networks) yolov4-tiny;
  • принимает настройки пользователя для установки связи между объектами и действиями;
  • записывает видео информацию в базу данных и на диск;
  • озвучивает (произносит) имена обнаруженных объектов и их вероятности;
  • создает снимки экрана монитора, сохраняет их в виде jpg файла на SSD диске, отсылает файлы на e-mail;
  • принимает и устанавливает настройки пользователя для модуля голосовых данных (высоту тона, громкость, скорость речи);
  • записывает звук с микрофона на диск в виде wav файлов;
  • отображает в Status Bar приложения уровень звукового сигнала, поступащего на вход микрофона.
  • выполняет тестовую проверку создания и отсылки jpg файлов по протоколу SMTP;
  • выводит на экран сохраненные на диске скрины.
2. Запись звука с микрофона на диск.
Стартует запись звука на диск по команде из нейронной сети в функции void MainWindow::updateTimer(). Сама нейронная сеть работает в отдельном потоке. Что выполняет эта функция? В ней устанавливаются настройки объекта класса QAudioEncoderSettings такие, как число каналов входа (Channel Count), качество кодирования (QMultimedia::EncodingQuality) и другие необходимые параметры. Затем выдается команда на запись звука.
Какое колличество входных каналов может быть задействовано? Любое разумное. Для этого необходимо, чтобы в наличии было соответствующее оборудование, и эту программу потребуется модифицировать. Что происходит, если нейронная сеть теряет заданные пользователем объекты? В этом случае программа продолжит запись в течение некоторого времени (5 секунд), а затем остановит запись. Если нейронная сеть позже обнаружит указанные пользователем объекты, она вновь инициирует запись, но это будет уже файл с другим именем. Имя файла формируется автоматически и включает в себя дату и время с точностью до милисекунд.
Для отображения уровня сигнала, поступающего на микрофон, используется специальный индикатор, который помещен в StatusBar приложения и который включается автоматически при распознавании нейронной сетью заданных объектов. Индикатор выполнен в виде отдельного класса AudioLevel взятого автором статьи отсюда без существенных модификаций. Пример работы индикатора показан на рисунке 1.
Рис. 1
Полное описание программы предоставляется платно в файлах pdf или odt.
Проект можно загрузить.
Евгений Вересов.
6.04.2021 года.