# Beacon Tracker с Web Viewer Проект для отслеживания белой точки (beacon) с камеры и отображения видео потока в реальном времени через веб-интерфейс. ## Структура проекта ``` radar_frontend/ ├── beacon_track/ # C++ приложение для захвата и обработки видео │ ├── src/ # Исходный код │ ├── include/ # Заголовочные файлы │ ├── build/ # Сборка проекта │ └── config.ini # Конфигурация │ ├── web_viewer/ # Веб-приложение для просмотра видео │ ├── app.py # Flask сервер │ ├── shared_memory_reader.py # Модуль для чтения из shared memory │ ├── templates/ # HTML шаблоны │ └── start.sh # Скрипт запуска │ └── build_and_run.sh # Скрипт сборки и запуска ``` ## Быстрый старт ### 1. Сборка C++ проекта ```bash cd /home/awe/Documents/radar_frontend ./build_and_run.sh ``` Этот скрипт: - Соберет C++ проект beacon_track - Покажет инструкции по запуску - Опционально запустит beacon tracker ### 2. Установка зависимостей Python ```bash cd web_viewer pip install -r requirements.txt ``` ### 3. Запуск **Терминал 1 - Beacon Tracker:** ```bash cd beacon_track/build ./main realtime output.txt ``` **Терминал 2 - Web Viewer:** ```bash cd web_viewer ./start.sh ``` **Браузер:** ``` http://localhost:5000 ``` ## Как это работает ### Архитектура 1. **C++ Beacon Tracker** (`beacon_track/`) - Захватывает видео с камеры через GStreamer - Детектирует белую точку на кадрах - Кодирует кадры в JPEG - Записывает JPEG кадры в shared memory (`BeaconFrameBuffer`) 2. **Python Flask Server** (`web_viewer/app.py`) - Читает JPEG кадры из shared memory - Стримит их через Server-Sent Events (SSE) - Предоставляет REST API для статуса 3. **Web Frontend** (`web_viewer/templates/index.html`) - Подключается к SSE потоку - Декодирует base64 JPEG кадры - Отображает видео в реальном времени - Показывает метрики (FPS, битрейт, задержка) ### Shared Memory Проект использует POSIX shared memory для передачи кадров между C++ и Python: - **Имя сегмента**: `BeaconFrameBuffer` - **Структура**: SharedFrameBufferHeader + FrameHeader + JPEG данные - **Синхронизация**: seqlock-подобный протокол с атомарными операциями - **Размер**: настраивается через `FrameBufferMaxSize` в config.ini ## Конфигурация ### Основные параметры в `beacon_track/config.ini` ```ini [Processing] # Включить запись кадров в shared memory EnableFrameBuffer = true # Максимальный размер JPEG кадра (в байтах) FrameBufferMaxSize = 2097152 # 2 MB # Качество JPEG сжатия (0-100) FrameBufferJpegQuality = 85 [InputSettings] # Разрешение видео Width = 1920 Height = 1080 # Формат и FPS Format = YUY2 FrameRate = 1/1 ``` ## Возможности Web Viewer - ✅ Просмотр видео в реальном времени - ✅ Отображение FPS, битрейта, задержки - ✅ Информация о разрешении и размере кадров - ✅ Автоматическое переподключение при потере связи - ✅ Скриншоты (кнопка "Скриншот") - ✅ Адаптивный дизайн - ✅ Темная/светлая тема ## Системные требования ### Для C++ приложения: - Ubuntu/Debian Linux - GCC/Clang с поддержкой C++17 - CMake >= 3.10 - OpenCV 4.x - Boost (для Boost.Interprocess) - GStreamer (для захвата с камеры) ### Для Web Viewer: - Python 3.7+ - Flask >= 3.0.0 - posix_ipc >= 1.1.0 ## Производительность - **Разрешение**: до 1920x1080 (зависит от камеры) - **FPS**: до 30-60 FPS - **Задержка**: 20-100ms - **Битрейт**: 1-5 Mbps (зависит от качества JPEG) - **CPU**: ~20-40% на одно ядро ## Troubleshooting ### Shared memory не найден ``` ERROR: Shared memory segment 'BeaconFrameBuffer' does not exist ``` **Решение:** 1. Убедитесь, что beacon_track запущен 2. Проверьте `EnableFrameBuffer = true` в config.ini 3. Пересоберите проект после изменений ### Нет кадров в браузере **Решение:** 1. Проверьте логи C++ приложения на ошибки 2. Убедитесь, что камера работает 3. Проверьте размер JPEG кадров < FrameBufferMaxSize ### Низкий FPS **Решение:** 1. Уменьшите качество JPEG (`FrameBufferJpegQuality`) 2. Уменьшите разрешение камеры 3. Проверьте загрузку CPU ### Python не может импортировать posix_ipc ```bash pip install posix_ipc ``` Если не помогает: ```bash sudo apt-get install python3-dev pip install --upgrade posix_ipc ``` ## API Endpoints Web Viewer предоставляет следующие endpoints: - `GET /` - главная страница - `GET /stream` - SSE поток с кадрами - `GET /status` - JSON статус - `GET /latest_frame` - последний кадр (JPEG) ## Дополнительные материалы - **Beacon Tracker README**: `beacon_track/README.md` - **Web Viewer README**: `web_viewer/README.md` ## Лицензия MIT License ## Автор Проект создан для отслеживания beacon в реальном времени