# 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

