c67ac45617e016d04b05ca5bd59763fe3b236d34
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++ проекта
cd /home/awe/Documents/radar_frontend
./build_and_run.sh
Этот скрипт:
- Соберет C++ проект beacon_track
- Покажет инструкции по запуску
- Опционально запустит beacon tracker
2. Установка зависимостей Python
cd web_viewer
pip install -r requirements.txt
3. Запуск
Терминал 1 - Beacon Tracker:
cd beacon_track/build
./main realtime output.txt
Терминал 2 - Web Viewer:
cd web_viewer
./start.sh
Браузер:
http://localhost:5000
Как это работает
Архитектура
-
C++ Beacon Tracker (
beacon_track/)- Захватывает видео с камеры через GStreamer
- Детектирует белую точку на кадрах
- Кодирует кадры в JPEG
- Записывает JPEG кадры в shared memory (
BeaconFrameBuffer)
-
Python Flask Server (
web_viewer/app.py)- Читает JPEG кадры из shared memory
- Стримит их через Server-Sent Events (SSE)
- Предоставляет REST API для статуса
-
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
[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
Решение:
- Убедитесь, что beacon_track запущен
- Проверьте
EnableFrameBuffer = trueв config.ini - Пересоберите проект после изменений
Нет кадров в браузере
Решение:
- Проверьте логи C++ приложения на ошибки
- Убедитесь, что камера работает
- Проверьте размер JPEG кадров < FrameBufferMaxSize
Низкий FPS
Решение:
- Уменьшите качество JPEG (
FrameBufferJpegQuality) - Уменьшите разрешение камеры
- Проверьте загрузку CPU
Python не может импортировать posix_ipc
pip install posix_ipc
Если не помогает:
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 в реальном времени
Description
Languages
Python
44.3%
HTML
37%
Shell
18.7%