You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

220 lines
5.6 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Архитектура проекта
## 1. Общая схема
Проект состоит из нескольких слоев:
1. прием кадров;
2. детекция;
3. трекинг и удержание;
4. оценка движения и восстановление;
5. guidance;
6. выдача команд наружу;
7. логирование и отладка.
## 2. Основная точка входа
### `main.py`
Это главный runtime-файл. Он:
- загружает модель YOLO;
- открывает источник через `open_source`;
- запускает YOLO worker;
- создает `AutoGazeROIWorker` и пытается его запустить, но по умолчанию `AUTOGAZE_ENABLE = False`, поэтому модуль обычно не активен;
- инициализирует Kalman, KLT и ByteTrack;
- ведет основной цикл обработки кадров;
- строит итоговый lock и guidance;
- пишет выходное видео и логи.
## 3. Конфигурация
### `config.py`
Содержит:
- путь к модели;
- источник видео;
- настройки YOLO;
- настройки KLT;
- настройки ByteTrack;
- настройки guidance;
- настройки ROI и recovery;
- параметры записи видео и логов.
### `config_intercept.py`
Содержит:
- range estimation;
- proportional navigation;
- intercept FSM;
- настройки backend'ов управления;
- испытательный UDP-протокол;
- IMM/дополнительные модули.
### `runtime_env.py`
Накладывает env-overrides поверх значений из `config.py` и `config_intercept.py`.
Это особенно важно для Docker, потому что позволяет не редактировать код под каждый запуск.
## 4. Источник видео
### `helpers.py`
Ключевые функции:
- `open_source` — открывает `camera`, `stream` или `file`;
- `get_frame_timestamp_seconds` — вычисляет временную метку кадра;
- `sanitize_dt` — стабилизирует `dt`;
- геометрические и ROI-функции.
## 5. Детекция
### `yolo_worker.py`
Асинхронный worker для запуска YOLO.
Работает в двух режимах:
- по ROI;
- по полному кадру.
Возвращает:
- список детекций;
- время инференса;
- признак, использовался ли ROI.
## 6. Трекинг и удержание
### `bytetrack_min_aggressive.py`
Локальная реализация ByteTrack, добавленная в корень проекта для самодостаточного контейнерного runtime.
### `trackers.py`
Базовые Kalman-трекеры.
### `trackers_safe.py`
Более безопасные ограничения для Kalman.
### `trackers_hybrid.py`
Гибридный KLT-трекер.
## 7. Восстановление и anti-stall логика
### `target_handoff.py`
Логика:
- stale lock;
- fast handoff;
- override guidance;
- временное удержание re-anchor-кандидата.
### `template_matching.py`
Fallback через шаблонное сопоставление.
### `camera_motion.py`
Оценка глобального движения камеры и компенсация.
### `motion_saliency.py`
Помогает переоценивать детекции по движению.
### `stationary_killer.py`
Отбрасывает залипшие и статичные треки.
### `autogaze_runner.py`
Опциональный ROI prior для recover. По умолчанию `AUTOGAZE_ENABLE = False`.
## 8. Guidance
### `guidance.py`
Задачи:
- построение точки прицеливания;
- сглаживание команд;
- удержание при miss;
- экспорт `guidance_state.json`;
- отрисовка crosshair, точки и желтой линии.
Именно этот слой строит:
- `aim_x`, `aim_y`;
- `steer_x`, `steer_y`;
- `confidence`;
- `status` (`SEARCH`, `LOCK`, `HOLD`, `REACQ`).
## 9. Наведение и внешние backend'ы
### `autopilot_bridge.py`
Преобразует guidance-state в внешние команды.
Поддерживает:
- `json`
- `mavlink`
- `msp`
- `proto_udp`
### `range_estimation.py`
Оценка дальности по видимому размеру цели.
### `proportional_navigation.py`
PN-логика.
### `intercept_fsm.py`
FSM фаз:
- `SEARCH`
- `ACQUIRE`
- `TRACK`
- `INTERCEPT`
- `TERMINAL`
- `LOST`
### `imu_fusion.py`
Дополнительный модуль IMU/MAVLink/MSP. Отдельный, не является обязательной частью базового запуска.
## 10. Логирование
### `decision_logger.py`
Записывает:
- покадровые решения;
- причины переключений;
- stale-lock и guidance-reset события.
Выход:
- `track_log_*.csv`
- `track_summary_*.json`
## 11. Что не относится к основному runtime
### `cvat/`
Это отдельный большой каталог для CVAT и не нужен для повседневного запуска трекера.
### `dataset_prep/`
Скрипты подготовки датасета.
Они не нужны для обычного запуска `main.py`.