- •Аннотация
- •Содержание
- •Введение
- •1. Анализ предметной области
- •1.1 Принципы построения систем трехмерного позиционирования на базе двух камер
- •1.2 Обнаружение движущихся объектов
- •1.3 Алгоритмы вычитания фона в OpenCv
- •1.4 Геометрическая модель простой триангуляции в стереосистеме
- •1.5 Особенности получения и синхронизации видеопотоков в ip-сетях
- •1.6 Требования к системе
- •Выводы по первому разделу
- •2. Выбор средств разработки
- •2.1 Выбор языка программирования для серверной части
- •2.2 Библиотеки компьютерного зрения
- •2.3 Протоколы обмена: WebSocket и json
- •Выводы по второму разделу
- •3. Моделирование системы
- •3.1 Архитектура системы
- •3.2 Среда виртуализации стереопары
- •3.3 Модель вычитания фона для стереопары
- •3.4 Архитектура двухканального вычитания фона
- •3.8 Вычисление центра ограничивающего квадрата
- •3.9 Адаптивное управление параметрами
- •3.10 Математическая модель простой триангуляции
- •3.11 Математическая модель простой триангуляции
- •3.12 Модель данных
- •Выводы по третьему разделу
- •4. Разработка приложения
- •4.1 Структура проекта
- •4.2 Реализация модуля захвата видеопотоков
- •4.3 Реализация вычитания фона и детекции объекта
- •4.4 Реализация триангуляции
- •4.5 Реализация клиента визуализации
- •4.6 Тестирование
- •Выводы по четвёртому разделу
- •Заключение
- •Список использованных источников
3. Моделирование системы
3.1 Архитектура системы
Архитектура разрабатываемой системы следует паттерну «клиент–сервер» с асинхронной обработкой на серверной стороне и событийно-управляемой логикой на клиенте. Компоненты системы представлены на рисунке 3.1.
Рисунок 3.1 – Схема архитектуры системы
Компоненты серверной части:
Видеообработка: два независимых потока, каждый инициирует cv2.VideoCapture() с URL камеры, в цикле вызывает read(), извлекает временную метку из RTP-пакета (используется системное время с коррекцией по задержке сети), помещает кадр и метку в потокобезопасную очередь queue.Queue();
Синхронизация и ратификация: модуль извлекает кадры из обеих очередей, сравнивает временные метки, выбирает пару с разницей < 5 мс (если превышено, отбрасывает более ранний кадр), применяет ректификацию cv2.remap() с заранее загруженными картами (map1_left, map2_left, map1_right, map2_right), передает ректифицированные кадры следующему модулю;
Stereo Matching: применяет StereoBM.compute() к левому и правому ректифицированным изображениям (преобразованным в оттенки серого cv2.cvtColor(…, cv2.COLOR_BGR2GRAY)), получает карту диспаратности (массив int16, значения в пикселях × 16), преобразует в float32 (деление на 16.0);
Triangulation & Object Detection: детектирует маркер ArUco на левом ректифицированном изображении (cv2.aruco.detectMarkers()), вычисляет центр маркера (u, v), извлекает диспаратность d из карты, пересчитывает в 3D-координаты (X, Y, Z) функцией cv2.reprojectImageTo3D() либо прямыми формулами, формирует JSON-RPC-сообщение;
WebSocket Server: асинхронный сервер на websockets.serve(), обрабатывает входящие команды от клиента (start_tracking, stop_tracking), рассылает уведомления update_position всем подключенным клиентам при каждом новом кадре.
Компоненты клиентской части (Godot):
WebSocketClient: класс Godot, подключается к серверу методом connect_to_url(), вызывает poll() в методе process(delta) для обработки входящих фреймов, слушает сигналы connection_established, connection_closed, data_received;
3D Scene Update: изменяет свойство translation узла MeshInstance3D (маркер — сфера) на новые координаты, отрисовка происходит автоматически движком (60 FPS по умолчанию).
3.2 Среда виртуализации стереопары
Разработка и отладка алгоритмов стереозрения на реальных IP-камерах сопряжена с рядом трудностей: необходимость физического размещения двух камер с контролируемым базисом, обеспечение стабильного освещения, синхронизация захвата и повторяемость экспериментов. Для решения этих проблем в данной работе используется среда виртуализации стереопары на базе игрового движка Godot 4. Виртуальный стенд позволяет генерировать синхронизированные пары изображений с точным знанием геометрии сцены, что критически важно для верификации алгоритмов вычитания фона и триангуляции.
Godot 4 предоставляет узлы `Camera3D`, которые моделируют перспективную камеру с настраиваемыми параметрами: поле зрения (FOV), ближняя и дальняя плоскости отсечения, режим проекции (перспективная или ортогональная). Для создания виртуальной стереопары на сцену помещаются два узла `Camera3D`, разнесённые вдоль горизонтальной оси X на расстояние, равное базису B. В данной работе используется базис B = 150 мм, что соответствует типичным значениям для промышленных стереосистем.
Камеры позиционируются относительно мировой системы координат следующим образом:
- Левая камера: координаты (0, 0, 0), ориентация — взгляд вдоль оси Z (вперёд).
- Правая камера: координаты (B, 0, 0), ориентация — также вдоль оси Z.
Для имитации реальных оптических характеристик фокусное расстояние f (в пикселях) пересчитывается из поля зрения камеры. Godot использует угол поля зрения по вертикали (FOV), который связан с фокусным расстоянием соотношением:
, (3.1)
где H — высота изображения в пикселях. При стандартном FOV = 70° и разрешении 1920 × 1080 фокусное расстояние составляет приблизительно 770 пикселей.
Для тестирования алгоритмов позиционирования в виртуальной среде создаётся тестовый объект — сфера радиусом 50 мм с текстурой ярко-красного цвета (для облегчения визуальной верификации). Объект может перемещаться по сцене по заданной траектории. В Godot реализованы два режима движения:
Ручное управление – объект перемещается клавишами-стрелками (вперёд/назад по Z, влево/вправо по X). Это позволяет оператору в реальном времени наблюдать реакцию системы.
Программная траектория – объект движется по синусоидальной траектории в горизонтальной плоскости: X(t) = X_0 + A sin(2 π f t), Z(t) = Z_0 + V t. Такой режим позволяет автоматизировать сбор экспериментальных данных.
Координаты объекта известны в мировой системе координат (поскольку Godot управляет его положением). Эти «истинные» координаты могут быть экспортированы вместе с изображениями (в отдельном UDP-канале или в метаданных файлов) для сравнения с результатами триангуляции. Это обеспечивает возможность количественной оценки точности разработанных алгоритмов без привлечения внешних измерительных систем.
Использование Godot в качестве среды виртуализации стереопары имеет следующие преимущества:
Полный контроль над геометрией - базис, фокусное расстояние, ориентация камер задаются точно и воспроизводимо.
Идеальная синхронизация - отсутствует десинхронизация кадров, что позволяет оценивать алгоритмы в условиях, приближенных к идеалу.
Отсутствие шумов и искажений - изображения, генерируемые движком, не содержат теплового шума, дисторсии или артефактов сжатия (если отключена постобработка). Это позволяет изолированно тестировать алгоритмы триангуляции.
Быстрое прототипирование - изменение параметров сцены (добавление новых объектов, изменение освещения) выполняется в графическом редакторе без физических манипуляций с камерами.
ью конечных результатов.
