# Beacon Tracker Web Viewer

Веб-приложение для просмотра видео потока с камеры в реальном времени из проекта beacon_track.

## Архитектура

Приложение состоит из трех компонентов:

1. **C++ Beacon Tracker** - захватывает кадры с камеры, детектирует белую точку и записывает JPEG-кодированные кадры в shared memory
2. **Python Flask Server** - читает кадры из shared memory и стримит их через Server-Sent Events (SSE)
3. **HTML/JavaScript Frontend** - отображает видео поток в браузере

## Установка

### Зависимости для Python

```bash
cd /home/awe/Documents/radar_frontend/web_viewer
pip install -r requirements.txt
```

Если у вас нет `posix_ipc`, установите его:

```bash
pip install posix_ipc
```

### Сборка C++ приложения

```bash
cd /home/awe/Documents/radar_frontend/beacon_track/build
cmake ..
make
```

## Настройка

Убедитесь, что в файле `beacon_track/config.ini` включены следующие параметры:

```ini
[Processing]
EnableFrameBuffer = true
FrameBufferMaxSize = 2097152
FrameBufferJpegQuality = 85
```

## Запуск

### 1. Запустите C++ приложение beacon_track

```bash
cd /home/awe/Documents/radar_frontend/beacon_track/build
./main realtime output.txt
```

Это создаст shared memory сегмент `BeaconFrameBuffer` и начнет записывать кадры.

### 2. Запустите Flask сервер

В отдельном терминале:

```bash
cd /home/awe/Documents/radar_frontend/web_viewer
python3 app.py
```

Сервер запустится на `http://0.0.0.0:5000`

### 3. Откройте браузер

Перейдите на:

```
http://localhost:5000
```

или с другого компьютера в сети:

```
http://<IP_адрес_вашего_компьютера>:5000
```

## Тестирование shared memory reader

Чтобы проверить работу shared memory reader без веб-интерфейса:

```bash
cd /home/awe/Documents/radar_frontend/web_viewer
python3 shared_memory_reader.py
```

Это отобразит информацию о получаемых кадрах в консоли.

## API Endpoints

- `GET /` - главная страница с видео плеером
- `GET /stream` - Server-Sent Events stream с JPEG кадрами
- `GET /status` - JSON статус подключения и последнего кадра
- `GET /latest_frame` - последний кадр как JPEG изображение

## Возможные проблемы

### Shared memory не найден

Если вы видите ошибку "Shared memory segment 'BeaconFrameBuffer' does not exist":

1. Убедитесь, что C++ приложение beacon_track запущено
2. Проверьте, что в config.ini параметр `EnableFrameBuffer = true`
3. Убедитесь, что приложение скомпилировано после изменений

### Нет кадров

Если подключение установлено, но кадры не появляются:

1. Проверьте логи C++ приложения на наличие ошибок
2. Убедитесь, что камера работает корректно
3. Проверьте размер JPEG кадров - они не должны превышать `FrameBufferMaxSize`

### Низкий FPS

Если FPS низкий:

1. Увеличьте `FrameBufferJpegQuality` в config.ini (это уменьшит размер кадров)
2. Уменьшите разрешение камеры в config.ini
3. Проверьте загрузку CPU

## Производительность

- **Разрешение**: зависит от настроек камеры (например, 1920x1080)
- **FPS**: до 30-60 FPS (зависит от камеры и настроек)
- **Задержка**: обычно 20-100ms
- **Битрейт**: зависит от качества JPEG и содержимого кадра (обычно 1-5 Mbps)

## Лицензия

Часть проекта beacon_track
