Get Started#
This guide walks you through deploying and running the POI Re-identification system, including the POI backend, React UI, alert service, and the supporting SceneScape stack.
Before you begin, review the System Requirements to ensure your environment meets the recommended hardware and software prerequisites.
1. Clone the Repository#
Note: Make sure you are in the
person-of-interestdirectory before running the commands in this guide.
git clone https://github.com/intel-retail/storewide-loss-prevention.git
cd storewide-loss-prevention/person-of-interest
2. Initialize Submodules#
Clone the required submodules (for example, performance-tools):
make update-submodules
3. Provide Required Assets#
Before starting, ensure these files are in place:
File |
Purpose |
|---|---|
|
Central configuration: scene, cameras, models, SceneScape images, zones |
|
Device resource configs for DL Streamer pipeline (GPU, CPU, NPU profiles) |
|
DL Streamer pipeline template (rendered per camera by |
|
Scene map + zone definitions imported into SceneScape |
|
Sample video used by the camera replay |
Note: The video file names must match the
videoentries inconfigs/zone_config.json(for example,Camera_01.mp4corresponds to cameraCamera_01).
zone_config.json Reference#
All application configuration is centralized in configs/zone_config.json.
Edit this file first, then run make init to generate docker/.env, secrets,
and per-camera pipeline configurations automatically.
Minimal example:
{
"scene_name": "conference room",
"scene_zip": "conference-room.zip",
"cameras": [
{ "name": "Camera_01", "video": "Camera_01.mp4" }
],
"models": "person-detection-retail-0013,face-detection-retail-0004,face-reidentification-retail-0095",
"scenescape": {
"registry": "",
"version": "v2026.1.0-rc1",
"controller_image": "intel/scenescape-controller",
"manager_image": "intel/scenescape-manager",
"dlstreamer_version": "2026.1.0-ubuntu24-rc1.1"
},
"store": {
"name": "Retail",
"id": "store_001"
}
}
The zone_config.json file defines:
scene_name,scene_zipfor SceneScape scene setupcameras[]as an array of{name, video}camera entriesmodelsas the comma-separated OpenVINO™ model listscenescape{}for registry, version, and controller/manager image tagsstore{}for store name and IDservices{}for ports, log level, and SeaweedFS settingsscenescape_api{}for SceneScape REST API endpoint settingsbenchmark{}for stream-density benchmark parameters
4. Initialize Environment#
Before running make init, set HOST_IP to the network-reachable IP address of
this machine. MediaMTX uses it to advertise the correct WebRTC ICE candidates so
browsers can connect to the live camera streams.
Proxy Configuration (if behind a corporate proxy)#
If your environment requires a proxy to reach the internet (for example, to pull
Docker images or download models), export the proxy variables before running
any make commands:
# Set proxy (adjust to your network)
export HTTP_PROXY=http://your-proxy-server:port
export HTTPS_PROXY=http://your-proxy-server:port
export NO_PROXY=localhost,127.0.0.1,web.scenescape.intel.com,<host-ip>
# Lowercase variants (used by some tools)
export http_proxy=$HTTP_PROXY
export https_proxy=$HTTPS_PROXY
export no_proxy=$NO_PROXY
Important: Add
web.scenescape.intel.comand your machine’s IP toNO_PROXYso that internal Docker-to-Docker traffic does not go through the proxy. Failing to do so may cause SceneScape scene imports or API calls to fail with connection errors.These variables are propagated into Docker containers via the
docker-compose.ymlenvironment sections. If the proxy is not set, the variables default to blank strings (you will see harmless Docker Compose warnings about unset variables).
# Set HOST_IP (required for WebRTC camera streams)
export HOST_IP=<IP>
# Edit the configuration file with your camera and scene details
nano configs/zone_config.json
# Initialize environment with default device profile (CPU)
make init
# Or select a specific device profile:
make init DEVICE=all-gpu-cpu.env
Device Profiles#
The DEVICE parameter selects which hardware to use for inference. Device
profiles are defined in configs/res/ and control the GStreamer decode chain,
inference device, pre-process backend, model precision, and throughput options.
Profile |
Decode |
Detection |
Re-ID |
Precision |
Command |
|---|---|---|---|---|---|
|
CPU ( |
CPU |
CPU |
FP32 |
|
|
GPU ( |
GPU |
CPU |
FP16 |
|
|
GPU ( |
GPU |
GPU |
FP16 |
|
|
GPU ( |
NPU |
CPU |
FP16-INT8 |
|
|
GPU ( |
NPU |
NPU |
FP16-INT8 |
|
Note: GPU profiles require an Intel integrated or discrete GPU with VA-API support. NPU profiles require an Intel NPU (available on Meteor Lake and later platforms). The
all-cpu.envprofile works on any x86 system.
Note:
HOST_IPmust be exported before runningmake init. It is written intodocker/.envduring initialization. If it is not set,make initwill print an error and exit.make upwill also exit with an error ifHOST_IPis missing fromdocker/.env.After changing
DEVICE, always re-runmake initto regenerate the pipeline configs with the correct device settings.
make init generates the following from configs/zone_config.json:
docker/.env— all environment variables for Docker ComposeSceneScape TLS certificates and secrets
Per-camera DL Streamer pipeline configuration files
5. Pull or Build Images#
Pre-built container images are available on Docker Hub. The docker-compose.yml
references them directly (intel/poi-backend:2026.1.0-rc1 and
intel/poi-ui:2026.1.0-rc1), so make up will pull them automatically if they
are not already present locally.
To explicitly pull before starting:
docker compose --env-file docker/.env -f docker-compose.yml pull poi-backend ui
To build from source instead of using pre-built images:
make build REGISTRY=false
When building locally with REGISTRY=false, the images are tagged as poi-backend
and poi-ui, and the compose file uses them via the POI_BACKEND_IMAGE and
POI_UI_IMAGE environment variables. See Build from Source
for detailed build options.
6. Download Models#
The OpenVINO™ face detection and re-identification models are required for both enrollment and DL Streamer inference:
make download-models
This downloads face-detection-retail-0004, face-reidentification-retail-0095,
person-detection-retail-0013, and person-reidentification-retail-0277 in FP32,
FP16, and FP16-INT8 precisions. It also exports clip-reid-market1501 (body re-ID)
in both FP32 and FP16.
7. Launch the Application#
make up
Note:
make upauto-detects the host machine’s IP address and writesHOST_IPtodocker/.envfor WebRTC camera feeds. If accessing the UI from a different machine, verifyHOST_IPindocker/.envis set to the correct network-reachable IP.
The DL Streamer pipeline runs four inference stages using the device and precision
selected by DEVICE during make init:
Person detection:
person-detection-retail-0013Body re-ID:
clip-reid-market1501Face detection:
face-detection-retail-0004Face re-ID:
face-reidentification-retail-0095
The pipeline template (configs/pipeline-config.json) is rendered at init time
with the selected device profile settings (decode chain, device, precision,
pre-process backend, throughput options).
For a complete first-time setup (init + models + build + start all services), you can use:
make demo
make up performs the following steps automatically:
Detects and cleans stale Docker networks (if present).
Starts SceneScape services (manager, controller, broker, DL Streamer, etc.).
Polls SceneScape web health (up to 150 seconds).
Resolves the SceneScape scene UID for the POI backend.
Starts POI services (backend, UI, Redis, alert service).
This launches the following containers:
Container |
Image |
Port |
|---|---|---|
|
|
8000 |
|
|
3000 |
|
|
6379 |
|
|
8001 |
Note: Use
make upfor subsequent starts after the initial setup. SceneScape is started automatically by theuptarget.
8. View Logs#
make logs
9. Stop Services#
# Stop everything
make down
10. Access the Interface#
Once running:
Service |
URL |
Credentials |
|---|---|---|
SceneScape UI |
https://localhost |
|
POI UI |
http://<host-ip>:3000 |
— |
POI Backend API |
http://<host-ip>:8000/docs |
— |
POI logs |
|
View all service logs |
Advanced Configuration#
Environment Variables#
All values in docker/.env are auto-generated from configs/zone_config.json by
make init (scenescape/scripts/init.sh). Do not edit docker/.env directly; update
configs/zone_config.json and re-run make init instead.
|
Generated |
Description |
|---|---|---|
|
|
Scene name and scene archive used by SceneScape |
|
|
Camera names and input videos for generated pipelines |
|
|
OpenVINO™ model list and precision |
|
|
SceneScape image source and version selection |
|
|
Store metadata used by the stack |
|
|
Service ports, logging, and SeaweedFS settings |
|
|
Stream-density benchmark configuration |
make init also injects generated secrets, user IDs, pipeline-config paths, and
HOST_IP into docker/.env.
Note:
HOST_IPmust be exported before runningmake init(see Step 4). It is not sourced fromzone_config.json— it is read directly from your shell environment.
Note: Benchmark-related environment variables are configured in the
benchmarksection ofconfigs/zone_config.jsonand written intodocker/.envduring initialization.
Running Tests and Generating Coverage Report#
Run Tests
make test
Run Tests with Coverage
make coverageGenerate HTML Coverage Report
make coverage-htmlOpen
backend/htmlcov/index.htmlin your browser to view the report.
Custom Build Configuration#
If using a container registry, set the registry URL before building:
export REGISTRY=docker.io/username
make build
See Build from Source for detailed build options.
SceneScape Configuration#
Use
make export-sceneto export scene configuration from a running SceneScape instance.Store scene zip files referenced by
scene_zipin the repository’sscenescape/webserver/directory.make initgenerates DL Streamer pipeline configuration files per camera fromconfigs/pipeline-config.jsonand writes them intoscenescape/dlstreamer-pipeline-server/.
Clean Up#
# Stop and remove all containers + volumes
make clean
# Also remove generated secrets and .env
make clean-all
Benchmarking#
For detailed benchmarking instructions, parameters, and result processing, see the Benchmarking Guide.
Next Steps#
Learn more about application capabilities in the How to Use Guide
Understand the data flow in the MQTT Pipeline Design
If you encounter issues, check the Troubleshooting Guide