banner
Qt/C++. Object Recognition and Protocol TCP/IP.

В статье описана реализация протокола TCP/IP в составе программы "Objects Detection". Как этот протокол используется в программе распознавания объектов? Протокол TCP/IP применяется для передачи клиентам изображений и имен их файлов, обнаруженных "Objects Detection" объектов. Программа выполняет функции источника и сервера для передачи/приема.
В состав загрузочного zip пакета включен проект Client_TCP, содержащий несколько клиентов для работы с программой "Objects Detection". Клиенты принимают от программы "Objects Detection" изображения (QByteArray) и имена их файлов (QString), сохраняют изображения на локальных дисках в формате jpg файлов, выводят изображения на экран. Взгляните на рисунок, содержащий несколько клиентов. Внешне их дизайн очень схож с дизайном программы "Objects Detection". Однако различие состоит в том, что клиенты не имеют видеокамер, все данные принимаются ими от "Objects Detection" посредством протокола TCP/IP.
Каждый клиент имеет возможность считать со своего локального диска любой файл с изображением (форматов jpg, gif, *) и отправить его другим клиентам. Клиенты примут этот файл, сохранят его на своих дисках и выведут изображение на экран. Другими словами, клиенты объединены между собой посредством программы "Objects Detection" в Chat.
Текущую версию программы "Objects Detection" определим как 1.1. В этой версии введен асихронный режим передачи данных для клиентов всех типов (FTP, MQTT, TCP/IP, SMTP, ...). Этот режим позволяет в несколько раз уменьшить время доставки данных клиентам. Конечно остается возможность установки и синхронного режима передачи данных.
Это тринадцатая статья из цикла "Real-Time Object Recognition". Первые двенадцать опубликованы здесь: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12.
При разработке программ "Objects Detection" использовались:
  • операционная система 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.1
  • администратор баз данных pqAdmin 4 version 6.4
1. Программа "Objects Detection" выполняет следующие функции:
  • принимает поток данных с видеокамеры в режиме реального времени;
  • детектирует объекты с помощью нейронной сети (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 выборки по комбинациям параметров: тип объекта, период времени, вероятность распознавания;
  • предоставляет возможность редактирования снимков распознанных объектов;
  • загружает с веб сервера HTML страницу с фотографиями распознанных объектов и сохраняет ее на локальном диске компьютера;
  • сканирует и находит устройства Bluetooth;
  • подключается к выбранному пользователем устройству Bluetooth образуя пару;
  • пересылает на удаленное устройство Bluetooth, например, телефон файлы изображений, распознанных программой объектов.
  • формирует матрицы настроек программы;
  • выполняет операции: Save As, Save, Open, Open Recent для файлов, содержащих матрицы настроек;
  • выполняет операции connect/disconnect для клиентов, работающих по протоколу TCP/IP;
  • выполняет операции read/send для объектов QByteArray и QString, содержащих изображения и имена файлов изображений по протоколу TCP/IP.
2. Как реализован протокол TCP/IP в программе "Objects Detection".
Реализация протокола TCP/IP находится в классе "TcpServer". Каждый socket вновь подключаемого клиента записывается в вектор QVector <QTcpSocket*> socketVector командой socketVector.push_back(socket). При отключении клиента его socket удаляется из вектора командой socketVector.remove(i). Прием и передача блоков данных реализованы по стандартной схеме.
Асинхронный режим передачи для всех Activity определяется в конструкторе класса "MainWindow" устанавкой значения "0" в переменную timer_interval_main(0). Любое другое значение определяет синхронный режим передачи данных с установленным интервалом. Например, значение в переменной timer_interval_main(500) означает, что данные будут передаваться с интервалом в 500 миллисекунд.
3. Клиенты протокола TCP/IP .
Для тестирования связки клиент-сервер протокола TCP/IP написан отдельнный проект Client_TCP. В состав проекта включено несколько клиентов. Поcле компиляции, сборки и запуска этого проекта, все клиенты будут пытаться автоматически подключиться к серверу, к тому, что находится в программе "Objects Detection". Если программа "Objects Detection" запущена и открыт режим работы с видеокамерой, клиентам удастся подключиться, после этого они будут полностью готовы к работе. При поступлении с сервера информации она будет принята и отображена клиентами. В строке состояния клиентов будет указано количество принятых изображений.
Любой клиент имет возможность считать со своего локального диска файл изображения и передать его другим клиентам.

Ниже показан пример отображения клиентами получаемых изображений.

tcp_ip_image.png
Полное описание исходного текста программ "iOS MQTT Client", "macOS MQTT Client", "Client TCP", "Objects Detection" предоставляется платно в файлах pdf или odt при запросе через e-mail: veresov@jdesign.ru.
Проект можно загрузить.
Евгений Вересов.
03.02.2023 года.