Deep Stream
解决问题
- 快速开发Ai技能
- 快速部署Ai服务
- 提供本地部署
- 提供边端设备部署
- 提供远端部署
- 高吞吐量
主要特点
- 具有统一规范的sdk
- 基于多传感器,音频,视频,图像整套的流分析工具
- 具有基于graph composer拖拽式的低代码编程
- 支持云原声k8s编排
- 适用视觉Ai场景
- 高吞吐量
整体流分析过程
-
应用架构
-
流程开发
-
低代码构建
安装
安装必要的依赖
[~]# apt install \
libssl1.0.0 \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstrtspserver-1.0-0 \
libjansson4 \
gcc \
make \
git \
python3
nvidia驱动安装
- 下载:https://www.nvidia.com/Download/driverResults.aspx/179599/en-us
cuda toolkit 安装
- 下载:https://developer.nvidia.com/cuda-11-4-1-download-archive
deep stream 安装
- 下载gpu版本(需要账号):https://developer.nvidia.com/deepstream-getting-started
$ sudo tar -xvf deepstream_sdk_v6.0.0_x86_64.tbz2 -C /
$ cd /opt/nvidia/deepstream/deepstream-6.0/
$ sudo ./install.sh
$ sudo ldconfig
- ./samples目录是参考示例
docker运行实例
- 基于gpu
说明 | 拉取命令 |
---|---|
基础 docker(仅包含运行时库和 GStreamer 插件。可用作为 DeepStream 应用程序构建自定义 docker 的基础) | docker pull nvcr.io/nvidia/deepstream:6.0-base |
devel docker(包含整个 SDK 以及用于构建 DeepStream 应用程序和图形编辑器的开发环境 | docker pull nvcr.io/nvidia/deepstream:6.0-devel |
安装了 Triton 推理服务器和依赖项的 Triton 推理服务器 docker 以及用于构建 DeepStream 应用程序的开发环境 | docker pull nvcr.io/nvidia/deepstream:6.0-triton |
安装了 deepstream-test5-app 并删除了所有其他参考应用程序的 DeepStream IoT docker | docker pull nvcr.io/nvidia/deepstream:6.0-iot |
DeepStream 示例 docker(包含运行时库、GStreamer 插件、参考应用程序和示例流、模型和配置) | docker pull nvcr.io/nvidia/deepstream:6.0-samples |
- 以下为镜像构建的dockerfile参考样例,允许用户自定义镜像
# Set CUDA_VERSION, example: 11.4.1
ARG CUDA_VERSION
# Use CUDAGL base devel docker
FROM nvcr.io/nvidia/cudagl:${CUDA_VERSION}-devel-ubuntu18.04
# Set TENSORRT_VERSION, example: 8.0.1-1+cuda11.4
ARG TENSORRT_VERSION
# Set CUDNN_VERSION, example: 8.2.1.32-1+cuda11.4
ARG CUDNN_VERSION
# Install dependencies
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
linux-libc-dev \
libglew2.0 libssl1.0.0 libjpeg8 libjson-glib-1.0-0 \
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-tools gstreamer1.0-libav \
gstreamer1.0-alsa \
libcurl3 \
libcurl3-gnutls \
libuuid1 \
libjansson4 \
libjansson-dev \
librabbitmq4 \
libgles2-mesa \
libgstrtspserver-1.0-0 \
libv4l-dev \
gdb bash-completion libboost-dev \
uuid-dev libgstrtspserver-1.0-0 libgstrtspserver-1.0-0-dbg libgstrtspserver-1.0-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libglew-dev \
libssl-dev \
libopencv-dev \
freeglut3-dev \
libjpeg-dev \
libcurl4-gnutls-dev \
libjson-glib-dev \
libboost-dev \
librabbitmq-dev \
libgles2-mesa-dev libgtk-3-dev libgdk3.0-cil-dev \
pkg-config \
libxau-dev \
libxdmcp-dev \
libxcb1-dev \
libxext-dev \
libx11-dev \
git \
rsyslog \
vim \
gstreamer1.0-rtsp \
libcudnn8=${CUDNN_VERSION} \
libcudnn8-dev=${CUDNN_VERSION} \
libnvinfer8=${TENSORRT_VERSION} \
libnvinfer-dev=${TENSORRT_VERSION} \
libnvparsers8=${TENSORRT_VERSION} \
libnvparsers-dev=${TENSORRT_VERSION} \
libnvonnxparsers8=${TENSORRT_VERSION} \
libnvonnxparsers-dev=${TENSORRT_VERSION} \
libnvinfer-plugin8=${TENSORRT_VERSION} \
libnvinfer-plugin-dev=${TENSORRT_VERSION} \
python-libnvinfer=${TENSORRT_VERSION} \
python3-libnvinfer=${TENSORRT_VERSION} \
python-libnvinfer-dev=${TENSORRT_VERSION} \
python3-libnvinfer-dev=${TENSORRT_VERSION} && \
rm -rf /var/lib/apt/lists/* && \
apt autoremove
# Install DeepStreamSDK using debian package. DeepStream tar package can also be installed in a similar manner
ADD deepstream-6.0_6.0.0-1_amd64.deb /root
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
/root/deepstream-6.0_6.0.0-1_amd64.deb
WORKDIR /opt/nvidia/deepstream/deepstream
RUN ln -s /usr/lib/x86_64-linux-gnu/libnvcuvid.so.1 /usr/lib/x86_64-linux-gnu/libnvcuvid.so
RUN ln -s /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so
deepstream-python-app
- 使用镜像测试
$ docker pull nvcr.io/nvidia/deepstream:6.0-samples
- 环境安装
apt-get install -y python-gi-dev
apt install -y python3-gst-1.0
apt install -y python3-pip
pip3 install pyds -i https://pypi.tuna.tsinghua.edu.cn/simple
- 拉取代码包
git clone https://github.com/NVIDIA-AI-IOT/deepstream_python_apps.git
- 运行代码
$ cd /opt/nvidia/deepstream/deepstream-6.0/deepstream_python_apps/apps/deepstream-test1
$ python3 deepstream_test_1.py /opt/nvidia/deepstream/deepstream-6.0/samples/streams/sample_720p.jpg
Creating Pipeline
Creating Source
Creating H264Parser
Creating Decoder
Unable to create NvStreamMux
Unable to create pgie
Unable to create nvvidconv
Creating EGLSink
Playing file /opt/nvidia/deepstream/deepstream-6.0/samples/streams/sample_720p.jpg
Traceback (most recent call last):
File "deepstream_test_1.py", line 261, in <module>
sys.exit(main(sys.argv))
File "deepstream_test_1.py", line 194, in main
streammux.set_property('width', 1920)
AttributeError: 'NoneType' object has no attribute 'set_property'
此bug还未解决
- 样例说明
名称 | 说明 |
---|---|
deepstream-imagedata-multistream | |
deepstream-imagedata-multistream-redaction | |
deepstream-nvdsanalytics | |
deepstream-opticalflow | |
deepstream-rtsp-in-rtsp-out | |
deepstream-segmentation | |
deepstream-ssd-parser | |
deepstream-test1 | 如何将 DeepStream 元素用于单个 H.264 流的简单示例:filesrc → decode → nvstreammux → nvinfer (primary detection) → nvdsosd → renderer |
deepstream-test1-rtsp-out | |
deepstream-test1-usbcam | |
deepstream-test2 | 如何将 DeepStream 元素用于单个 H.264 流的简单示例:filesrc → decode → nvstreammux → nvinfer(主检测器) → nvtracker → nvinfer(二级分类器) → nvdsosd → 渲染器 |
deepstream-test3 | |
deepstream-test4 | |
runtime_source_add_delete |
Deep Stream Pipline 架构设计
Deep Stream 是一个基于GStreamer
,并由其插件来组建的流水线的过程
- Gst-nvstreammux:
用于从多个输入源形成一批缓冲区 - Gst-nvdspreprocess:
用于对预定义的 ROI 进行预处理以进行初级推理 - Gst-nvinfer:
基于TensorRT的推理引擎 - Gst-nvtracker: 对象跟踪去重
- Gst-nvmultistreamtiler:
用于形成 2D 帧数据 - Gst-nvdsosd:
使用生成的元数据在合成帧上绘制阴影框、矩形和文本
有关graph Composer使用
安装中出现的问题可能在这里可以找到
借鉴思路
- Pipline流水式
- 组件式开发
- 拖拽式编程,块状可视化(流程图中块可修改代码)
- Pipline配置化
- 使用kafka来提高吞吐量
- …