--- title: Face module functionalities in details tags: Edsolabs --- ## Foundation **Base model export engine**. * *Purpose*. TensorRT engine wrapper for model export from ONNX to TRT * *Actors*. * *Developers*. Developers use this module to export ONNX models to TRT for development and deployment purpose * *System admin*. System admins use this module to export model whenever there is a model update * *Overall functionality*. * Export model from ONNX to TRT given configuration file * *Detailed functionality*. * *Initialization function*. * Load configuration * Load TensorRT components * *Iteration functions*. * Load calibration table (for INT8 mode) * Calibrate model (for INT8 mode) * Export model from ONNX to TRT * *Termination functions*. * Release TensorRT components * *Debug functions*. * Log debug messages **Base model inference engine**. * *Purpose*. Interface for perception modules in Primary analysis * *Actors*. * *Developers*. Developers use this module as an interface for developing perception modules in Primary analysis, and for optimization purpose * *System admin*. System admins use this module to * Start the system, i.e. load inference engines * Plug-and-play modules in the system to ensure reasonable workload during system execution, i.e. by releasing (when not used) and reloading models (when needed) * Terminate the system, i.e. release inference engines * *Primary analysis modules*. Use this module as the base module * *Overall functionality*. Contain must-have functionality of each perception module * Load and release TensorRT models * Run TensorRT model for inference * Reload TensorRT model * *Detailed functionality*. * *Initialization function*. * Load configuration * Load model * *Iteration functions*. * Reload model * Run model as a whole, i.e. pre-process + run model + postprocess * Run model step-by-step (for optimization purpose) * *Termination functions*. * Release model * *Debug functions*. * Visualize results * Measure runtime * Log debug messages **Base module**. A tempate parametrized by input / output types * *Purpose*. Interface for processing modules in the whole system * *Actors*. * *Developers*. Developers use this module as an interface for developing processing modules in Primary analysisand Secondary analysis * *System admin*. System admins use this module to * Start the system, i.e. load modules * Plug-and-play modules in the system to ensure reasonable workload during system execution, i.e. by releasing (when not used) and reloading modules (when needed) * Terminate the system, i.e. release modules * *Primary analysis modules*. Use this module as the base module * *Secondary analysis modules*. Use this module as the base module * *Overall functionality*. Contain must-have functionality of each processing module * Load and release TensorRT models * Run TensorRT model for inference * Reload TensorRT model * Record module log files during system execution * *Detailed functionality*. * *Initialization functions*. * Load configuration * Load module * *Iteration functions*. * Reload module * Run module as whole * Run module step-by-step (for optimization purpose) * *Termination functions*. * Release module * *Debug functions*. * Visualize results * Measure runtime * Log debug messages * Save log file during execution and core-dump file **Health checker module**. A class responsible for checking the health of all modules and report to master node if there is any failure * *Purpose*. For systems running for a long time, we need a health checker to automatically detect system failure * *Explain*. * All modules will record a log file during running, containing the most recent states of them before failure * The health checker periodically probes the modules to see if they are down or not * If there is a module failure, the health checker takes the module's log file and report to the master node * The master node then may decide to restart the failed module, or report the problem to system admin * *Log files*. Include core-dump file (in case the module runs into segment fault core-dump) and log file produced by the failed module * *Actors*. * *Developers*. Developers use this module as a tool for developing and debugging processing modules in Primary analysis * *System admin*. System admins use this module as a tool for system monitoring, i.e. detect failures, and debugging * *Overall functionality*. * Probe system modules to check for module failure * Report module failures to master node ## Primary analysis (Perception modules) **Perception modules**. Carry out perception analysis on input camera streams * *Main functionalities*. * Communicate with RTSP camera streams, feature modules, and communication channels (for debugging purpose) * Run model * Visualize results * Measure runtime ### Foundation **Base detection module**. Inherited from *Model inference engine* and *Base module* * *Purpose*. Base module for detection modules in Primary analysis * *Actors*. * *Developers*. Developers use this module as an interface for developing object detection modules in Primary analysis, and for optimization purpose * *Primary analysis object detection modules*. Use this module as the base module * *Secondary analysis modules*. Use this module for related processing tasks * *Overall functionality*. Run object detection model with the following I/O * *Input*. RGB frame * *Output*. A list of detected boxes, each box is a struct of (box, class, score) * *Detailed functionality*. * *Initialization functions*. Inherited from *Model inference engine* and *Base module* * *Iteration functions*. Inherited from *Model inference engine* and *Base module* * *Termination functions*. Inherited from *Model inference engine* and *Base module* * *Debug functions*. Inherited from *Model inference engine* and *Base module* * Stream out detected boxes * Stream out measured runtime * Stream out log messages **Base tracking module**. Inherited from *Model inference engine* (if use Deep SORT) and *Base module* * *Purpose*. Base module for object tracking modules in Primary analysis * *Actors*. * *Developers*. Developers use this module as an interface for developing object tracking modules in Primary analysis, and for optimization purpose * *Primary analysis object tracking modules*. Use this module as the base module * *Secondary analysis modules*. Use this module for related processing tasks * *Overall functionality*. Run object tracking with the following I/O * *Input*. RGB frame and a list detected boxes * *Output*. A list of tracked boxes, i.e. detected boxes with IDs * *Detailed functionality*. * *Initialization functions*. Inherited from *Model inference engine* (if use Deep SORT) and *Base module* * *Iteration functions*. Inherited from *Model inference engine* (if use Deep SORT) and *Base module* * *Termination functions*. Inherited from *Model inference engine* (if use Deep SORT) and *Base module* * *Debug functions*. Inherited from *Model inference engine* (if use Deep SORT) and *Base module* * Stream out tracked boxes with IDs * Stream out measured runtime * Stream out log messages **Base classification module**. Inherited from *Model inference engine* and *Base module* * *Purpose*. Base module for object classification modules in Primary analysis * *Actors*. * *Developers*. Developers use this module as an interface for developing object classification modules in Primary analysis, and for optimization purpose * *Primary analysis object classification modules*. Use this module as the base module * *Secondary analysis modules*. Use this module for related processing tasks * *Overall functionality*. Run object classification with the following I/O * *Input*. Cropped RGB images * *Output*. A list of classification results, i.e. structs of format (class, score) * *Detailed functionality*. * *Initialization functions*. Inherited from *Model inference engine* and *Base module* * *Iteration functions*. Inherited from *Model inference engine* and *Base module* * *Termination functions*. Inherited from *Model inference engine* and *Base module* * *Debug functions*. Inherited from *Model inference engine* and *Base module* * Stream out detected boxes with class name * Stream out measured time * Stream out log messages ### Priority 1 **Human detection**. Inherited from *Base deteciton module* * *Purpose*. Detect people in a camera stream * *Actors*. Inherited from *Base deteciton module* * *Overall functionality*. Detect people in a camera stream * *Detailed functionality*. * *Initialization functions*. Inherited from *Base deteciton module* * *Iteration functions*. Inherited from *Base deteciton module* * *Termination functions*. Inherited from *Base deteciton module* * *Debug functions*. Inherited from *Base deteciton module* * *Notes*. * How to handle mannequin and other human-like objects, e.g. statues, toys, models, etc. * How to handle the case where some one is reflected on a glass, i.e. 2 different people will be detected * Are babies considered "human", i.e. objects which must be detected **Human tracking**. Inherited from *Base tracking module* * *Purpose*. Track detected people in a camera stream * *Actors*. Inherited from *Base tracking module* * *Overall functionality*. Track detected people in a camera stream * *Detailed functionality*. * *Initialization functions*. Inherited from *Base tracking module* * *Iteration functions*. Inherited from *Base tracking module* * *Termination functions*. Inherited from *Base tracking module* * *Debug functions*. Inherited from *Base tracking module* * *Notes*. * How to handle overlapping objects during tracking? * How to handle occluded objects during tracking? * How to handle visually similar objects during tracking? (if use Deep SORT) ### Priority 2 **Human descriptor by clothes color**. Inherited from *Base classification module* * *Purpose*. Extract clothes color information from detected people in a camera stream * *Actors*. Inherited from *Base classification module* * *Overall functionality*. Extract clothes color information from detected people in a camera stream * *Detailed functionality*. NEED MORE SURVEY * *Note*. NEED MORE SURVEY * *Idea*. * Divide human body into top and bottom and formulate the problem as color classification * *Drawbacks*. Difficult to cope with clothes with multiple colors * Use metric learning, embed clothes colors into vectors and use clothes recognition **Human action recognition**. Inherited from *Base classification module* * *Purpose*. Recognize behaviors of people in a camera stream * *Actors*. Inherited from *Base classification module* * *Overall functionality*. Recognize behaviors of people in a camera stream * *Detailed functionality*. NEED MORE SURVEY * *Note*. NEED MORE SURVEY ## Secondary analysis (Feature modules) **Feature modules**. Carry out analysis based on perception outputs, without interacting with camera streams * *Main functionalities*. * Communicate with output communication channel and DB * Run module * Visualize results * Measure runtime ### Priority 1 **Human searching by ID**. Inherited from *Base module* * *Purpose*. Search for people in a camera stream based on their IDs * *Actors*. * *Overall functionality*. * Search for people according to the following I/O * *Input*. A list of IDs for searching * *Output*. A list of histories (trajectories and behaviors) of the desired people * *Detailed functionality*. * *Initialization functions*. Inherited from *Base module* * *Iteration functions*. Inherited from *Base module* * *Termination functions*. Inherited from *Base module* * *Debug functions*. Inherited from *Base module* * Stream out histories of the desired people to a file * Stream out measured time * Stream out log messages **Human searching by clothes color**. Inherited from *Base module* * *Purpose*. Search for people in a camera stream based on clothes color * *Actors*. * *Overall functionality*. * Search for people according to the following I/O * *Input*. A list of clothes colors for searching * *Output*. A list of histories (trajectories and behaviors) of the desired people * *Detailed functionality*. NEED MORE SURVEY **Human searching by behavior**. Inherited from *Base module* * *Purpose*. Search for people in a camera stream based on behavior * *Actors*. * *Overall functionality*. * Search for people according to the following I/O * *Input*. A list of behaviors for searching * *Output*. A list of histories (trajectories and behaviors) of the desired people * *Detailed functionality*. NEED MORE SURVEY ### Priority 2 **People counting**. Inherited from *Base module* * *Purpose*. Count the number of people appeared in the video stream * *Actors*. * *Overall functionality*. * Count the number of people appeared in the video stream * *Input*. A list of tracked boxes with IDs * *Output*. Number of people in framedesired people * *Detailed functionality*. * *Initialization functions*. Inherited from *Base module* * *Iteration functions*. Inherited from *Base module* * *Termination functions*. Inherited from *Base module* * *Debug functions*. Inherited from *Base module* * Stream out the number of people on the camera stream * Stream out measured time * Stream out log messages **Crowd detection**. Inherited from *Base module* * *Purpose*. Detect crowds in a camera stream * *Actors*. * *Overall functionality*. * Detect crowds in a camera stream * *Input*. A list of tracked boxes with IDs * *Output*. A list of detected crowds * *Detailed functionality*. * *Initialization functions*. Inherited from *Base module* * *Iteration functions*. Inherited from *Base module* * *Termination functions*. Inherited from *Base module* * *Debug functions*. Inherited from *Base module* * Stream out the crowds information * Stream out measured time * Stream out log messages **Violence detection**. Inherited from *Base module* * *Explain*. PENDING **Abandoning position detection**. Inherited from *Base module* * *Purpose*. Detect abandoning positions in a camera stream * *Actors*. * *Overall functionality*. * Detect abandoning positions in a camera stream * *Input*. A list of tracked boxes with IDs * *Output*. A list of abandoning positions * *Detailed functionality*. * *Initialization functions*. Inherited from *Base module* * *Iteration functions*. Inherited from *Base module* * *Termination functions*. Inherited from *Base module* * *Debug functions*. Inherited from *Base module* * Stream out the abandoning positions * Stream out measured time * Stream out log messages **Human instrusion detection by virtual bonudary**. Inherited from *Base module* * *Idea*. * *Option 1*. Have a virtual boundary and any box crossing the boundary is an invalid box * *Pros*. Easy to implement * *Cons*. Not very accurate * *Option 2*. Map the virtual boundary and the detected boxes to ground plane and any box crossing the boundary is an invalid box * *Pros*. Hard to implement * *Cons*. More accurate than option 1 * *Purpose*. Detect human instrusion in a camera stream * *Actors*. * *Overall functionality*. * Detect human instrusion in a camera stream * *Input*. A list of tracked boxes with IDs * *Output*. A list of valid and invalid boxes, i.e. boxes which violate the virtual boundary * *Detailed functionality*. * *Initialization functions*. Inherited from *Base module* * *Iteration functions*. Inherited from *Base module* * *Termination functions*. Inherited from *Base module* * *Debug functions*. Inherited from *Base module* * Stream out tracked boxes with valid-or-invalid predictions * Stream out measured time * Stream out log messages **Human instrusion detection by restricted region**. Inherited from *Base module* * *Idea*. * *Option 1*. Have a virtual boundary and any box crossing the boundary is an invalid box * *Pros*. Easy to implement * *Cons*. Not very accurate * *Option 2*. Map the virtual boundary and the detected boxes to ground plane and any box crossing the boundary is an invalid box * *Pros*. Hard to implement * *Cons*. More accurate than option 1 * *Purpose*. Detect human instrusion in a camera stream * *Actors*. * *Overall functionality*. * Detect human instrusion in a camera stream * *Input*. A list of tracked boxes with IDs * *Output*. A list of valid and invalid boxes, i.e. boxes which violate the restricted region * *Detailed functionality*. * *Initialization functions*. Inherited from *Base module* * *Iteration functions*. Inherited from *Base module* * *Termination functions*. Inherited from *Base module* * *Debug functions*. Inherited from *Base module* * Stream out tracked boxes with valid-or-invalid predictions * Stream out measured time * Stream out log messages ### Priority 3 **Human tracing**. Inherited from *Base module* * *Note*. PENDING