# 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 в реальном времени /usr/bin/ld: /tmp/ccV5KFO0.ltrans0.ltrans.o: in function `std::unique_ptr >::~unique_ptr()': :(.text+0x101d): undefined reference to `beacontrack::SharedMemoryFrameBuffer::~SharedMemoryFrameBuffer()' /usr/bin/ld: /tmp/ccV5KFO0.ltrans0.ltrans.o: in function `main': :(.text.startup+0x2039): undefined reference to `beacontrack::SharedMemoryFrameBuffer::SharedMemoryFrameBuffer(char const*, unsigned long)' /usr/bin/ld: :(.text.startup+0x2058): undefined reference to `beacontrack::SharedMemoryFrameBuffer::~SharedMemoryFrameBuffer()' /usr/bin/ld: /tmp/ccV5KFO0.ltrans1.ltrans.o: in function `beacontrack::FrameProcessor::processFrame(cv::Mat const&)': :(.text+0x6d23): undefined reference to `beacontrack::SharedMemoryFrameBuffer::writeFrame(unsigned int, unsigned char const*, unsigned int, long, unsigned int, unsigned int)' collect2: error: ld returned 1 exit status make[2]: *** [CMakeFiles/main.dir/build.make:235: main] Error 1 make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/main.dir/all] Error 2 make: *** [Makefile:136: all] Error 2