Добавил:
У меня есть канал с приколами: t.me/urmipies_garbage Подпишитесь пж-пж!!!! Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Я получил 5 за защиту кста.docx
Скачиваний:
0
Добавлен:
02.09.2026
Размер:
352 Кб
Скачать

4. Разработка приложения

4.1 Структура проекта

Программная система организован в виде двух независимых, но взаимодействующих приложений: серверной части на языке Python и клиентской части на игровом движке Godot 4. Такое разделение обусловлено различными требованиями к вычислительной мощности и пользовательскому интерфейсу. Сервер выполняет ресурсоёмкие операции компьютерного зрения (вычитание фона, ректификацию, триангуляцию) и может быть развёрнут на выделенной вычислительной машине. Клиент обеспечивает визуализацию трёхмерной сцены и может работать на менее производительном оборудовании.

Серверная часть имеет следующую структуру каталогов:

- src/capture/ — модули захвата видеопотоков с IP-камер по протоколу RTSP;

- src/calibration/ — модули калибровки стереопары, загрузки и сохранения параметров;

- src/stereo/ — модули вычитания фона, детекции объекта и триангуляции;

- src/network/ — WebSocket-сервер и JSON-RPC диспетчер;

- src/config/ — конфигурационные файлы (параметры камер, пороги, пути);

- src/utils/ — вспомогательные функции (логирование, работа с временными метками).

Клиентская часть на Godot 4 включает:

- main.tscn — главная сцена с трёхмерным пространством;

- WebSocketClient.gd — скрипт для подключения к серверу и приёма данных;

- Marker3D.gd — скрипт управления трёхмерным маркером (сферой или моделью);

- CameraController.gd — скрипт для управления камерой сцены (вращение, масштабирование);

- CoordinateGrid.gd — скрипт для отображения координатной сетки и осей.

Схема взаимодействия модулей представлена на рисунке

Рисунок 4.1 – Схема взаимодействия модулей системы

4.2 Реализация модуля захвата видеопотоков

Модуль захвата предназначен для подключения к двум IP-камерам, приёма видеопотоков в реальном времени и извлечения временных меток для последующей синхронизации. Основные требования к модулю: поддержка протокола RTSP, возможность работы с двумя камерами одновременно, минимальная задержка и устойчивость к кратковременным потерям пакетов [14].

При реализации использован класс cv2.VideoCapture, который поддерживает RTSP-URL напрямую. Для каждой камеры создаётся отдельный поток (наследник threading.Thread), в котором в бесконечном цикле вызывается метод read(). Полученный кадр и временная метка (системное время в момент захвата) помещаются в потокобезопасную очередь queue.Queue ограниченного размера (например, 10 кадров). Это позволяет буферизовать кадры и сглаживать кратковременные задержки в сети.

Особое внимание уделено обработке ошибок: если камера недоступна при старте, модуль предпринимает до пяти попыток переподключения с интервалом 2 секунды. В случае устойчивого сбоя в лог записывается сообщение об ошибке, а поток завершается. При восстановлении соединения захват возобновляется автоматически.

4.3 Реализация вычитания фона и детекции объекта

Модуль вычитания фона реализует алгоритм MOG2 из библиотеки OpenCV. Для левой и правой камер создаются отдельные экземпляры cv2.createBackgroundSubtractorMOG2, поскольку фоновые сцены различаются из-за разной перспективы.

Параметры алгоритма MOG2 подбирались экспериментально:

history — количество предыдущих кадров, учитываемых при построении модели фона; установлено значение 500;

varThreshold — порог дисперсии для классификации пикселя; значение 16;

detectShadows — флаг обнаружения теней; включён (значение True).

После получения маски переднего плана применяются морфологические операции: медианная фильтрация для удаления шума, закрытие ядром 5×5 для заполнения отверстий, открытие ядром 3×3 для удаления изолированных выбросов.

Детекция объекта заключается в поиске контуров на очищенной маске с помощью cv2.findContours с режимом RETR_EXTERNAL (только внешние контуры). Выбирается контур с максимальной площадью. Для выбранного контура вычисляется ограничивающий прямоугольник функцией cv2.boundingRect, возвращающей координаты левого верхнего угла (x, y) и размеры (w, h). Центр прямоугольника вычисляется как

(x + w/2, y + h/2) (4.1).

Соседние файлы в предмете Дипломная работа (подготовка и защита)