The application monitors if a car is blocking the entrance and/or illegally parked there. the application processes CCTV camera streams. using deep learning it filters out cars from other detected objects, then runs them through a series of computational algorithms to determine if the car is blocking the entrance. if the audio controller is running on a remote machine the alert is controlled using VoIP, the server transmits the alert sound (configurable), after determining the entrance is blocked in a 5 seconds interval, taking into account moving objects. after receiving the audio, the client, which uses Bluetooth in order to send the audio, transmits it to a portable speaker
.
├── apps
│ ├── project_runner # project runner executable
├── src # Source files (libs, standalone)
│ ├── stream_obtainer # stream obtainer.
│ ├── object_detector # detects objects in a frame.
│ ├── blocking_computation # computes the blockage of an object to the entrance.
│ ├── results_aggregator # aggregates the blockage results into a decision.
│ ├── audio_controller # controls audio output based on a decision.
│ ├── core # core components of the application (amqp/task_service/consumer,publish...).
│ ├── utils # utils project.
│ └── models # view models shared between the services.
obtains stream of set of source of frames (cctv camera,recorded video, etc...), compress the video into jpeg,
publishes them into exchange frames
.
Receive frames from queue frames
, detects objects in the frame and publishes them into exchange detections
.
Receive detections from queue detections
, computes blocking percentage of the entrance, outputs a result of blocking(
1)/non-blocking(0) into exchange results
.
Receive results from queue results
, compute a mean of the results of decided interval, then outputs a decision blocked(1)
/not-blocked(0)
to exchange decisions
.
Receive decisions from queue decisions
, controls audio output based on decision, (stops audio if the entrance is no longer
blocked, starts the audio otherwise).
project runner which runs all the services defined inside it. every service has its own injector
.
standalone executable, is a service runner seperated from the apps project_runner
, used for running on different machine or multiple instances of the same service.
messages are packed using msgpack
(cppack
) to ensure smaller message size.