Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ HOST_IP=
REST_SERVER_PORT=8080

# DL Streamer Pipeline Server
DLSTREAMER_PIPELINE_SERVER_IMAGE=intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc1
DLSTREAMER_PIPELINE_SERVER_IMAGE=intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc2
RTSP_CAMERA_IP=

# MinIO service & client
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ HOST_IP=
REST_SERVER_PORT=8080

# DL Streamer Pipeline Server
DLSTREAMER_PIPELINE_SERVER_IMAGE=intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc1
DLSTREAMER_PIPELINE_SERVER_IMAGE=intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc2
RTSP_CAMERA_IP=

# MinIO service & client
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ HOST_IP=
REST_SERVER_PORT=8080

# DL Streamer Pipeline Server
DLSTREAMER_PIPELINE_SERVER_IMAGE=intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc1
DLSTREAMER_PIPELINE_SERVER_IMAGE=intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc2
RTSP_CAMERA_IP=

# MinIO service & client
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ HOST_IP=
REST_SERVER_PORT=8080

# DL Streamer Pipeline Server
DLSTREAMER_PIPELINE_SERVER_IMAGE=intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc1
DLSTREAMER_PIPELINE_SERVER_IMAGE=intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc2
RTSP_CAMERA_IP=

# MinIO service & client
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ HOST_IP=
REST_SERVER_PORT=8080

# DL Streamer Pipeline Server
DLSTREAMER_PIPELINE_SERVER_IMAGE=intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc1
DLSTREAMER_PIPELINE_SERVER_IMAGE=intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc2
RTSP_CAMERA_IP=

# MinIO service & client
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Download artifacts for a specific sample application
# by calling respective app's setup.sh script
SCRIPT_DIR=$(dirname $(readlink -f "$0"))
MODEL_URL="https://github.com/open-edge-platform/edge-ai-resources/raw/1d40dfe1791d44e8cf6e8472c28c034e40fa508d/models/INT8/pallet_defect_detection.zip"
MODEL_URL="https://github.com/open-edge-platform/edge-ai-resources/raw/06bb0d621cb14a1791672552a538beddddcc4066/models/INT8/pallet_defect_detection.zip"
VIDEO_URL="https://github.com/open-edge-platform/edge-ai-resources/raw/c13b8dbf23d514c2667d39b66615bd1400cb889d/videos/warehouse.avi"

err() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"name": "worker_safety_gear_detection_mlops",
"source": "gstreamer",
"queue_maxsize": 50,
"pipeline": "multifilesrc loop=TRUE location=/home/pipeline-server/resources/videos/Safety_Full_Hat_and_Vest.avi name=source ! h264parse ! decodebin3 ! gvadetect name=detection ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvafpscounter ! appsink name=destination",
"pipeline": "multifilesrc loop=TRUE location=/home/pipeline-server/resources/videos/Safety_Full_Hat_and_Vest.avi name=source ! h264parse ! decodebin3 ! gvadetect name=detection threshold=0.4 ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvafpscounter ! appsink name=destination",
"parameters": {
"type": "object",
"properties": {
Expand All @@ -23,7 +23,7 @@
"name": "worker_safety_gear_detection_mqtt",
"source": "gstreamer",
"queue_maxsize": 50,
"pipeline": "{auto_source} name=source ! decodebin3 ! gvadetect name=detection model-instance-id=inst0 ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvawatermark displ-cfg=font-scale=1.0,draw-txt-bg=false ! queue ! gvafpscounter ! queue ! jpegenc ! appsink name=destination",
"pipeline": "{auto_source} name=source ! decodebin3 ! gvadetect name=detection model-instance-id=inst0 threshold=0.4 ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvawatermark displ-cfg=font-scale=1.0,draw-txt-bg=false ! queue ! gvafpscounter ! queue ! jpegenc ! appsink name=destination",
"parameters": {
"type": "object",
"properties": {
Expand All @@ -41,7 +41,7 @@
"name": "worker_safety_gear_detection_s3write",
"source": "gstreamer",
"queue_maxsize": 50,
"pipeline": "{auto_source} name=source ! decodebin3 ! gvadetect name=detection model-instance-id=inst0 ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvafpscounter ! queue ! jpegenc ! appsink name=destination",
"pipeline": "{auto_source} name=source ! decodebin3 ! gvadetect name=detection model-instance-id=inst0 threshold=0.4 ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvafpscounter ! queue ! jpegenc ! appsink name=destination",
"parameters": {
"type": "object",
"properties": {
Expand All @@ -64,7 +64,7 @@
"name": "worker_safety_gear_detection_opcua",
"source": "gstreamer",
"queue_maxsize": 50,
"pipeline": "{auto_source} name=source ! decodebin3 ! gvadetect name=detection model-instance-id=inst0 ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvawatermark displ-cfg=font-scale=1.0,draw-txt-bg=false ! queue ! gvafpscounter ! queue ! jpegenc ! appsink name=destination",
"pipeline": "{auto_source} name=source ! decodebin3 ! gvadetect name=detection model-instance-id=inst0 threshold=0.4 ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvawatermark displ-cfg=font-scale=1.0,draw-txt-bg=false ! queue ! gvafpscounter ! queue ! jpegenc ! appsink name=destination",
"parameters": {
"type": "object",
"properties": {
Expand All @@ -86,7 +86,7 @@
"name": "worker_safety_gear_detection_gpu",
"source": "gstreamer",
"queue_maxsize": 50,
"pipeline": "{auto_source} name=source ! decodebin3 ! gvadetect device=GPU model-instance-id=instgpu0 inference-region=full-frame inference-interval=1 batch-size=8 nireq=2 ie-config=\"GPU_THROUGHPUT_STREAMS=2\" threshold=0.7 name=detection ! queue ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvafpscounter ! appsink name=destination",
"pipeline": "{auto_source} name=source ! decodebin3 ! gvadetect device=GPU model-instance-id=instgpu0 inference-region=full-frame inference-interval=1 batch-size=8 nireq=2 ie-config=\"GPU_THROUGHPUT_STREAMS=2\" threshold=0.4 name=detection ! queue ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvafpscounter ! appsink name=destination",
"parameters": {
"type": "object",
"properties": {
Expand All @@ -104,7 +104,7 @@
"name": "worker_safety_gear_detection_npu",
"source": "gstreamer",
"queue_maxsize": 50,
"pipeline": "{auto_source} name=source ! decodebin3 ! gvadetect device=NPU model-instance-id=instnpu0 inference-region=full-frame inference-interval=1 batch-size=1 nireq=4 threshold=0.7 name=detection ! queue ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvafpscounter ! appsink name=destination",
"pipeline": "{auto_source} name=source ! decodebin3 ! gvadetect device=NPU model-instance-id=instnpu0 inference-region=full-frame inference-interval=1 batch-size=1 nireq=4 threshold=0.4 name=detection ! queue ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvafpscounter ! appsink name=destination",
"parameters": {
"type": "object",
"properties": {
Expand All @@ -122,7 +122,7 @@
"name": "worker_safety_gear_detection",
"source": "gstreamer",
"queue_maxsize": 50,
"pipeline": "{auto_source} name=source ! decodebin3 ! gvadetect device=CPU model-instance-id=inst0 name=detection ! queue ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvafpscounter ! appsink name=destination",
"pipeline": "{auto_source} name=source ! decodebin3 ! gvadetect device=CPU model-instance-id=inst0 threshold=0.4 name=detection ! queue ! gvametaconvert add-empty-results=true name=metaconvert ! queue ! gvafpscounter ! appsink name=destination",
"parameters": {
"type": "object",
"properties": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Download artifacts for a specific sample application
# by calling respective app's setup.sh script
SCRIPT_DIR=$(dirname $(readlink -f "$0"))
MODEL_URL="https://github.com/open-edge-platform/edge-ai-resources/raw/1d40dfe1791d44e8cf6e8472c28c034e40fa508d/models/INT8/worker-safety-gear-detection.zip"
MODEL_URL="https://github.com/open-edge-platform/edge-ai-resources/raw/06bb0d621cb14a1791672552a538beddddcc4066/models/INT8/worker-safety-gear-detection.zip"
VIDEO_URL="https://github.com/open-edge-platform/edge-ai-resources/raw/edd25f37c324a9ef73df1642354b2ba5fa7b7df5/videos/Safety_Full_Hat_and_Vest.avi"

err() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
MTX_WEBRTCICESERVERS2_0_USERNAME=<username> # WebRTC credentials e.g. intel1234
MTX_WEBRTCICESERVERS2_0_PASSWORD=<password>
```
> **Note:** For GPU/NPU based pipelines, set `privileged_access_required: true` in the `helm/values_<SAMPLE_APP>.yaml` file to enable access to host hardware devices.

4. Install pre-requisites for all instances

Expand Down Expand Up @@ -806,7 +807,7 @@ Applications can take advantage of S3 publish feature from DL Streamer Pipeline
>NOTE- For sake of simplicity, we assume that the new model has already been downloaded by Model Download microservice. The following curl command is only a simulation that just downloads the model. In production, however, they will be downloaded by the Model Download service.

```sh
export MODEL_URL='https://github.com/open-edge-platform/edge-ai-resources/raw/1d40dfe1791d44e8cf6e8472c28c034e40fa508d/models/INT8/pallet_defect_detection.zip'
export MODEL_URL='https://github.com/open-edge-platform/edge-ai-resources/raw/06bb0d621cb14a1791672552a538beddddcc4066/models/INT8/pallet_defect_detection.zip'

curl -L "$MODEL_URL" -o "$(basename $MODEL_URL)"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
```sh
cp helm/values_pallet-defect-detection.yaml helm/values.yaml
```
> **Note:** For GPU/NPU based pipelines, set `privileged_access_required: true` in the `helm/values.yaml` file to enable access to host hardware devices.

3. Optional: Pull the helm chart and replace the existing helm folder with it

Expand All @@ -32,13 +33,13 @@
- Download helm chart with the following command

```bash
helm pull oci://registry-1.docker.io/intel/pallet-defect-detection-reference-implementation --version 2.6.0-rc1
helm pull oci://registry-1.docker.io/intel/pallet-defect-detection-reference-implementation --version 2.6.0-rc2
```

- Unzip the package using the following command

```bash
tar -xvf pallet-defect-detection-reference-implementation-2.6.0-rc1.tgz
tar -xvf pallet-defect-detection-reference-implementation-2.6.0-rc2.tgz
```

- Replace the helm directory
Expand Down Expand Up @@ -408,7 +409,7 @@ Applications can take advantage of S3 publish feature from DL Streamer Pipeline
>NOTE- For sake of simplicity, we assume that the new model has already been downloaded by Model Download microservice. The following curl command is only a simulation that just downloads the model. In production, however, they will be downloaded by the Model Download service.

```sh
export MODEL_URL='https://github.com/open-edge-platform/edge-ai-resources/raw/1d40dfe1791d44e8cf6e8472c28c034e40fa508d/models/INT8/pallet_defect_detection.zip'
export MODEL_URL='https://github.com/open-edge-platform/edge-ai-resources/raw/06bb0d621cb14a1791672552a538beddddcc4066/models/INT8/pallet_defect_detection.zip'

curl -L "$MODEL_URL" -o "$(basename $MODEL_URL)"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ This section collects guides for Pallet Defect Detection sample application.
- [Manage pipelines](./how-to-guides/manage-pipelines.md)
- [Run multiple AI pipelines](./how-to-guides/run-multiple-ai-pipelines.md)
- [Use GPU For Inference](./how-to-guides/use-gpu-for-inference.md)
- [Use NPU For Inference](./how-to-guides/use-npu-for-inference.md)
- [Use Your AI Model and Video](./how-to-guides/use-your-ai-model-and-video.md)
- [Change the Input Video Source](./how-to-guides/change-input-video-source.md)
- [Scale Video Resolution](./how-to-guides/scale-video-resolution.md)
Expand All @@ -27,6 +28,7 @@ This section collects guides for Pallet Defect Detection sample application.
./how-to-guides/manage-pipelines
./how-to-guides/run-multiple-ai-pipelines
./how-to-guides/use-gpu-for-inference
./how-to-guides/use-npu-for-inference
./how-to-guides/use-your-ai-model-and-video
./how-to-guides/change-input-video-source
./how-to-guides/scale-video-resolution
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ cd edge-ai-libraries/microservices/dlstreamer-pipeline-server
Create a Docker file named `BalluffDockerfile` inside your `dlstreamer-pipeline-server` directory with the following content.

```dockerfile
FROM intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc1
FROM intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc2

USER root

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ cd edge-ai-libraries/microservices/dlstreamer-pipeline-server
Create a Docker file named `BaslerDockerfile` inside your `dlstreamer-pipeline-server` directory with the following content.

```dockerfile
FROM intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc1
FROM intel/dlstreamer-pipeline-server:2026.0.0-ubuntu24-rc2

USER root

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# How to use NPU for inference

## Pre-requisites

To take full advantage of hardware acceleration, pipelines can be designed so that different stages—such as decoding and inference—are executed on the most suitable hardware devices.

Low-power accelerators like a Neural Processing Unit (NPU) can offload neural network computation from the CPU or GPU, enabling more efficient resource utilization and improved overall system performance.

DLStreamer and the DLStreamer Pipeline Server support inference on NPU devices, allowing applications built on these frameworks to leverage NPU acceleration for improved efficiency and performance.

Before running inference on an NPU, ensure that:
- The host system includes a supported NPU device
- The required NPU drivers are installed and properly configured

For detailed setup instructions, refer to the [documentation](https://docs.openedgeplatform.intel.com/2026.0/edge-ai-libraries/dlstreamer/dev_guide/advanced_install/advanced_install_guide_prerequisites.html#optional-prerequisite-2-install-intel-npu-drivers).

For containerized application, following additional changes are required.

### Provide NPU access to the container

This can be done by making the following changes to the docker compose file.

```yaml
services:
dlstreamer-pipeline-server:
group_add:
# render group ID for ubuntu 22.04 host OS
- "110"
# render group ID for ubuntu 24.04 host OS
- "992"
devices:
# you can add specific devices in case you don't want to provide access to all like below.
- "/dev:/dev"
```
The changes above adds the container user to the `render` group and provides access to the NPU devices.

### Hardware specific encoder/decoders

Unlike the changes done for the container above, the following requires a modification to the media pipeline itself.

Gstreamer has a variety of hardware specific encoders and decoders elements such as Intel specific VA-API elements that you can benefit from by adding them into your media pipeline. Examples of such elements are `vah264dec`, `vah264enc`, `vajpegdec`, `vajpegdec`, etc.

Additionally, one can also enforce zero-copy of buffers using GStreamer caps (capabilities) to the pipeline by adding `video/x-raw(memory: VAMemory)` for Intel NPUs.

Read DL Streamer [docs](https://dlstreamer.github.io/dev_guide/gpu_device_selection.html) for more details.

### NPU specific element properties

DL Streamer inference elements also provides property such as `device=NPU` and `pre-process-backend=va` which should be used in pipelines with NPU memory. It performs mapping to the system memory and uses VA pre-processor. Read DL Streamer [docs](https://dlstreamer.github.io/dev_guide/model_preparation.html#model-pre-and-post-processing) for more.

## Tutorial on how to use NPU specific pipelines

> Note - This sample application already provides a default `docker-compose.yml` file that includes the necessary NPU access to the containers.

The pipeline `pallet_defect_detection_npu` in `pipeline-server-config.json` contains NPU specific elements and uses NPU backend for inferencing. Follow the steps below to run the pipeline.

### Steps

1. Ensure that the sample application is up and running. If not, follow the steps [here](../get-started.md#set-up-the-application) to setup the application and then bring the services up

>If you're running multiple instances of app, start the services using `./run.sh up` instead.

```sh
docker compose up -d
```
2. Start the pipeline.
```sh
./sample_start.sh -p pallet_defect_detection_npu
```

This will start the pipeline. The inference stream can be viewed on WebRTC, in a browser, at the following url:

>If you're running multiple instances of app, ensure to provide `NGINX_HTTPS_PORT` number in the url for the app instance i.e. replace <HOST_IP> with <HOST_IP>:<NGINX_HTTPS_PORT>

```bash
https://<HOST_IP>/mediamtx/pdd/
```

## Deploying with Helm

### Intel GPU K8S Extension

If you're deploying a NPU based pipeline (example: with VA elements like `vapostproc`, `vah264dec` etc., and/or with `device=NPU` in `gvadetect` in `dlstreamer_pipeline_server_config.json`) with Intel GPU k8s Extension, ensure to set the below details in the file `helm/values.yaml` appropriately in order to utilize the underlying NPU.

```sh
gpu:
enabled: true
type: "gpu.intel.com/i915"
count: 1
```

### Without Intel GPU K8S Extension

If you're deploying a NPU based pipeline (example: with VA elements like `vapostproc`, `vah264dec` etc., and/or with `device=NPU` in `gvadetect` in `dlstreamer_pipeline_server_config.json`) without Intel GPU k8s Extension, ensure to set the below details in the file `helm/values.yaml` appropriately in order to utilize the underlying NPU.

```sh
privileged_access_required: true
```
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
MTX_WEBRTCICESERVERS2_0_USERNAME=<username> # WebRTC credentials e.g. intel1234
MTX_WEBRTCICESERVERS2_0_PASSWORD=<password>
```
> **Note:** For GPU/NPU based pipelines, set `privileged_access_required: true` in the `helm/values_<SAMPLE_APP>.yaml` file to enable access to host hardware devices.

4. Install pre-requisites for all instances

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,18 @@
```sh
cp helm/values_pcb-anomaly-detection.yaml helm/values.yaml
```
> **Note:** For GPU/NPU based pipelines, set `privileged_access_required: true` in the `helm/values.yaml` file to enable access to host hardware devices.

3. Optional: Pull the helm chart and replace the existing helm folder with it

- Note: The helm chart should be downloaded when you are not using the helm chart provided in `edge-ai-suites/manufacturing-ai-suite/industrial-edge-insights-vision/helm`

- Download helm chart with the following command

`helm pull oci://registry-1.docker.io/intel/pcb-anomaly-detection --version 1.2.0-rc1`
`helm pull oci://registry-1.docker.io/intel/pcb-anomaly-detection --version 1.2.0-rc2`
- unzip the package using the following command

`tar -xvf pcb-anomaly-detection-1.2.0-rc1.tgz`
`tar -xvf pcb-anomaly-detection-1.2.0-rc2.tgz`
- Replace the helm directory

`rm -rf helm && mv pcb-anomaly-detection helm`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
MTX_WEBRTCICESERVERS2_0_USERNAME=<username> # WebRTC credentials e.g. intel1234
MTX_WEBRTCICESERVERS2_0_PASSWORD=<password>
```
> **Note:** For GPU/NPU based pipelines, set `privileged_access_required: true` in the `helm/values_<SAMPLE_APP>.yaml` file to enable access to host hardware devices.

4. Install pre-requisites for all instances

Expand Down
Loading
Loading