用 Python 在 CUDA 上高效实现多路、多卡、多模型的视频流解码推理跟踪分析,并显著降低开发复杂度
Effortless multi-stream, multi-GPU, multi-model video analytics on CUDA — decode, infer, track, and analyze in pure Python.
4in4out_2x2.mp4
核心特性:
-
多进程 + CUDA MPS 架构,彻底绕过 GIL,CPU 占用极低
-
帧级零拷贝:NVDEC → CUDA Surface → TensorRT 全链路驻留显存,仅检测框结果回传 CPU
-
单批推理(batch=1)保延迟,进程数 × MPS 换吞吐,多路并发近线性扩展
-
多模型 GPU 级联(检测/分类/分割/姿态),中间张量零搬运
-
工业级流媒体健壮性:自动重连 / 超时控制 / B 帧重排 / 抖动缓冲 / 故障隔离
-
Docker 一键部署,pt→engine 自动转换并与官方推理结果对齐验证
-
开箱即部署,声明式配置,简单易懂,易于扩展
| Open Source | Learning Curve | Developer Friendliness | Performance | Architecture Design | |
|---|---|---|---|---|---|
| DeepStream | ❌ | High | Low | High | Single-process, multi-threaded |
| VideoPipe | ✅ | Medium(requires cpp knowledge) | Medium(requires cpp knowledge) | Medium | Single-process, multi-threaded |
| Our | ✅ | ≈ 0 | High 🥰 | Medium | Multi-process, single-threaded |
配套视频:
本项目推荐 Docker 容器运行,首先确保本地环境满足以下三个条件:
- Docker >= 24.0.0
- NVIDIA Driver >= 590
- NVIDIA Container Toolkit >= 1.13.0
clone 本项目,生成包含完整开发环境的镜像
git clone https://github.com/lmk123568/PyVideoProc.git
cd PyVideoProc/docker
docker build -t pyvideoproc:cuda12.8 .镜像生成后,进入容器,不报错即成功
docker run -it \
--privileged \
--gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=all \
-v {your_path}/PyVideoProc:/workspace \
pyvideoproc:cuda12.8 \
bash后续示例代码默认在容器内/workspace运行
⚠️ 不推荐自己本地装环境,如果一定要自己装,请参考 Dockerfile
pip install .
# pip install -e . # 开发模式这里面包含了硬件编解码、YOLO26 推理优化的 C++ 实现,并通过 Pybind11 给 Python 调用
将通过 ultralytics 训练的pt模型导入到当前目录(/workspace)下(示例模型为 yolo26n.pt)
python pt2trt.py --w ./yolo26n.pt --fp16转换过程中会与 ultralytics 官方结果进行推理对齐
💡 TensorRT 编译生成 .engine 过程中,推理尺寸默认设置为
(576,1024),可以跳过letterbox降低计算开销
💡 遇到警告
requirements: Ultralytics requirement ['onnxruntime-gpu'] not found ...可以Ctrl + C跳过
开启 MPS(Multi-Process Service)
nvidia-cuda-mps-control -d
# echo quit | nvidia-cuda-mps-control 关闭 MPS阅读理解其代码并运行
python main.py测试日期: 2026-01-25
测试硬件: AMD Ryzen 9 5950 X + NVIDIA GeForce RTX 3090
测试任务: 4 × RTSP Decoders → YOLO26 (TensorRT) → 4 × RTMP Encoders
| CPU | RAM | GPU VRAM | GPU-Util | |
|---|---|---|---|---|
| VideoPipe(ffmpeg codec) | 511.6 % | 1.5 GiB | 2677 MiB | 16 % |
| Our | 40 % | 1.2GiB | 3932 MiB | 12 % |
多进程单批推理的架构缺点是吃显存,但换来的是天级交付周期、无需专业背景的维护门槛、天然的掉线隔离,以及可预期的故障排查路径
对于摄像头频繁掉线、网络不稳定、团队技术储备有限的现场环境,这个取舍比理论性能更优的方案更合适
🔥🔥🔥 RK3588 版本实现:PyVideoProc_RK3588
