224 lines
7.5 KiB
Markdown
224 lines
7.5 KiB
Markdown
# 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
|
||
|