5.6 KiB
Архитектура проекта
1. Общая схема
Проект состоит из нескольких слоев:
- прием кадров;
- детекция;
- трекинг и удержание;
- оценка движения и восстановление;
- guidance;
- выдача команд наружу;
- логирование и отладка.
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 в внешние команды.
Поддерживает:
jsonmavlinkmspproto_udp
range_estimation.py
Оценка дальности по видимому размеру цели.
proportional_navigation.py
PN-логика.
intercept_fsm.py
FSM фаз:
SEARCHACQUIRETRACKINTERCEPTTERMINALLOST
imu_fusion.py
Дополнительный модуль IMU/MAVLink/MSP. Отдельный, не является обязательной частью базового запуска.
10. Логирование
decision_logger.py
Записывает:
- покадровые решения;
- причины переключений;
- stale-lock и guidance-reset события.
Выход:
track_log_*.csvtrack_summary_*.json
11. Что не относится к основному runtime
cvat/
Это отдельный большой каталог для CVAT и не нужен для повседневного запуска трекера.
dataset_prep/
Скрипты подготовки датасета.
Они не нужны для обычного запуска main.py.