90 lines
2.6 KiB
Text
90 lines
2.6 KiB
Text
@startuml Crowd Analyzer Flow
|
|
|
|
title Поток анализа очередей в Crowd Analyzer
|
|
|
|
actor "Redis Queue" as redis
|
|
participant "analyze_crowd()" as entry
|
|
participant "_analyze_crowd()" as main
|
|
participant "frames.pull()" as frames_mod
|
|
participant "_run_detectors()" as detectors
|
|
participant "TevianHeadsDetector" as tevian
|
|
participant "_build_zones_info()" as zones_builder
|
|
participant "_get_triggered_zones()" as trigger_checker
|
|
participant "Storage" as storage
|
|
participant "central.send()" as central
|
|
participant "zones_db" as db
|
|
|
|
redis -> entry: task(uin, camera_id, zones)
|
|
activate entry
|
|
|
|
entry -> entry: acquire TASKS_LICENCES
|
|
entry -> main: _analyze_crowd(uin, camera, zones, server_id)
|
|
activate main
|
|
|
|
main -> main: _filter_frequent_tasks()
|
|
alt tasks too frequent
|
|
main -> entry: return (skip)
|
|
else proceed
|
|
main -> frames_mod: pull(uin, camera)
|
|
activate frames_mod
|
|
frames_mod -> main: Frame object
|
|
deactivate frames_mod
|
|
|
|
opt rotation_angle provided
|
|
main -> main: frame.rotate(rotation_angle)
|
|
end
|
|
|
|
main -> detectors: _run_detectors(uin, camera, frame, zones)
|
|
activate detectors
|
|
|
|
detectors -> detectors: check tevian enabled & used
|
|
detectors -> tevian: request(uin, camera, frame, zones)
|
|
activate tevian
|
|
tevian -> detectors: detection results
|
|
deactivate tevian
|
|
|
|
detectors -> main: detected_values, timings, errors
|
|
deactivate detectors
|
|
|
|
main -> zones_builder: _build_zones_info(zones, detected_values)
|
|
activate zones_builder
|
|
zones_builder -> main: zones_info (with AI results)
|
|
deactivate zones_builder
|
|
|
|
main -> trigger_checker: _get_triggered_zones(zones_info, timestamp)
|
|
activate trigger_checker
|
|
|
|
loop for each zone
|
|
trigger_checker -> trigger_checker: check trigger conditions
|
|
trigger_checker -> trigger_checker: check schedule
|
|
trigger_checker -> trigger_checker: check grace period
|
|
end
|
|
|
|
trigger_checker -> main: triggered_zones
|
|
deactivate trigger_checker
|
|
|
|
main -> main: draw zones on frame
|
|
main -> storage: upload_fileobj(image_with_zones)
|
|
activate storage
|
|
storage -> main: zones_url
|
|
deactivate storage
|
|
|
|
main -> central: send('new_measurement', data)
|
|
activate central
|
|
central -> main: measurement sent
|
|
deactivate central
|
|
|
|
main -> db: update({'_id': f'{uin}/{camera}'}, detected_at)
|
|
activate db
|
|
db -> main: updated
|
|
deactivate db
|
|
end
|
|
|
|
main -> entry: analysis complete
|
|
deactivate main
|
|
|
|
entry -> entry: release TASKS_LICENCES
|
|
entry -> redis: task finished
|
|
deactivate entry
|
|
|
|
@enduml
|