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

224 lines
7.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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<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: <artificial>:(.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&)':
<artificial>:(.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