# Daisy chain detection and pose estimation
Source: [https://docs.qualcomm.com/doc/80-80020-50/topic/daisy-chain-detection-and-pose-detection.html](https://docs.qualcomm.com/doc/80-80020-50/topic/daisy-chain-detection-and-pose-detection.html)
The **gst-ai-daisychain-detection-pose** application allows you to perform
cascaded object detection and pose detection with a camera, file source, or an RTSP stream.
The use cases involve detecting objects and estimating the body poses of the subject in an
image or a video.
The application workflow receives the source, postprocesses it, and runs inferences on AI
hardware. The results are either displayed on the screen, saved as an encoded MP4 file,
or streamed over the RTSP server.
For information about the plugins used in the pipeline flow, see [Pipeline flow](https://docs.qualcomm.com/doc/80-80020-50/topic/daisy-chain-detection-and-pose-detection.html#daisy-chain-detection-and-pose-detection__section_pqq_1ny_kbc).
## Sample model and label files
Table : Sample model and label files for gst-ai-daisychain-detection-pose
| Runtime | Model files | Label files |
| :--- | :--- | :--- |
| LiteRT |
- Detection:
yolox_quantized.tflite
- Pose:
hrnet_pose_quantized.tflite
|
- Detection: yolox.json
- Pose:
- hrnet_pose.json
- hrnet_settings.json
|
## Run the application on the target device
Note: The commands in this section are targeted for the sample
applications based on QLI GA 1.5 (PPA version 05900 in Ubuntu) or later releases.
Run the `apt-cache policy gstreamer1.0-qcom-sample-apps` command to
check your QIM version. If you are using sample applications from older versions,
run the application with the `--help` option for more
instructions.
The sample application uses the
config-file=/etc/configs/config-daisychain-detection-pose.json
file to read the input parameters.
To create your own config JSON file, use [config-daisychain-detection-pose.json](https://git.codelinaro.org/clo/le/platform/vendor/qcom-opensource/gst-plugins-qti-oss/-/blob/imsdk.lnx.2.0.0.r2-rel/gst-sample-apps/gst-ai-daisychain-detection-pose/config-daisychain-detection-pose.json) as a reference.
1. Ensure that you complete the [Prerequisites](https://docs.qualcomm.com/doc/80-80020-50/topic/download-model-and-label-files.html).
2. Update the config JSON file based on the model, input stream, and other
properties. For more information, see [Config JSON field description](https://docs.qualcomm.com/doc/80-80020-50/topic/daisy-chain-detection-and-pose-detection.html#daisy-chain-detection-and-pose-detection__section_mxw_t2r_32c).
For QCS6490, if `file-path` and
`rtsp-ip-port` are *not* present in the
configuration file, then the camera input is selected.
3. Use the following format of the
config-file=/etc/configs/config-daisychain-detection-pose.json
file:
{
"input-file": "",
"rtsp-ip-port": "",
"detection-model": "",
"detection-labels": "",
"detection-runtime":"",
"pose-runtime":"",
"output-file": ""
}Copy to clipboard
For example, run the application using the custom video
input file, model paths, and label
paths:
{
"input-file": "/etc/media/video.mp4",
"pose-runtime":"dsp",
"detection-runtime":"dsp",
"detection-model": "/etc/models/yolox_quantized.tflite",
"detection-labels": "/etc/labels/yolox.json",
"pose-model": "/etc/models/hrnet_pose_quantized.tflite",
"pose-labels": "/etc/labels/hrnet_pose.json",
"pose-settings-path":"/etc/labels/hrnet_settings.json"
}Copy to clipboard
4. Run the gst-ai-daisychain-detection-pose
application:
gst-ai-daisychain-detection-pose --config-file=/etc/configs/config-daisychain-detection-pose.jsonCopy to clipboard
Note: For USB camera input, set the
`video-format`, `resolution`, and
`framerate` parameters in the configuration file to match
the capabilities of the camera. To check the camera capabilities, see [Configure USB camera](https://docs.qualcomm.com/bundle/publicresource/topics/80-80020-8/usb.html#configure-usb-camera).
Note: If a drop in performance is observed, you can use
YOLOv8 LiteRT model. For YOLOv8 export instructions, see Step 6 in [Prerequisites](https://docs.qualcomm.com/doc/80-80020-50/topic/download-model-and-label-files.html).
5. To display the available help options, run the following command in the SSH
shell:
gst-ai-daisychain-detection-pose -hCopy to clipboard
6. To stop the use case, use CTRL +
C.
## Expected output
Figure : Expected output for gst-ai-daisychain-detection-pose application

## Pipeline flow
The following table lists the plugins used in the daisy chain detection and
pose estimation pipeline:| Plugin | Description |
| --- | --- |
| Camera source:[qtiqmmfsrc](https://docs.qualcomm.com/doc/80-80020-50/topic/qtiqmmfsrc.html) |
- Captures the live stream from camera.
- Uses tee to split the stream for inferencing.
|
| File source: filesrc |
- Captures the video stream using filesrc, followed by
qtdemux, which demultiplexes the stream.
- Uses tee to split the stream for inferencing.
|
| RTSP source: rtspsrc |
- Captures the RTSP stream using rtspsrc, followed by
rtph264depay for video extraction.
- Uses tee to split the stream for inferencing.
|
| USB camera source: v4l2src |
- Captures the live stream from USB camera.
- Uses tee to split the stream for inferencing.
|
| [qtimetamux](https://docs.qualcomm.com/doc/80-80020-50/topic/qtimetamux.html) | Multiplexes the stream. |
| h264parse | Parses the H.264 video. |
| [v4l2h264dec](https://docs.qualcomm.com/doc/80-80020-50/topic/v4l2h264dec.html) | Decodes the H.264 video stream. |
| [qtivsplit](https://docs.qualcomm.com/doc/80-80020-50/topic/qtivsplit.html) | Crops full frame into smaller frames based on the detected
bounding boxes detected (maximum 4). |
| [qtimlvconverter](https://docs.qualcomm.com/doc/80-80020-50/topic/qtimlvconverter.html) | Used by AI processing stream for preprocessing:
- Receives the video stream on its sink pad.
- Performs the following preprocessing on the stream data.
This preprocessing is done when the model expects
floating-point values as input.
- Color conversion
- Scaling (up or down)
- Normalization
- Converts the preprocessed video stream to a tensor stream on
its source pad.
The tensor stream is used for inferencing in the later
stages of the pipeline. |
| [qtimltflite](https://docs.qualcomm.com/doc/80-80020-50/topic/qtimltflite.html) |
- After the inference runtime receives the tensor stream on
its sink pad, it runs the inference.
- Produces a tensor stream with the inference results on its
source pad.
|
| qtimlpostprocess for detection model | Handles inference results from any object detection model.
- Applies a threshold to the chosen number of results.
- Loads the YOLOv8 module.
- Generates results in the form of video frames with detection
labels.
- Produces video frames with only bounding boxes that can be
cropped.
|
| qtimlpostprocess for pose estimation | |
| [qtivcomposer](https://docs.qualcomm.com/doc/80-80020-50/topic/qtivcomposer.html) |
- Composes frames by combining the contents from its sink
pads.
- Pushes the GStreamer buffers containing the composed frames
onto its source pad.
|
| [Waylandsink](https://docs.qualcomm.com/doc/80-80020-50/topic/waylandsink.html) |
- Forwards the video stream received on its sink pad to
Weston.
- Weston renders the video stream on a local display.
|
| filesink | Receives the video stream on sink pad and saves it as an
H.264-encoded MP4 file. |
| qtirtspbin |
- Serves as a network sink.
- Transmits UDP packets to the network.
|
## Config JSON field description
The different parameters available to configure the JSON file and run the use case
are as follows:
Table : Field description–config_daisychain_detection_pose.json file
| Field | Values/description |
| :--- | :--- |
| **Input source** | Use one of the following input sources:
input-file: The directory path to the video
file.
rtsp-ip-port: The address of the RTSP
stream in
rtsp://<ip>:<port>/<stream>
format.
enable-usb-camera: Set to TRUE or
FALSE.
|
| **Models and labels** |
detection-model: The path to the detection
model.
detection-labels: The path to the detection
label.
pose-model: The path to the pose
model.
pose-labels: The path to the pose
label.
|
| **Output source** | `output-file`: The directory path to save the
output file. The display isn't enabled if this field is
empty. |
| **USB camera video-format and resolution** | Use one of the following video-format
Use one of the following resolution fields:
width: Input USB camera source
resolution width.
height: Input USB camera source
resolution width.
framerate: Input USB camera source
framerate.
|
| **detection-runtime and classification-runtime** | Takes CPU, GPU, and DSP as input and inferences respective use
case model in a particular runtime. |
## Known issue
Lag is observed with camera source on QCS6490 with both YOLOX and YOLOv8 models.
## Related information
- [Daisy chain detection and pose detection using Python](https://docs.qualcomm.com/doc/80-80020-50/topic/daisy-chain-detection-and-pose-detection-using-python.html)
- [Object detection](https://docs.qualcomm.com/doc/80-80020-50/topic/gst-ai-object-detection.html)
**Parent Topic:** [Run AI/ML sample applications](https://docs.qualcomm.com/doc/80-80020-50/topic/ai-ml-sample-applications.html)
Last Published: Mar 02, 2026
[Previous Topic
Daisy chain detection and classification](https://docs.qualcomm.com/bundle/publicresource/80-80020-50/topics/daisy-chain-detection-and-classification.md) [Next Topic
Monodepth from video](https://docs.qualcomm.com/bundle/publicresource/80-80020-50/topics/mono-depth-from-video.md)