Files
radar_frontend/README.md
2025-11-18 13:03:08 +03:00

7.5 KiB
Raw Blame History

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

Как это работает

Архитектура

  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

[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

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 в реальном времени /usr/bin/ld: /tmp/ccV5KFO0.ltrans0.ltrans.o: in function std::unique_ptr<beacontrack::SharedMemoryFrameBuffer, std::default_delete<beacontrack::SharedMemoryFrameBuffer> >::~unique_ptr()': <artificial>:(.text+0x101d): undefined reference to beacontrack::SharedMemoryFrameBuffer::~SharedMemoryFrameBuffer()' /usr/bin/ld: /tmp/ccV5KFO0.ltrans0.ltrans.o: in function main': <artificial>:(.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