- •Аннотация
- •Содержание
- •Введение
- •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 Тестирование
- •Выводы по четвёртому разделу
- •Заключение
- •Список использованных источников
2.2 Библиотеки компьютерного зрения
OpenCV (Open Source Computer Vision Library) — кросс-платформенная библиотека алгоритмов компьютерного зрения, обработки изображений и машинного обучения, выпущенная Intel в 2000 году под лицензией BSD [7]. К 2025 году OpenCV достигла версии 4.8.0, включает >2500 оптимизированных алгоритмов и поддерживает языки C++, Python, Java, MATLAB. Библиотека применяется в автономных транспортных средствах (Tesla Autopilot до 2021 года использовала OpenCV для предобработки [6]), промышленных системах контроля качества (распознавание дефектов на конвейерах КАМАЗ, ГАЗ) и медицинской диагностике (анализ рентгеновских снимков в системах ООО «ЦРТ», Москва).
2.3 Протоколы обмена: WebSocket и json
Передача координат объекта от серверного модуля (Python) к клиенту визуализации (Godot) требует протокола, обеспечивающего низкую задержку, двунаправленность (клиент может отправлять команды серверу) и структурированный формат данных. В разрабатываемой системе выбрана связка WebSocket (транспортный уровень) и JSON (формат сериализации данных) с семантикой JSON-RPC 2.0 для организации вызовов процедур [17].
WebSocket (RFC 6455) — протокол полнодуплексной связи поверх одного TCP-соединения. В отличие от HTTP, где клиент вынужден постоянно опрашивать сервер (polling), WebSocket позволяет серверу отправлять данные клиенту асинхронно в любой момент. Это критически важно для задачи реального времени: сервер обработки видео вычисляет новые координаты объекта с частотой 25 Гц и должен немедленно передать их клиенту для визуализации [20].
Основные характеристики WebSocket, определившие его выбор:
Низкая задержка — после установки соединения отсутствуют накладные расходы на заголовки HTTP (до 800 байт против 2–10 байт в WebSocket-фреймах).
Двунаправленность — клиент может отправлять команды без установки нового соединения.
-Поддержка в Godot — движок имеет встроенный класс `WebSocketClient`, который полностью реализует протокол и интегрируется с циклом обработки событий.
Поддержка в Python — библиотека `websockets` (асинхронная) и `websocket-client` (синхронная) обеспечивают простой API.
Альтернативные протоколы были рассмотрены и отклонены по следующим причинам:
REST (HTTP) — требует постоянных запросов от клиента (polling), что создаёт избыточную нагрузку и увеличивает задержку до 200–300 мс.
gRPC — эффективен для высоконагруженных систем, но требует генерации кода из .proto-файлов, что усложняет прототипирование; поддержка в Godot отсутствует.
MQTT — протокол публикации/подписки, избыточен для сценария «один сервер — один клиент»; требует брокера (например, Mosquitto).
Выводы по второму разделу
Во втором разделе проведён обоснованный выбор технологического стека для реализации программной системы трёхмерного позиционирования. Рассмотрены альтернативные варианты по каждому компоненту системы и приняты решения, обеспечивающие оптимальное сочетание производительности, скорости разработки и доступности необходимых библиотек.
В качестве языка программирования для серверной части выбран Python 3.11. Несмотря на более низкую производительность по сравнению с C++ (58 мс против 22 мс обработки кадра), Python обеспечивает высокую скорость прототипирования, богатую экосистему библиотек компьютерного зрения (OpenCV-Python, NumPy) и встроенную поддержку асинхронности (asyncio, websockets). Динамическая типизация и наличие REPL существенно ускоряют экспериментальную отладку параметров стереосопоставления.
Библиотекой компьютерного зрения определена OpenCV 4.8. Данный выбор обусловлен её статусом де-факто стандарта в области компьютерного зрения, наличием полной поддержки Python, реализацией всех необходимых алгоритмов (калибровка, ректификация, вычитание фона MOG2, стереосопоставление StereoBM, триангуляция), а также открытой лицензией BSD, не налагающей ограничений на коммерческое использование.
Для передачи данных от сервера к клиенту визуализации выбран протокол WebSocket в связке с форматом JSON и семантикой JSON-RPC 2.0. WebSocket обеспечивает полнодуплексную связь с низкой задержкой (заголовки фреймов 2–10 байт против до 800 байт у HTTP), позволяет серверу асинхронно отправлять координаты клиенту без необходимости постоянных запросов (polling) и имеет встроенную поддержку в Godot 4 (класс WebSocketClient) и Python (библиотека websockets). Альтернативные протоколы (REST, gRPC, MQTT) отклонены из-за избыточности, отсутствия поддержки в Godot или неприемлемых задержек.
Среда визуализации Godot 4 выбрана как современный, бесплатный и открытый игровой движок, предоставляющий мощные средства для создания трёхмерных сцен, поддержку WebSocket «из коробки», возможность кроссплатформенной компиляции и низкий порог входа благодаря встроенному языку GDScript. Godot 4 также позволяет создавать виртуальный стенд для тестирования алгоритмов без физических камер, что значительно упрощает отладку и верификацию.
Таким образом, выбранный технологический стек (Python 3.11 + OpenCV 4.8 + WebSocket/JSON-RPC + Godot 4) является сбалансированным решением, полностью отвечающим поставленным требованиям по производительности, функциональности, скорости разработки и возможности дальнейшего сопровождения. Все компоненты являются открытыми, кроссплатформенными и имеют активное сообщество, что обеспечивает независимость от зарубежных поставщиков и возможность адаптации под конкретные технологические задачи.
