PyVideoProc

lmk123568BSD-2-Clause活跃维护

用 Python 把多路视频流、多个模型和多块 GPU 串起来做实时视频分析,底层靠 CUDA、TensorRT 和 DeepStream 加速,适合搭建高吞吐的视觉推理流水线。

🚀 Multi-Stream, Multi-Model, Multi-GPU Video Processing in Python with CUDA

暂无版本245star9fork同步于 2026-11-10 06:06 UTC

怎么上手

由 README 提炼,执行前请确认
git clone https://github.com/lmk123568/PyVideoProc.git
cd PyVideoProc/docker
docker build -t pyvideoproc:cuda12.8 .
pip install .
硬件要求按 README 说明

需 NVIDIA GPU 与 CUDA 12.8 环境,README 未给出具体显存下限;Benchmark 中 4 路 RTSP 解码加推理编码占用约 3932 MiB 显存。推荐用 Docker 运行,要求 NVIDIA Driver >= 590、NVIDIA Container Toolkit >= 1.13.0。

需要 CUDA多卡 / 张量并行有 Docker 镜像
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

纯 Python 实现的多路多卡多模型视频解码推理跟踪框架,绕过 GIL 降低开发复杂度

用 Python 把多路视频流、多个模型和多块 GPU 串起来做实时视频分析,底层靠 CUDA、TensorRT 和 DeepStream 加速,适合搭建高吞吐的视觉推理流水线。

核心能力

  • 多进程 + CUDA MPS 架构绕过 GIL,CPU 占用低
  • NVDEC 到 TensorRT 全链路显存零拷贝,仅回传检测框
  • batch=1 保延迟,进程数×MPS 换吞吐,近线性扩展
  • 多模型 GPU 级联检测分类分割姿态,中间张量不搬运
  • 流媒体自动重连、超时控制、B 帧重排与故障隔离

容易踩的坑

不推荐本地自装环境,官方推荐 Docker,自装需参考 Dockerfile;运行前需先执行 nvidia-cuda-mps-control -d 开启 MPS;需先用 pt2trt.py 把 ultralytics 的 pt 模型转成 TensorRT engine,转换时可能提示缺少 onnxruntime-gpu 可 Ctrl+C 跳过。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

0 个版本

暂无 release 数据(可能没有发版,或尚未同步)。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    用 Python 在 CUDA 上高效实现多路、多卡、多模型的视频流解码推理跟踪分析,并显著降低开发复杂度

    Effortless multi-stream, multi-GPU, multi-model video analytics on CUDA — decode, infer, track, and analyze in pure Python.

    https://github.com/user-attachments/assets/402f9080-004e-457e-8d36-3fefdb56f21d

    核心特性:

    • 多进程 + CUDA MPS 架构,彻底绕过 GIL,CPU 占用极低

    • 帧级零拷贝:NVDEC → CUDA Surface → TensorRT 全链路驻留显存,仅检测框结果回传 CPU

    • 单批推理(batch=1)保延迟,进程数 × MPS 换吞吐,多路并发近线性扩展

    • 多模型 GPU 级联(检测/分类/分割/姿态),中间张量零搬运

    • 工业级流媒体健壮性:自动重连 / 超时控制 / B 帧重排 / 抖动缓冲 / 故障隔离

    • Docker 一键部署,pt→engine 自动转换并与官方推理结果对齐验证

    • 开箱即部署,声明式配置,简单易懂,易于扩展

    Open SourceLearning CurveDeveloper FriendlinessPerformanceArchitecture Design
    DeepStream❌HighLowHighSingle-process, multi-threaded
    VideoPipe✅Medium(requires cpp knowledge)Medium(requires cpp knowledge)MediumSingle-process, multi-threaded
    Our✅≈ 0High 🥰MediumMulti-process, single-threaded

    配套视频:

    Bilibili YouTube

    Quick Start

    本项目推荐 Docker 容器运行,首先确保本地环境满足以下三个条件:

    • Docker >= 24.0.0
    • NVIDIA Driver >= 590
    • NVIDIA Container Toolkit >= 1.13.0

    1. 生成镜像

    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

    2. 编译加速包

    pip install .
    # pip install -e .  # 开发模式
    

    这里面包含了硬件编解码、YOLO26 推理优化的 C++ 实现,并通过 Pybind11 给 Python 调用

    3. 训练模型权重转换

    将通过 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 跳过

    4. 运行

    开启 MPS(Multi-Process Service)

    nvidia-cuda-mps-control -d
    # echo quit | nvidia-cuda-mps-control  关闭 MPS
    

    阅读理解其代码并运行

    python main.py
    

    Benchmark

    测试日期: 2026-01-25

    测试硬件: AMD Ryzen 9 5950 X + NVIDIA GeForce RTX 3090

    测试任务: 4 × RTSP Decoders → YOLO26 (TensorRT) → 4 × RTMP Encoders

    CPURAMGPU VRAMGPU-Util
    VideoPipe(ffmpeg codec)511.6 %1.5 GiB2677 MiB16 %
    Our40 %1.2GiB3932 MiB12 %

    Architecture

    多进程单批推理的架构缺点是吃显存,但换来的是天级交付周期、无需专业背景的维护门槛、天然的掉线隔离,以及可预期的故障排查路径

    对于摄像头频繁掉线、网络不稳定、团队技术储备有限的现场环境,这个取舍比理论性能更优的方案更合适

    🔥🔥🔥 RK3588 版本实现:PyVideoProc_RK3588

    License

    BSD-2-Clause