0
点赞
收藏
分享

微信扫一扫

Deep Stream Ai落地--初体验

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 dockerdocker 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
,并由其插件来组建的流水线的过程
pipline

  • Gst-nvstreammux:
    用于从多个输入源形成一批缓冲区
  • Gst-nvdspreprocess:
    用于对预定义的 ROI 进行预处理以进行初级推理
  • Gst-nvinfer:
    基于TensorRT的推理引擎
  • Gst-nvtracker: 对象跟踪去重
  • Gst-nvmultistreamtiler:
    用于形成 2D 帧数据
  • Gst-nvdsosd:
    使用生成的元数据在合成帧上绘制阴影框、矩形和文本

有关graph Composer使用

安装中出现的问题可能在这里可以找到

借鉴思路

  • Pipline流水式
  • 组件式开发
  • 拖拽式编程,块状可视化(流程图中块可修改代码)
  • Pipline配置化
  • 使用kafka来提高吞吐量
举报

相关推荐

0 条评论