# Архитектура проекта ## 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`.