Social Distancing for Retail Settings Reference Implementation

Version: 1   Published: 03/16/2021  

Last Updated: 06/18/2021


This reference implementation showcases a retail capacity limit application, line monitoring application, one-way monitoring application and social distancing application.

  • Retail capacity limit application showcases where a people counter keeps track of how many people are in the store based on the detected people entering and exiting the store. Single virtual line is configured for both entrance and exit areas to indicate the limits of entering and exiting the area of interest.  
  • One-way retail application monitors if people are walking in the correct direction in a one-way direction store aisle and reports the people walking in the wrong direction.  
  • Line monitoring retail application counts people standing in, waiting line at a retail store. The application estimates how many people are waiting in a line by doing an intersection between the people detected and a virtual line. 
  • Social distancing application gives count of people who do not maintain social distance.

Select Configure & Download to download the reference implementation and then follow the steps below to install it.  

Configure & Download

Screenshot of many people walking in a building. Some of red bounding boxes surrounding them that say "social violation" and others have blue boxes surrounding them.

  • Time to Complete: Approximately 20-30 minutes
  • Programming Language: Python* 3
  • Available Software: Intel® Distribution of OpenVINO™ toolkit Release

Recommended Hardware

The hardware below is recommended for use with this reference implementation. See the Recommended Hardware page for other suggestions. 

Target System Requirements

  • Ubuntu* 18.04.3 LTS
  • 6th to 11th Generation Intel® Core™ processors with Intel® Iris® Plus Graphics or Intel® HD Graphics
  • USB webcam (optional)

How It Works

Screenshot of 5 channels each with many people walking in a building. Some of red bounding boxes surrounding them that say "social violation" and others have blue boxes surrounding them.
Figure 1: Multiple Analytics on Multiple Channels


The application uses the Inference Engine and Model Downloader included in the Intel® Distribution of OpenVINO™ toolkit doing the following steps: 

  1. Ingests video from a file, processing frame by frame. 
  2. Detects people in the frame using a pre-trained DNN model. 
  3. Extracts features from people detected using a second pre-trained DNN in order to do a tracking of the people. 
  4. If analytics field is socialdistancing in the camera_config.json file, then the application computes Euclidean distance between all the people and checks to see whether any people are violating N pixels apart.
  5. If analytics field is capacitylimit in the camera_config.json file, then the application checks if people cross the predefined virtual gates based on the coordinates and identify in which direction the virtual gate was closed to determine if it is an entry or exit event. 
  6. The people counter is updated based on the entry and exit data. 
  7. If analytics field is capacitylimit in the camera_config.json file, then the application checks if any of the tracked persons are not going in the predefined allowed direction. 
  8. The oneway counter is updated based on the people violating the specified direction. 
  9. If analytics field is linemonitoring in the camera_config.json file, then the application checks for the count of people in the line area. The queue line area is defined by a virtual line in the configuration file. The result of the amount of people in line are showcased in the screen. 
  10. Store total violations count of social distancing data in InfluxDB*. 
  11. Visualize the stored data of InfluxDB on Grafana* dashboard. 

The DNN models are optimized for Intel® architecture and are included with the Intel® Distribution of OpenVINO™ toolkit.  

Complex block diagram that starts on the left with "input feeds" and a camera image. The box it has an arrow to says "RI Docker Container" and contains the 4 different applications available and also the Intel® Distribution of OpenVINO™ toolkit.  The entire box has an arrow to InfluxDB and then Grafana which then has an arrow to a computer monitor image.
Figure 2: Architecture Diagram

Get Started

Step 1: Install the Reference Implementation 

Select Configure & Download to download the reference implementation and then follow the steps below to install it.  

Configure & Download

  1. Open a new terminal, go to the downloaded folder and unzip the downloaded RI package:  


  2.  Go to social_distancing_for_retail_settings/ directory:
    cd social_distancing_for_retail_settings
  3. Change permission of the executable edgesoftware file: 
    chmod 755 edgesoftware
  4. Run the command below to install the Reference Implementation: 
    ./edgesoftware install


  5. During the installation, you will be prompted for the Product Key. The Product Key is contained in the email you received from Intel confirming your download. 
    Screenshot of terminal with text that says: “Please enter the Product Key. The Product Key is contained in the email you received from Intel confirming your download.” The Product Key is blocked out in the image, and the text after it says, “Starting the setup,” confirming the Product Key was entered successfully.
    Figure 3: Product Key


  6. When the installation is complete, you see the message “Installation of package complete” and the installation status for each module. 
    Screenshot of terminal with text that shows different modules are being installed, and then it says “Installation of package complete. Recommended to reboot system after installation.” A table lists all the modules, their IDs, and their status as “success.”
    Figure 4: Install Success

  7. Go to the working directory: 
    cd  Social_Distancing_for_Retail_Settings_<version>/Social_Distancing_for_Retail_Settings/retail-settings


    NOTE: In the command above, <version> is the Intel® Distribution of OpenVINO™ toolkit version. 

Step 2: Build the Docker Images  

NOTE: Run the commands mentioned below from the working directory, unless specified otherwise.

Build the Docker images with the command:

sudo -E docker-compose build

Run the Application

NOTE: The steps below use sample videos included with the Reference Implementation. For instructions on how to run the application with feed from a camera or how to use other videos, see Optional Steps section. 

  1. Set the HOST_IP environment variable with the command: 
    export HOST_IP=$(hostname -I | cut -d' ' -f1)


  2. Start the application with the command: 
    sudo -E docker-compose up -d


  3. Check if the containers are running properly with the command: 
    sudo -E docker-compose ps


  4. Check retailpandemic container logs with the command:  
    sudo docker logs -f retailpandemic

    Example output: 
    Screenshot of the command entered with container status, showing name, command, state and ports of each.
    Figure 5: Status of Containers


Visualize the Data on Grafana

  1. Open an Internet Browser and go to http://localhost:3000.
    NOTE: If accessing remotely, go to http://:3000. Get host system IP address using: hostname -I | cut -d' ' -f1
  2. Log in with user as admin and password as admin.
  3. Click Home and Select the RPS to open the main dashboard. 
    Screenshot of the Grafana* Welcome screen. There is the option to select the dashboard on the bottom of the screen.
    Figure 6: Grafana* Home Screen
    Screenshot of Selecting the Dashboard from the list of dashboards.
    Figure 7: Grafana Dashboard List


Below are the dashboards for different analytics, which are mentioned in the camera_config.json

Grafana Dashboard that lists 0 Line monitoring count and 26 social violation counts.
Figure 8: Dashboard of an Individual Camera Feed for the Analytics – Oneway Monitoring


Grafana Dashboard that lists 2 Line monitoring count and 0 social violation counts.
Figure 9: Dashboard of an Individual Camera Feed for the Analytics – Line Monitoring  


Grafana Dashboard that lists 0 Line monitoring count and 0 social violation counts.
Figure 10: Dashboard of an Individual Camera Feed for the Analytics – Capacity Limit Monitoring 


Grafana Dashboard that lists 2 Line monitoring count and 15 social violation counts.
Figure 11: Dashboard for the Analytics – Line Monitoring, Oneway Monitoring, Capacitylimit Monitoring, Social Distance Monitoring 


To open the Grafana Dashboard for a particular camera with the detection results and other data metrics, click on the camera feed on the small window, as shown in the figure below. 

NOTE: To close the small window with camera feed, click the close button (X) on the top left corner of the window. 

To view the detection results of all the configured camera feeds, click on View All Streams from top right corner from the main Grafana Dashboard, i.e., RPS (refer to Figure 7: Grafana Main Dashboard – RPS) 

NOTE: To open combined streams in full tab go to http://localhost:5000/get_all_streams

Optional Steps 

Configure the Input  

The camera_config.json file on the working directory contains all the necessary configurations including the path to default input video. If you wish to change the input, edit camera_config.json file and add the required information. The role of elements in the camera_config.json file are: 

  • analytics: Name of the application such as socialdistance, linemonitoring, onewaymonitoring and capacitylimit. 
  • capacity_coords: Coordinates of the door/line segment. 
  • capacity_limit: Total capacity of people in retail. 
  • oneway_coords: Coordinates of the door/line segment. 
  • oneway_area: Buffer area of interest around the coordinates to find oneway violation. 
  • oneway_direction: Direction of violation such as “Up”, “Down”, “Right” or “Left”. 
  • linemonitoring_coords: Coordinates of the door/line segment. 
  • device: Hardware Device to be used for inferencing.  (e.g.: CPU)  

NOTE: Supported hardware devices are CPU, HDDL and MYRIAD. You can also use a combination of these using MULTI (e.g.: MULTI:CPU,HDDL) 

  • path: path to the input video.

NOTE: Input videos should always be placed in the /resources folder. To use camera stream instead of video, replace the video file name with /dev/video0. To use RTSP stream instead of video, replace the video file name with the RTSP link.

NOTE: If any of the device value in camera_config.json has MYRIAD, add the following line to smartcity service in docker-compose.yml file: 

privileged: true

Validate the configuration file after changes (optional) with the command: 

cd app/ && python3 && cd ../

Restart the container: 

sudo docker restart retailpandemic

Stop the application 

Stop all the containers using the command: 

sudo docker-compose down

Summary and Next Steps

This application successfully leverages Intel® Distribution of OpenVINO™ toolkit plugins for detecting and measuring distance between the people and storing data to InfluxDB*.

Learn More

To continue learning, see the following guides and software resources:

Known Issues

Limitation in Distance between Individual Cameras 

The distance between individual cameras, which is configured using their geographic coordinates, should not exceed to the range of hundreds of kilometers. If the distance exceeds the limit, all the Map drop pins may not be displayed on the home screen. 

Issue with Running the Application on GPU Device 

You might face an issue running the application on GPU device. 


Address already in use  

If running the application results in Error starting userland proxy: listen tcp4 bind: address already in use, use the following command to check and force stop the process: 

sudo kill $(pgrep grafana)

NOTE: If the issue persists, it may be possible that Grafana is running in a Docker container. In that case, stop the container using:

sudo docker stop $(sudo docker ps -q --filter expose=3000)

Support Forum 

If you're unable to resolve your issues, contact the Support Forum.  

Product and Performance Information


Performance varies by use, configuration and other factors. Learn more at