# Поиск и устранение проблем

## 1. Не открывается источник видео

Симптом:

- `Capture open failed`

Проверки:

1. Верный ли `SOURCE`.
2. Для камеры: правильный ли индекс `0`, `1`, `2`.
3. Для RTSP: доступен ли поток из этой сети.
4. Для UDP: идет ли поток на указанный порт.
5. Для файла: существует ли путь и читается ли файл.

## 2. Проект запускается, но не использует GPU

Проверки:

1. Установлен ли GPU-вариант `torch`.
2. Совместимы ли версия CUDA и wheel `torch`.
3. Видит ли Python CUDA:

```python
import torch
print(torch.cuda.is_available())
```

4. Не стоит ли CPU-only wheel.

## 3. В Docker нет GPU

Симптом:

- внутри контейнера `torch.cuda.is_available() == False`

Проверки:

1. Установлен ли NVIDIA драйвер на хосте.
2. Установлен ли NVIDIA Container Toolkit.
3. Поддерживает ли ваш Docker runtime `gpus: all`.
4. Не запущен ли контейнер на машине без доступной NVIDIA GPU.

## 4. В Docker не видна обычная webcam на Windows

Это типичная проблема Windows Docker Desktop.

Практические варианты:

- использовать RTSP;
- использовать UDP-видеопоток;
- использовать внешний capture-процесс вне контейнера;
- запускать локально на Windows без Docker.

## 5. Есть видео, но нет детекций

Проверки:

1. Тот ли `MODEL_PATH`.
2. Совместима ли модель с текущим кодом.
3. Правильный ли `TARGET_CLASS_ID`.
4. Не слишком ли высокий `CONF`.
5. Реально ли цель различима на этом разрешении.

## 6. Появляются детекции, но guidance не следует за ними

Важно:

- guidance строится не по "любой текущей рамке YOLO", а по выбранному lock/tracker state;
- при miss может работать удержание через Kalman/KLT;
- статус `HOLD` и `REACQ` означают, что проект находится не в чистой детекции.

Проверки:

1. Что в overlay пишется в строках `miss`, `KLT valid`, `G HOLD` или `G REACQ`.
2. Есть ли свежий `track_log_*.csv`.
3. Не слишком ли жесткие условия handoff/switch.

## 7. Не создается `guidance_state.json`

Проверки:

1. Включен ли `GUIDANCE_EXPORT_ENABLE`.
2. Есть ли права на запись в каталог.
3. Не держит ли файл другой процесс.

Если в логах есть:

```text
Permission denied: guidance_state.json.tmp
```

это обычно означает, что файл временно заблокирован другим процессом или watcher'ом.

## 8. Не работает `proto_udp`

Проверки:

1. `AUTOPILOT_BACKEND = "proto_udp"`
2. `PROTO_UDP_ENABLE = True`
3. Правильные ли `HOST` и `PORT`
4. Видит ли сеть UDP-пакеты
5. Совпадает ли формат пакета с приемником

Практическая проверка:

- поднимите простой UDP listener;
- убедитесь, что приходят пакеты при наличии цели.

## 9. Не работает `mavlink`

Проверки:

1. Установлен ли `pymavlink`
2. Верный ли `MAVLINK_CONNECTION`
3. Доступен ли endpoint
4. Нет ли firewall/маршрутизации, блокирующих UDP

## 10. Не работает `msp`

Проверки:

1. Установлен ли `pyserial`
2. Верный ли `MSP_PORT`
3. Верный ли `MSP_BAUD`
4. Есть ли права доступа к порту

## 11. Видео не пишется

Проверки:

1. `SAVE_INFER_VIDEO = True`
2. Каталог записи существует
3. OpenCV может открыть `VideoWriter`
4. Кодек `mp4v` поддерживается в вашей среде

## 12. Проект слишком медленный

Проверки:

1. Есть ли GPU.
2. Не работает ли все на CPU.
3. Не слишком ли тяжелый full-frame режим.
4. Не включены ли лишние debug-наложения.
5. Не используется ли `SHOW_OUTPUT` там, где окно не нужно.

## 13. Сборка Docker слишком тяжелая

В проекте уже добавлен `.dockerignore`, который исключает:

- `cvat/`
- `dataset_prep/`
- видео
- старые логи
- архивы

Если сборка все равно тяжелая, проверьте:

1. не лежат ли рядом новые большие файлы, не попавшие в ignore;
2. не добавлены ли лишние каталоги в build context.

## 14. Что сделать перед обращением к разработчику

Подготовьте:

1. какой источник видео использовался;
2. локальный запуск или Docker;
3. backend команд;
4. последние `track_log_*.csv` и `track_summary_*.json`;
5. скриншот overlay;
6. точный текст ошибки.
