@startuml participant "Video Node" as VN participant "crowd.node\n(scheduler)" as Scheduler queue "Redis Queue" as Redis participant "crowd.node\n(analyzer)" as Analyzer participant "crowd.backend" as Backend participant "Tevian API" as Tevian database MongoDB == Периодическая работа (каждые N секунд) == Scheduler -> MongoDB: Найти камеры с queue_detection Scheduler -> Scheduler: Проверить, нужно ли обновить зоны Scheduler -> Redis: push task {"cmd": "analyze_crowd", "params": {...}} Redis <- Analyzer: pop task Analyzer -> VN: GET /snapshots/pull (получить кадр) VN --> Analyzer: JPEG frame Analyzer -> Analyzer: Повернуть кадр (если нужно) Analyzer -> Tevian: Detect heads in zones Tevian --> Analyzer: Detections Analyzer -> Analyzer: Определить triggered zones Analyzer -> Analyzer: Нарисовать зоны на кадре Analyzer -> Backend: Send measurement + image URL Backend -> MongoDB: Save measurement Note over Scheduler, Analyzer: Scheduler и Analyzer работают\nв одном сервисе crowd.node,\nно scheduler запускается по cron @enduml