restricted-zone-notifier-python
restricted-zone-notifier-python copied to clipboard
Secure work areas and send alerts if someone enters the restricted space.
DISCONTINUATION OF PROJECT
This project will no longer be maintained by Intel. Intel has ceased development and contributions including, but not limited to, maintenance, bug fixes, new releases, or updates, to this project. Intel no longer accepts patches to this project.
Restricted Zone Notifier
| Details | |
|---|---|
| Target OS: | Ubuntu* 18.04 LTS |
| Programming Language: | Python* 3.5 |
| Time to Complete: | 30 min |

What it does
This application is designed to detect the humans present in a predefined selected assembly line area. If the people enters the marked assembly area, it raises the alert and sends through mqtt. It is intended to demonstrate how to use CV to improve assembly line safety for human operators and factory workers.
Requirements
Hardware
- 6th to 8th generation Intel® Core™ processors with Iris® Pro graphics or Intel® HD Graphics
Software
-
OpenCL™ Runtime package
Note: We recommend using a 4.14+ kernel to use this software. Run the following command to determine your kernel version:
uname -a -
Intel® Distribution of OpenVINO™ toolkit 2020 R3 Release
How It works
This restricted zone notifier application uses the Inference Engine included in the Intel® Distribution of OpenVINO™ toolkit and the Intel® Deep Learning Deployment Toolkit. A trained neural network detects people within a marked assembly area, which is designed for a machine mounted camera system. It sends an alert if there is at least one person detected in the marked assembly area. The user can select the area coordinates either via command line parameters, or once the application has been started, they can select the region of interest (ROI) by pressing c key. This will pause the application, pop up a separate window on which the user can drag the mouse from the upper left ROI corner to whatever the size they require the area to cover. By default the whole frame is selected. Worker safety and alert signal data are sent to a local web server using the Paho MQTT C client libraries.
The program creates two threads for concurrency:
- Main thread that performs the video i/o, processes video frames using the trained neural network.
- Worker thread that publishes MQTT messages.

Architectural Diagram
Setup
Get the code
Steps to clone the reference implementation:
sudo apt-get update && sudo apt-get install git
git clone https://github.com/intel-iot-devkit/restricted-zone-notifier-python.git
Install Intel® Distribution of OpenVINO™ toolkit
Refer to https://software.intel.com/en-us/articles/OpenVINO-Install-Linux for more information about how to install and setup the Intel® Distribution of OpenVINO™ toolkit.
You will need the OpenCL™ Runtime package if you plan to run inference on the GPU. It is not mandatory for CPU inference.
Other dependencies
Mosquitto*
Mosquitto is an open source message broker that implements the MQTT protocol. The MQTT protocol provides a lightweight method of carrying out messaging using a publish/subscribe model.
Which model to use
This application uses the person-detection-retail-0013 Intel® pre-trained model, that can be accessed using the model downloader. The model downloader downloads the .xml and .bin files that will be used by the application.
To install the dependencies of the RI and to download the person-detection-retail-0013 Intel® model, run the following command:
cd <path_to_the_restricted-zone-notifier-python_directory>
./setup.sh
The model will be downloaded inside the following directory:
/opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader/intel/person-detection-retail-0013/
The Config File
The resources/config.json contains the path to the videos that will be used by the application.
The config.json file is of the form name/value pair, video: <path/to/video>
Example of the config.json file:
{
"inputs": [
{
"video": "videos/video1.mp4"
}
]
}
Which Input video to use
The application works with any input video. Find sample videos for object detection here.
For first-use, we recommend using the worker-zone-detection video.The video is automatically downloaded to the resources/ folder.
For example:
The config.json would be:
{
"inputs": [
{
"video": "sample-videos/worker-zone-detection.mp4"
}
]
}
To use any other video, specify the path in config.json file
Using the Camera instead of video
Replace the path/to/video in the resources/config.json file with the camera ID, where the ID is taken from the video device (the number X in /dev/videoX).
On Ubuntu, list all available video devices with the following command:
ls /dev/video*
For example, if the output of above command is /dev/video0, then config.json would be::
{
"inputs": [
{
"video": "0"
}
]
}
Setup the environment
You must configure the environment to use the Intel® Distribution of OpenVINO™ toolkit one time per session by running the following command:
source /opt/intel/openvino/bin/setupvars.sh
Note: This command needs to be executed only once in the terminal where the application will be executed. If the terminal is closed, the command needs to be executed again.
Run the application
Change the current directory to the git-cloned application code location on your system:
cd <path_to_the_restricted-zone-notifier-python_directory>/application
To see a list of the various options:
python3 restricted_zone_notifier.py --help
Running on the CPU
A user can specify a target device to run on by using the device command-line argument -d followed by one of the values CPU, GPU,MYRIAD or HDDL.
Though by default application runs on CPU, this can also be explicitly specified by -d CPU command-line argument:
python3 restricted_zone_notifier.py -m /opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader/intel/person-detection-retail-0013/FP32/person-detection-retail-0013.xml -d CPU
To run the application on sync mode, use -f sync as command line argument. By default, the application runs on async mode.
You can select an area to be used as the "off-limits" area by pressing the c key once the program is running. A new window will open showing a still image from the video capture device. Drag the mouse from left top corner to cover an area on the plane and once done (a blue rectangle is drawn) press ENTER or SPACE to proceed with monitoring.
Once you have selected the "off-limits" area the coordinates will be displayed in the terminal window like this:
Assembly Area Selection: -x=429 -y=101 -ht=619 -w=690
You can run the application using those coordinates by using the -x, -y, -ht, and -w flags to select the area.
For example:
python3 restricted_zone_notifier.py -m /opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader/intel/person-detection-retail-0013/FP32/person-detection-retail-0013.xml -x 429 -y 101 -ht 619 -w 690
If you do not select or specify an area, by default the entire window is selected as the off limits area.
To run with multiple devices use -d MULTI:device1,device2. For example: -d MULTI:CPU,GPU,MYRIAD
Running on the GPU
-
To run on the integrated Intel® GPU with floating point precision 32 (FP32), use the
-d GPUcommand-line argument:python3 restricted_zone_notifier.py -m /opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader/intel/person-detection-retail-0013/FP32/person-detection-retail-0013.xml -d GPUFP32: FP32 is single-precision floating-point arithmetic uses 32 bits to represent numbers. 8 bits for the magnitude and 23 bits for the precision. For more information, click here
-
To run on the integrated Intel® GPU with floating point precision 16 (FP16):
python3 restricted_zone_notifier.py -m /opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader/intel/person-detection-retail-0013/FP16/person-detection-retail-0013.xml -d GPUFP16: FP16 is half-precision floating-point arithmetic uses 16 bits. 5 bits for the magnitude and 10 bits for the precision. For more information, click here
Running on the Intel® Neural Compute Stick
To run on the Intel® Neural Compute Stick, use the -d MYRIAD command-line argument:
python3 restricted_zone_notifier.py -m /opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader/intel/person-detection-retail-0013/FP16/person-detection-retail-0013.xml -d MYRIAD
Running on the Intel® Movidius™ VPU
To run on the Intel® Movidius™ VPU, use the -d HDDL command-line argument:
python3 restricted_zone_notifier.py -m /opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader/intel/person-detection-retail-0013/FP16/person-detection-retail-0013.xml -d HDDL
Note: The Intel® Movidius™ VPU can only run FP16 models. The model that is passed to the application, through the -m <path_to_model> command-line argument, must be of data type FP16.
Machine to Machine Messaging with MQTT
If you wish to use a MQTT server to publish data, you should set the following environment variables on a terminal before running the program:
export MQTT_SERVER=localhost:1883
export MQTT_CLIENT_ID=cvservice
Change the MQTT_SERVER to a value that matches the MQTT server you are connecting to.
You should change the MQTT_CLIENT_ID to a unique value for each monitoring station, so you can track the data for individual locations. For example:
export MQTT_CLIENT_ID=zone1337
If you want to monitor the MQTT messages sent to your local server, and you have the mosquitto client utilities installed, you can run the following command in new terminal while executing the code:
mosquitto_sub -h localhost -t Restricted_zone_python