讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

AniShort
AniShort

AI短剧协同制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

剧云
剧云

中文短剧剧本制作平台

deepstream-dev

Polar Sponsor
爱发电 赞助
.NET 9.0

使用 Python pyservicemaker API 进行 NVIDIA DeepStream SDK 开发。在构建视频分析流水线、基于 GStreamer

DeepStream 开发技能

功能概述

DeepStream 开发技能是一项面向实际任务的技能,主要用于当此技能激活时, 在生成代码之前始终阅读相关参考文档;不要依赖记忆——参考文档包含了关于确切属性名称、正确 API 用法和常见陷阱的关键细节;

核心要点

  • SDK 与架构快速参考;
  • DeepStream SDK 版本要求;
  • GStreamer :1.24.2;

使用与执行

NVIDIA Driver :590+;CUDA :13.1;TensorRT :10.14.1.48;平台 :Ubu。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

结果检查与注意事项

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

DeepStream 开发技能

当此技能激活时,在生成代码之前始终阅读相关参考文档。不要依赖记忆——参考文档包含了关于确切属性名称、正确 API 用法和常见陷阱的关键细节。

SDK 与架构快速参考

DeepStream SDK 版本要求

  • GStreamer:1.24.2
  • NVIDIA Driver:590+
  • CUDA:13.1
  • TensorRT:10.14.1.48
  • 平台:Ubuntu 24.04(x86_64 和 ARM64/Jetson)

典型流水线流程

Source → Stream Muxer → Inference → [Tracker] → OSD → Renderer

[方括号] 中的组件是可选的——仅在用户明确请求时添加。

阶段 角色 关键元素 必需?
Source 从文件、RTSP、摄像头输入 nvurisrcbin(首选)、nvmultiurisrcbin、filesrc 是
Stream Muxer 将多个流合并为批次用于推理 nvstreammux 是
Inference TensorRT 模型执行 nvinfer、nvinferserver 是
Tracker 跨帧的多目标跟踪 nvtracker 仅在请求时
OSD 绘制边界框、标签、叠加层 nvosdbin 是(用于可视化)
Renderer 显示或保存输出 nveglglessink、nv3dsink、filesink 是

内存模型

DeepStream 使用 NVIDIA 视频内存管理器(NVMM)实现零拷贝 GPU 缓冲区传输。Caps 字符串使用 memory:NVMM 表示 GPU 内存(例如 video/x-raw(memory:NVMM), format=NV12)。

关键规则

  1. 仅添加请求的组件:不要添加用户未要求的流水线元素。

    • 跟踪器(nvtracker):仅在用户明确请求跨帧跟踪或目标 ID 时添加
    • 辅助 GIE:仅在用户请求分类或属性提取时添加
    • 分析(nvdsanalytics):仅在用户请求越线检测、ROI 计数等时添加
    • 消息代理(nvmsgbroker/nvmsgconv):仅在用户请求 Kafka/云消息传递时添加
    • 如有疑问,构建最小工作流水线,让用户要求添加
  2. 默认使用 nvurisrcbin 作为源:当用户提到"摄像头"、"流"、"视频"或提供文件路径时:

    • 始终使用 nvurisrcbin——它透明地处理 RTSP、HTTP 和本地文件(file://)
    • 仅当用户明确需要原始文件源控制时才使用 filesrc + qtdemux + 解析器
    • 对于 RTSP/实时源,还需在 nvstreammux 上设置 live-source=1,在 sink 上设置 sync=0
    • 将本地路径转换为 URI:"file://" + os.path.abspath(path)
  3. 元数据迭代:使用 .frame_items 和 .object_items(返回迭代器,而非列表)

    • 切勿在这些上使用 len()——迭代以计数
    • 迭代器只能消费一次
  4. 请求 Pad 语法:使用 "sink_%u" 模板,切勿使用字面量 pad 名称

    pipeline.link(("decoder", "mux"), ("", "sink_%u"))  # 正确
    # pipeline.link(("decoder", "mux"), ("", "sink_0"))  # 错误 - 会失败
    
  5. Sink 的平台检测:

    import platform
    sink_type = "nv3dsink" if platform.processor() == "aarch64" else "nveglglessink"
    
  6. 缓冲区克隆:始终为异步处理克隆缓冲区

    tensor = buffer.extract(0).clone()  # 关键
    
  7. 队列类型:

    • queue.Queue → 与 threading.Thread 一起使用
    • multiprocessing.Queue → 与 multiprocessing.Process 一起使用
    • 使用错误类型会导致静默数据丢失!
  8. nvinfer 配置格式:

    • YAML:使用 property: 部分(而非 model:),key: value 冒号后有空格
    • INI:使用 [property] 部分,key=value 使用等号
    • 部分必须命名为 property
  9. nvmsgbroker 是 SINK:不能有下游元素——使用 tee 拆分流水线

  10. 所有 Sink 在 Tee 拆分或动态源时需要 async=0:对状态转换至关重要

    # 使用 tee 拆分或动态源时,所有 SINK 必须设置 async=0
    pipeline.add("nveglglessink", "sink", {
        "sync": 0, "qos": 0,
        "async": 0  # 关键 - 防止状态转换死锁
    })
    

    缺失时的症状:流水线停留在 PAUSED 状态,无视频显示。

  11. 内置 Probe 附件:measure_fps_probe 只能附加到处理元素(例如 nvinfer、nvosdbin),不能附加到 sink 元素。附加到 sink 会引发 RuntimeError: Probe failure。

  12. 动态 ONNX 模型需要 infer-dims:当 ONNX 模型具有动态输入形状时(例如,Ultralytics YOLO 使用 dynamic=True 导出,或具有动态 batch/height/width 轴),你必须在 nvinfer 配置中添加 infer-dims=C;H;W。没有它,TensorRT 会将动态维度视为 -1 并失败,报错 setDimensions: Error Code 3。常用值:

    • YOLO 模型(640 输入):infer-dims=3;640;640
    • 416 输入模型:infer-dims=3;416;416
    • 1280 输入模型:infer-dims=3;1280;1280
  13. Ultralytics YOLO 输出格式取决于模型代次——较新模型(v10+/v26+)输出后 NMS 结果;较旧模型(v8/v11)输出原始前 NMS 张量。自定义解析器和 cluster-mode 必须匹配实际输出:

    模型代次 输出张量形状 字段 cluster-mode
    v8 / v11 [batch, 84, 8400] [features(4+80), anchors] — 原始 cx/cy/w/h + 类别分数,无 NMS 2(NMS)
    v10 / v26+ [batch, 300, 6] [max_det, (x1,y1,x2,y2,conf,cls)] — 已后 NMS,像素坐标 4(无)

    运行时如何识别:在自定义解析器中记录 inferDims.d[0] 和 inferDims.d[1]。

    • d={84, 8400} → 前 NMS(v8/v11 风格)
    • d={300, 6} → 后 NMS(v10/v26+ 风格)

    不匹配的症状:如果 cluster-mode: 2 用于后 NMS 的 [N, 6] 输出,边界框会与实际目标偏移 45° 或 135°(DeepStream 的 NMS 错误地重新处理了已最终的坐标)。 如果看到倾斜或旋转的框,还需检查 references/nvinfer_config.md 中的 OBB / rotation_angle 说明:对于非 OBB 模型,使用 obj{} 值初始化 NvDsInferObjectDetectionInfo 并保持 rotation_angle = 0;普通的 NvDsInferObjectDetectionInfo obj; 会使字段保持未初始化状态。

  14. 虚拟环境必须包含 pyservicemaker:pyservicemaker 已系统范围安装,但从标准 Python 虚拟环境中不可访问。当任务需要 venv 时(例如,用于模型下载/转换的 pip 依赖),始终在 venv 内安装 pyservicemaker 和 pyyaml。生成的代码和 README 中的 venv 设置必须始终包含:

    python3 -m venv venv
    source venv/bin/activate
    pip install /opt/nvidia/deepstream/deepstream/service-maker/python/pyservicemaker*.whl pyyaml
    pip install -r requirements.txt  # 其他依赖
    

    缺失时的症状:在 venv 内运行应用程序时出现 ModuleNotFoundError: No module named 'pyservicemaker'。

关键路径

  • 模型:/opt/nvidia/deepstream/deepstream/samples/models/
  • 主检测器:/opt/nvidia/deepstream/deepstream/samples/models/Primary_Detector/resnet18_trafficcamnet_pruned.onnx
  • 跟踪器库:/opt/nvidia/deepstream/deepstream/lib/libnvds_nvmultiobjecttracker.so
  • Kafka 库:/opt/nvidia/deepstream/deepstream/lib/libnvds_kafka_proto.so
  • 示例配置:/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/

参考文档

重要:始终阅读这些文档以获取完整细节。不要凭记忆生成代码。

文档 使用场景
references/gstreamer_plugins.md 查找插件属性,列出所有属性
references/service_maker_api.md 使用 Pipeline/Flow API、元数据访问、probe、EventMessageUserMetadata
references/use_cases_pipelines.md 构建流水线:简单播放、多推理、级联 GIE
references/streaming_sources.md 使用 nvurisrcbin 摄取本地文件、HTTP MP4、HLS、MPEG-DASH 或 RTSP 源
references/kafka_messaging.md Kafka/消息代理设置、nvmsgconv/nvmsgbroker 配置、msg2p-newapi
references/best_practices.md 设计模式、常见陷阱、反模式
references/buffer_apis.md BufferProvider/Feeder(注入)、BufferRetriever/Receiver(提取)
references/media_extractor_advanced.md MediaExtractor、MediaChunk、FrameSampler
references/utilities_config.md PerfMonitor、EngineFileMonitor、SourceConfig、SensorInfo、SmartRecordConfig
references/nvinfer_config.md nvinfer 配置文件格式,所有参数
references/tracker_config.md nvtracker 配置、NvDCF/IOU/DeepSORT/NvSORT
references/troubleshooting.md 错误消息和解决方案
references/rest_api_dynamic.md REST API、动态源添加/移除、nvmultiurisrcbin
references/metamux_config.md nvdsmetamux 配置、并行多模型推理、元数据合并、源 ID 过滤
references/docker_containers.md Docker 镜像、Dockerfile 示例、pyservicemaker 安装、容器运行命令
references/nvds_msgapi_adapter.md 构建自定义协议适配器:nvds_msgapi

快速错误参考

错误 解决方案
iterator has no len() 迭代以计数,不要使用 len()
pad template not found 使用 "sink_%u" 而非 "sink_0"
队列数据丢失 使用 multiprocessing.Queue 配合 Process
配置解析失败 在 YAML 中使用 property: 而非 model:
is-classifier 弃用警告 分类器使用 network-type: 1 替代 is-classifier: 1;检测器两者都省略
min-boxes 未知键警告 在 class-attrs-* 部分中使用 minBoxes(驼峰命名),而非 min-boxes
辅助 GIE 不活动 设置 process-mode: 2,检查 operate-on-gie-id
Tee/动态源卡在 PAUSED 在所有 sink 元素上设置 async: 0
RTSP 无数据/重新连接 使用 ffplay 测试 URL,检查凭据
RuntimeError: Probe failure measure_fps_probe 不能附加到 sink 元素;改用 nvinfer 或 nvosdbin
setDimensions 负维度 / 引擎构建失败 为动态 ONNX 模型添加 infer-dims=C;H;W(例如 infer-dims=3;640;640)
venv 中 No module named 'pyservicemaker' 在 venv 内运行 pip install /opt/nvidia/deepstream/deepstream/service-maker/python/pyservicemaker*.whl pyyaml
AttributeError: object has no attribute 'obj_label' 在 pyservicemaker 中使用 obj_meta.label 而非 obj_meta.obj_label(C API 名称与 Python 绑定不同)
目录

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

Go-Zero安装与goctl环境配置教程
Go-Zero安装与goctl环境配置教程

本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。

0

2026.11.12

Go-Zero零基础入门教程
Go-Zero零基础入门教程

本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。

0

2026.11.12

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

0

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

0

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

0

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

0

2026.11.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CentOS 官方文档
CentOS 官方文档

共0课时 | 0人学习

极客学院Java8新特性视频教程
极客学院Java8新特性视频教程

共17课时 | 4.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn