151  
查询码: 00000609
ixstream测试用例介绍
2026年06月09日 发布 ,于 2026年06月09日 编辑

ixstream测试用例介绍

测试环境

  • SDK版本:4.3.0,,4.3.8,4.4.0
  • GPU型号:MR100
  • CPU架构:x86_64,arm
  • 模型所需最低GPU数量:1

二、创建容器

1. 获取镜像

通过SFTP从指定服务器下载基础镜像文件:

sftp -P 29880 iluvatar_mr@iftp.iluvatar.com.cn
密码:请咨询天数售后
获取基础镜像

2. 部署镜像

执行安装脚本完成镜像部署:
bash 基础镜像(run文件)

3. 创建容器

使用以下命令创建并启动容器:

docker run -dit \
-v /usr/src:/usr/src \
-v /lib/modules:/lib/modules \
-v /dev:/dev \
-v /data:/data \
-v /home:/home \
--network=host \
--name=test \
--ipc=host \
--privileged \
--cap-add=ALL \
--pid=host \
基础镜像名称 \
/bin/bash


搭建ixstream环境步骤,参考

4.3.8版本环境下基于官方发布的base镜像搭建ixstream环境-天数智芯知识库系统

三、测试

以下操作在容器内执行

#进入容器

docker exec -it test bash

1. 测试用例介绍

天数的 IXStream 是基于 GStream 框架开发的支持天数产品硬件编解码器和 GPU 推理的多媒体框架,与 DeepStream 的用法类似。


  • ixstream_samples 基于 ixstream 的一系列示例程序,包含 python 和 c++ 版本的实现,可以通过这些示例程序了解 ixstream 相关插件的基本用法。
  • iluvatarpipeline 是用 C++ 编写的测试硬件解码,cuda 预处理,ixrt 推理的工具,用于性能测试。
  • decTestApp 硬件解码能力测试。
  • ix_media 这是一个展示解码器API使用的简单例子,不依赖 ixstream 框架,可用于快速了解 VPU 的编程,和单独测试解码性能。

测试目录

python:/opt/ixstream_samples/python/

C++:  /opt/ixstream_samples/C++/

Sample功能说明

示例程序 功能

ixstream_sample1

基于 yolov10 模型进行检测的简单示例,并对检测到的对象进行画框等操作。输入为 720P 的 h264 视频文件,输出为 jpeg 图片

ixstream_sample1_osd

基于 ixstream_sample1 增加了目标物体的统计功能,并将结果显示在图片上

ixstream_sample1_rtsp_out

基于 ixstream_sample1 将输出更改为 rtsp 流

ixstream_sample1_usbcam

基于 ixstream_sample1 将输入更改为摄像头输入

ixstream_sample2

基于 ixstream_sample1 增加 tracker 和二级推理功能

ixstream_sample3

基于 ixstream_sample1 增加多路输入/输出支持

ixstream_sample4

基于 ixstream_sample3 将输出更改为输出到屏幕

ixstream_sample5

基于 ixstream_sample3 支持更多的输入输出(输入:h264 视频文件,mp4 视频文件,rtsp 流;输出:jpeg 图片,h264 视频文件)

ixstream_sample_analytics

基于 ixstream_sample1 增加 tracker 和分析功能

ixstream_sample_custom_binding

如何添加并访问用户自定义元数据

ixstream_sample_get_buffer

如何获取 GST buffer数据

ixstream_sample_infer_yolo

基于 ixstream_sample1 增加更多 yolo 模型的支持

ixstream_sample_pause_and_switch_input

如何动态暂停和切换输入源

ixstream_sample_preprocess

针对插件 Gst-IxPreprocess 的预处理功能测试

ixstream_sample_segmentation

使用 unet 分割模型对图片进行分割,并对分割结果进行可视化

ixstream_sample_tiler

获取多路 rtsp 流,解码后将多路数据拼接成一路,最后将拼接后的图片保存为 jpeg 图片


2. ixstream_sample1

这是一个 ixstream 基础应用示例,展示了如何通过 ixstream 相关插件构建简单的智能视频分析(IVA)流水线。 该示例以 h264 视频文件作为输入,依次经过解码、推理、OSD 等功能单元处理,最终生成 jpeg 格式的输出文件。

下边以python代码为例,C++代码流程是一样的,只是需要编译一下,

cd /opt/ixstream_samples/python/ixstream_sample1

配置文件在config目录下

config_sample1.json: sample1的主配置文件,需要注意加载的本地视频文件的帧的分辨率
{
    "file-src":{
        "blocksize": 131072,
        "location": "../../streams/sample_720p.h264"
    },
    "vpu-decode":{
        "drop-frame-interval": 1
    },
    "stream-mux":{
        "width": 1280,
        "height": 720,
        "live-source": false
    },
    "infer-pgie":{
        "config-file-path": "./config/config_pgie.json"
    },
    "osd":{
        "display-text": true,
        "display-bbox": true
    },
    "jpu-encode": {
        "save-file-path": "./jpeg_out"
    }
}
config_pgie.json : 模型推理相关配置文件,需要注意引擎文件路径、模型的输入、输出名称、batch的大小、后处理的bbox name、以及class-attrs-all参数
{
    "property":{
        "gpu-id":  0,
        "net-scale-factor": 0.003921569,
        "model-color-format": 0,
        "model-engine-file": "../../engines/yolov10s_batchsize_1_fp16.so",
        "infer-dims": [3, 640, 640],
        "labelfile-path": "../../labels/coco_labels.txt",
        "input-blob-name": "images",
        "output-blob-names": "output0",
        "batch-size": 1,
        "num-detected-classes": 80,
        "interval": 0,
        "gie-unique-id": 1,
        "process-mode": 1,
        "network-type": 0,
        "cluster-mode": 2,
        "maintain-aspect-ratio": true,
        "symmetric-padding": false,
        "parse-bbox-func-name": "IxInferParseCustomYoloV10",
        "custom-lib-path": "/usr/local/corex/lib64/libgst_ixstream_infer_custom_impl_Yolo.so",
        "filter-out-class-ids": [1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]
    },
    "class-attrs-all":{
        "post-cluster-threshold": 0.1
    }
}
这里我们需要修改的地方,我标红了

1 是要准备的测试文件(不改使用默认文件)

2 推理需要的engine文件

cd /opt/ixstream_samples/python/ixstream_sample1

mkdir -p ../../engines

cd ../../engines/

wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt

将pt模型转换为onnx模型

将以下代码保存为一个 export.py文件,然后执行 python3 export.py --weight ./yolov10s.pt --batch 1 ,执行成功会在当前目录下生成 yolov10s.onnx 文件


import argparse
from ultralytics import YOLO

def parse_args():
     parser = argparse.ArgumentParser()

     parser.add_argument("--weight", type=str, required=True, help="pytorch model weight.")

     parser.add_argument("--batch", type=int, required=True, help="batchsize of the model.")
     args = parser.parse_args()

     return args

def main():
     args = parse_args()
     model = YOLO(args.weight).cpu()
     model.export(format='onnx', batch=args.batch, imgsz=(640, 640), optimize=True, simplify=True, opset=13)

if __name__ == "__main__":
     main()

onnxsim yolov10s.onnx yolov10s.onnx

### 生成精度为fp16的engine:关于 igie-exec 工具的用法,可以执行 igie-exec --help 命令查看
igie-exec --model_path yolov10s.onnx --input images:1,3,640,640 --precision fp16
当前目录,会生成yolov10s_batchsize_1_fp16.so

cd /opt/ixstream_samples/python/ixstream_sample1

python3 ixstream_sample1.py

输出

**********************FPS*****************************************
Fps of plugin stream-mux is  31.90
**********************FPS*****************************************
Fps of plugin stream-mux is  212.32
**********************FPS*****************************************
Fps of plugin stream-mux is  215.13
**********************FPS*****************************************
Fps of plugin stream-mux is  212.39
**********************FPS*****************************************
Fps of plugin stream-mux is  212.63
**********************FPS*****************************************
Fps of plugin stream-mux is  206.58


其它测试用例使用,参考每个用例下的README文件

笔记



  目录
    天数智芯知识库系统 -V 5.2.7 -wcp