Get Started#

  • Time to Complete: 45–60 minutes

  • Programming Language: Python 3

Prerequisites#

Configure Docker#

To configure Docker:

  1. Run Docker as Non-Root: Follow the steps in Manage Docker as a non-root user.

    NOTE: Run all commands as a regular (non-root) user, without using sudo.

  2. Configure Proxy (if required):

    • Set up proxy settings for Docker client and containers as described in Docker Proxy Configuration.

    • Example ~/.docker/config.json:

      {
        "proxies": {
          "default": {
            "httpProxy": "http://<proxy_server>:<proxy_port>",
            "httpsProxy": "http://<proxy_server>:<proxy_port>",
            "noProxy": "127.0.0.1,localhost"
          }
        }
      }
      
  3. Enable Log Rotation:

    • Add the following configuration to /etc/docker/daemon.json:

      {
        "log-driver": "json-file",
        "log-opts": {
          "max-size": "10m",
          "max-file": "5"
        }
      }
      
    • Reload and restart Docker:

      sudo systemctl daemon-reload
      sudo systemctl restart docker
      

Step 1: Clone the Repository#

git clone https://github.com/intel-retail/digital-signage
cd digital-signage

Step 2: Build Docker Images#

make build

Step 3: Download AI Models#

Download YOLO11s Model (for PID)#

Please review the YOLO11s license before downloading.

cd configs/pid && \
wget https://raw.githubusercontent.com/intel-retail/automated-self-checkout/v3.6.3/download_models/downloadAndQuantizeModel.sh && \
sed -i 's|MODELS_PATH="${MODELS_DIR:-/workspace/models}"|MODELS_PATH="${MODELS_DIR:-$PWD/models}"|g' downloadAndQuantizeModel.sh && \
sed -i 's/MODEL_NAME="yolo11n"/MODEL_NAME="yolo11s"/g' downloadAndQuantizeModel.sh && \
rm -rf .modelenv && \
python3 -m venv .modelenv && \
source .modelenv/bin/activate && \
pip3 install -r model_download_requirements.txt && \
rm -rf models && \
chmod +x downloadAndQuantizeModel.sh && \
./downloadAndQuantizeModel.sh && \
rm ./downloadAndQuantizeModel.sh && \
deactivate && \
cd ../..

The quantized model is saved to ./configs/pid/models/object_detection/yolo11s.

Note: If the objects are not getting detected in the pretrained YOLO11s model, use a custom object-detection model instead. See Use Intel® Geti™ Exported Model for model training and export guidance.

Download SDXL-Turbo and MiniLM Models (for AIG)#

Please review the SDXL-Turbo license before downloading.

cd aig && \
rm -rf .modelenv && \
python3 -m venv .modelenv && \
source ./.modelenv/bin/activate && \
pip3 install -r export-requirements.txt && \
export HF_HUB_ENABLE_HF_TRANSFER=1 && \
optimum-cli export openvino --model stabilityai/sdxl-turbo --task stable-diffusion-xl --weight-format int8 ./models/sdxl_turbo_ov/int8 && \
huggingface-cli download sentence-transformers/all-MiniLM-L12-v2 --local-dir ./models/all-MiniLM-L12-v2 && \
deactivate && \
cd ../

Models are downloaded to ./aig/models/.

Step 4: Configure Environment#

Edit the .env file in the repository root and set the following required variables:

Variable

Description

HOST_IP

Defaults to localhost; use the host system IP address if you want to access the web UI remotely

MTX_WEBRTCICESERVERS2_0_USERNAME

WebRTC ICE server username (minimum 5 alphabetic characters)

MTX_WEBRTCICESERVERS2_0_PASSWORD

WebRTC ICE server password (minimum 8 alphanumeric characters, at least one digit)

Optional variables:

  • RTSP_CAMERA_IP and related RTSP settings for live camera input.

  • AIG_MODEL_DEVICE to set the inference device for AIG (CPU or GPU).

  • AIG_* and ASE_* variables for advanced AIG and ASe tuning.

  • OBJECT_CONFIDENCE_THRESHOLD and OBJECT_RECENCY_FRAME_COUNT for detection filtering.

  • TIME_TO_DISPLAY_AD_SECONDS for controlling ad rotation frequency.

To enable predefined advertisements (optional), update:

  • web-ui/ProductAssociations.csv — product, pricing, promo text, slogan, and optional image filename.

  • web-ui/pre-defined-ads/ — JPEG/JPG image assets referenced by the CSV.

Step 5: Deploy with Docker Compose#

make up

This command validates your environment configuration, verifies that required models are available, removes any previously running containers, and starts all services.

Step 6: Access the Web UI#

Open Google Chrome and navigate to:

https://localhost:5000

Note: If you are accessing the UI remotely, replace localhost with the host system IP address.

You should see the live video stream and dynamic advertisements.

Note: For local systems with limited compute resources, launch Chrome with GPU acceleration disabled:

google-chrome --process-per-site --disable-plugins --disable-gpu https://localhost:5000

Alternatively, in Chrome go to Settings → System and disable Use graphics acceleration when available, then relaunch Chrome.

Click to see Chrome System settings screenshot

Chrome System settings

Step 7: Verify Output#

Check that all containers are running:

docker ps

If any container restarts, inspect its logs:

docker logs -f <container_name>

Undeploy#

To stop and remove all containers and volumes:

make down