|
|
# Docker Runtime
|
|
|
|
|
|
## Что собирается
|
|
|
|
|
|
Один GPU-образ для `fpv_tracker_optimized` с уже встроенными:
|
|
|
|
|
|
- `torch` + `torchvision` для CUDA 12.8
|
|
|
- `ultralytics`
|
|
|
- `opencv`
|
|
|
- `pymavlink`
|
|
|
- `pyserial`
|
|
|
- моделью `best.pt`
|
|
|
- локальным `bytetrack_min_aggressive.py`
|
|
|
|
|
|
После сборки контейнер может запускаться без интернета.
|
|
|
|
|
|
## Сборка
|
|
|
|
|
|
```bash
|
|
|
docker compose build
|
|
|
```
|
|
|
|
|
|
## Запуск
|
|
|
|
|
|
```bash
|
|
|
docker compose up
|
|
|
```
|
|
|
|
|
|
## Основные env-переменные
|
|
|
|
|
|
- `FPV_SOURCE`
|
|
|
Примеры: `"0"`, `"rtsp://192.168.1.10:8554/live"`, `"udp://@0.0.0.0:5600"`, `"/data/input/test.mp4"`
|
|
|
- `FPV_MODEL_PATH`
|
|
|
- `FPV_SHOW_OUTPUT`
|
|
|
- `FPV_SAVE_INFER_VIDEO`
|
|
|
- `FPV_OUT_VIDEO_PATH`
|
|
|
- `FPV_GUIDANCE_EXPORT_ENABLE`
|
|
|
- `FPV_GUIDANCE_EXPORT_PATH`
|
|
|
- `FPV_AUTOPILOT_ENABLE`
|
|
|
- `FPV_AUTOPILOT_BACKEND`
|
|
|
Значения: `json`, `mavlink`, `msp`, `proto_udp`
|
|
|
|
|
|
## Испытательный UDP-протокол
|
|
|
|
|
|
Включение:
|
|
|
|
|
|
```yaml
|
|
|
FPV_AUTOPILOT_BACKEND: "proto_udp"
|
|
|
FPV_PROTO_UDP_ENABLE: "1"
|
|
|
FPV_PROTO_UDP_HOST: "192.168.1.50"
|
|
|
FPV_PROTO_UDP_PORT: "5005"
|
|
|
```
|
|
|
|
|
|
Пакет отправляется в формате little-endian:
|
|
|
|
|
|
```text
|
|
|
<BBBhhbbB
|
|
|
descriptor
|
|
|
object_id
|
|
|
target_state
|
|
|
offset_y_px
|
|
|
offset_x_px
|
|
|
offset_y_pct
|
|
|
offset_x_pct
|
|
|
bbox_area_pct
|
|
|
```
|
|
|
|
|
|
`target_state`:
|
|
|
|
|
|
- `0` — цели нет
|
|
|
- `1` — цель есть и идет по детекции
|
|
|
- `3` — детекция пропала, работает трекинг/удержание
|
|
|
|
|
|
## Важные замечания
|
|
|
|
|
|
- Для GPU нужен установленный NVIDIA Container Toolkit на хосте.
|
|
|
- На Linux USB-камера обычно пробрасывается как `/dev/video0`.
|
|
|
- На Windows Docker Desktop прямой доступ Linux-контейнера к обычной webcam часто недоступен. В этом случае лучше использовать `RTSP`, `UDP` или внешний capture-источник, который виден контейнеру как сеть.
|
|
|
- `SHOW_OUTPUT=1` внутри headless-контейнера обычно не нужен. По умолчанию он выключен.
|