DeepStream4.0系列之环境配置安装

点击查看系列文章目录

0 背景

什么是DeepStream?NVIDIA的DeepStream SDK为基于AI的视频和图像理解以及多传感器处理提供了完整的流分析工具包。DeepStream还提供了为用户创建的库和功能构建自定义插件的功能。许多开源插件之一也可以很容易地与DeepStream框架配合使用。这些插件包括:

  • H.264和H.265视频解码
  • 流聚合和批处理
  • 基于TensorRT的推理以进行检测,分类和分割
  • 目标跟踪
  • JPEG解码
  • 屏幕显示API,用于突出显示对象和文本覆盖
  • 从多源帧渲染到2D网格阵列
  • 基于X11 / EGL的加速渲染
  • 缩放,格式转换和旋转
  • 对360度摄像机输入进行变形
  • 元数据生成和编码
  • 传送到云端

总的来说:deepstream提供了一个完整的视频开发应用框架,使开发者能够更加专注于自己的应用和网络,详细信息可参考官网介绍

1 运行环境

官网提供的平台支持如下(这里不介绍jetson相关内容,因为jetpack已经默认安装好deepstream)

在正式安装之前,先卸载掉之前安装过的残留,如果从来没装过,可以跳过这步

sudo rm -rf /usr/local/deepstream /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstnv* /usr/bin/deepstream* /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libnvdsgst* /usr/lib/x86_64-linux-gnu/gstreamer-1.0/deepstream* /opt/nvidia/deepstream/deepstream* /usr/lib/x86_64-linux-gnu/libv41/plugins/libcuvidv4l2_plugin.so

安装依赖

sudo apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio libgstrtspserver-1.0-dev gstreamer1.0-rtsp libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libx11-dev libjson-glib-dev libssl1.0.0  libgstrtspserver-1.0-0 libjansson4

安装完之后查看 gstreamer 版本

$ gst-inspect-1.0 --version
gst-inspect-1.0 version 1.14.5
GStreamer 1.14.5
https://launchpad.net/distros/ubuntu/+source/gstreamer1.0

另外可通过如下指令查看安装的 gstreamer 插件包有哪些

$ sudo apt-cache search -n gstreamer1.0-plugins
gstreamer1.0-plugins-base - GStreamer plugins from the "base" set
gstreamer1.0-plugins-base-apps - GStreamer helper programs from the "base" set
gstreamer1.0-plugins-base-dbg - GStreamer plugins from the "base" set
gstreamer1.0-plugins-base-doc - GStreamer documentation for plugins from the "base" set
gstreamer1.0-plugins-good - GStreamer plugins from the "good" set
gstreamer1.0-plugins-good-doc - GStreamer documentation for plugins from the "good" set
gstreamer1.0-plugins-bad - GStreamer plugins from the "bad" set
gstreamer1.0-plugins-bad-dbg - GStreamer plugins from the "bad" set (debug symbols)
gstreamer1.0-plugins-bad-doc - GStreamer documentation for plugins from the "bad" set
gstreamer1.0-plugins-good-dbg - GStreamer plugins from the "good" set
gstreamer1.0-plugins-ugly - GStreamer plugins from the "ugly" set
gstreamer1.0-plugins-ugly-dbg - GStreamer plugins from the "ugly" set (debug symbols)
gstreamer1.0-plugins-ugly-doc - GStreamer documentation for plugins from the "ugly" set

2 环境配置

2.1 CUDA安装

注意:如果是新安装了系统,需要先安装显卡驱动,再安装cuda和cudnn

官网链接下载10.1版本的CUDA,具体安装和切换方法可参考《Linux之cuda、cudnn版本切换

安装完之后要安装对应的cudnn,我这里下载安装的是7.5.0版本的

2.2 tensorrt安装

官网下载tensort6.0.1版本,具体安装方法可参考《TensorRT安装及使用教程

为了避免后边deepstream找不到tensorrt的库,建议把tensorrt的库和头文件添加到系统路径下

# TensorRT-6.0.1.5路径下
sudo cp -r ./lib/* /usr/lib
sudo cp -r ./include/* /usr/include

2.3 librdkafka安装

该库是为了使用kafka消息队列

$ git clone https://github.com/edenhill/librdkafka.git
$ cd librdkafka
$ git reset --hard 7101c2310341ab3f4675fc565f64f0967e135a6a
./configure --install-deps
$ make
$ sudo make install

安装完之后将相关库拷贝到deepstream的库中

$ sudo mkdir -p /opt/nvidia/deepstream/deepstream-4.0/lib 
$ sudo cp /usr/local/lib/librdkafka* /opt/nvidia/deepstream/deepstream-4.0/lib

2.4 OpenCV安装

使用源码安装opencv,注意要带cuda和gstreamer,这一步容易出现问题,将一些关键步骤做些说明,按照下边指令安装

mkdir opencv
cd opencv
wget https://github.com/opencv/opencv/archive/3.3.1.zip -O opencv-3.3.1.zip
unzip opencv-3.3.1.zip
wget https://github.com/opencv/opencv_contrib/archive/3.3.1.zip -O opencv_contrib-3.3.1.zip
unzip opencv_contrib-3.3.1.zip 
cd opencv-3.3.1
mkdir build && cd build

执行cmake如下(标红的地方要根据自己的情况修改)

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr -D BUILD_PNG=OFF -D BUILD_TIFF=OFF -D BUILD_TBB=OFF -D BUILD_JPEG=OFF  -D BUILD_JASPER=OFF -D BUILD_ZLIB=OFF -D BUILD_EXAMPLES=OFF -D BUILD_opencv_java=OFF -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D ENABLE_PRECOMPILED_HEADERS=OFF -D WITH_OPENCL=OFF -D WITH_OPENMP=OFF -D WITH_FFMPEG=ON -D WITH_GSTREAMER=ON -D WITH_CUDA=ON -D WITH_GTK=ON -D WITH_VTK=ON -D WITH_TBB=ON -D WITH_1394=OFF -D WITH_OPENEXR=OFF -D OPENCV_EXTRA_MODULES_PATH=/home/nvidia/opencv/opencv_contrib-3.3.1/modules  -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.1 -D CUDA_ARCH_BIN=7.5 -D INSTALL_C_EXAMPLES=OFF  -D INSTALL_TESTS=OFF ..

修改CUDA_ARCH_BIN的方法《Linux之获得NVIDIA显卡GPU_ARCHS方法

如果执行cmake的时候报错,查看下边问题描述能否解决,成功后执行安装

make -j8  # 四核八线程
sudo make install 

 如果要卸载旧版本的opencv,则在build文件夹中执行sudo make uninstall即可

 安装完之后使用下边的指令查看安装情况

pkg-config --modversion opencv
pkg-config --cflags --libs opencv

 如果你安装完opencv4但上边的命令找不到,把opencv换成opencv4就可以了

pkg-config --modversion opencv4
pkg-config --cflags --libs opencv4

如果都没有,参考《Package opencv was not found in the pkg-config search path》修改 

那么安装以后如何查看完整的安装和支持信息呢?可以在 python 中导入 cv2 后,执行 cv2.getBuildInformation() 函数获得

2.4.1 dynlink_nvcuvid.h问题

cuda10不再提供dynlink_nvcuvid.h功能,修改opencv-3.3.1/modules/cudacodec/src目录下的文件

modules/cudacodec/src/precomp.hpp

modules/cudacodec/src/video_decoder.hpp

modules/cudacodec/src/video_parser.hpp

modules/cudacodec/src/cuvid_video_source.hpp

modules/cudacodec/src/frame_queue.hpp

找到下边的代码

#if CUDA_VERSION >= 9000
#include <dynlink_nvcuvid.h>
#else
#include <nvcuvid.h>
#endif

替换为

#if CUDA_VERSION >= 9000 && CUDA_VERSION < 10000
#include <dynlink_nvcuvid.h>
#else
#include <nvcuvid.h>
#endif

如果改完还报错的话,需要下载 nvidia-sdk,下载链接

下载解压后将其中的 nvcuvid.h, cuviddec.h copy 到 /usr/local/cuda/include

然后重新make即可

2.4.2 ippicv_2017u3_lnx_intel64_general_20170822.tgz下载慢问题

可以找到下载链接手动下载

查看build目录下的CmakeDownloadLog.txt,里边记录了下载地址,我这里的路径是

use_cache "/home/nvidia/opencv_3.3.1/opencv-3.3.1/.cache"
do_unpack "ippicv_2017u3_lnx_intel64_general_20170822.tgz" "4e0352ce96473837b1d671ce87f17359" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/dfe3162c237af211e98b8960018b564bc209261d/ippicv/ippicv_2017u3_lnx_intel64_general_20170822.tgz" "/home/nvidia/opencv_3.3.1/opencv-3.3.1/build/3rdparty/ippicv"
#check_md5 "/home/nvidia/opencv_3.3.1/opencv-3.3.1/.cache/ippicv/4e0352ce96473837b1d671ce87f17359-ippicv_2017u3_lnx_intel64_general_20170822.tgz"

可以看到是把这个文件下载到/home/nvidia/opencv_3.3.1/opencv-3.3.1/.cache/ippicv/下,并命名为4e0352ce96473837b1d671ce87f17359-ippicv_2017u3_lnx_intel64_general_20170822.tgz,我们只需要把手动下载的文件然后复制到该路径下即可

2.4.3 cblas_xxx问题

如果出现编译问题“undefined reference to `cblas_sgemm(CBLAS_ORDER, CBLAS_TRANSPOSE, CBLAS_TRANSPOSE, int, int, int, float, float const, int, float const, int, float, float*, int)'”

可能需要重新编译BLAS,CBLAS,LPACK,参考链接《blas、lapack、cblas在Ubuntu上的安装

2.4.4 boostdesc_bgm.i等问题

在opencv_contrib目录中报错fatal error: boostdesc_bgm.i: No such file or directory

这个跟2.4.2类似,是有些包下载不成功导致的,可以直接下载我下载好的资源,拷贝到opencv_contrib/modules/xfeatures2d/src/ 路径下,重新编译即可

2.4.5 多版本问题

如果之前安装过其它版本没有卸载,可以采用《Ubuntu下多个版本OpenCV管理(Multiple Opencv version)》来指定编译时用到的opencv版本

2.4.6 opencv2/xfeatures2d/cuda.hpp问题

修改/opencv-3.4.0/modules/stitching/CMakeLists.txt文件,在开头增加下边内容,然后重新cmake和make

INCLUDE_DIRECTORIES("/<your location>/opencv_contrib-3.4.0/modules/xfeatures2d/include") 

如果修改后还报错,则找到报错的文件,将头文件改成绝对路径 

2.4.7"xxxx/test_detectors_invariance.impl.hpp"问题

一般是说在features2d/test目录下没有XXX.hpp什么的,处理方式是将opencv-3.3.1/modules/features2d/test该目录下对于的缺少文件复制到opencv_contrib-3.3.1/modules/xfeatures2d/test该目录下,然后修改报错的文件的#include,将前面的地址删除,就让其在本地找

例如 :报错说在文件test_rotation_and_scale_invariance.cpp中找不到#include "xxxx/test_detectors_invariance.impl.hpp",那么就在opencv-3.3.1/modules/features2d/test下去找test_detectors_invariance.impl.hpp文件,将其复制到opencv_contrib-3.3.1/modules/xfeatures2d/test目录,然后打开test_rotation_and_scale_invariance.cpp文件,修改#include "xxxx/test_detectors_invariance.impl.hpp"为#include "test_detectors_invariance.impl.hpp"即可

如果觉得难得每个文件去找,那么干脆将目录中的所有文件复制过去,之后就该对于报错文件的#include位置就好了。

2.5 SDK安装

官网有两种方式安装SDK,一种是使用deb包安装,一种是直接下载压缩包安装,我们选择第二种压缩包的方式,下载tar压缩包

$ tar -xpvf deepstream_sdk_v4.0.2_x86_64.tbz2
$ cd deepstream_sdk_v4.0.2_x86_64
$ sudo tar -xvpf binaries.tbz2 -C /
$ sudo ./install.sh
$ sudo ldconfig

3 简单测试

经过上述步骤安装完后,可以运行示例测试下,在路径samples/configs/deepstream-app/下面运行

deepstream-app -c source30_1080p_dec_infer-resnet_tiled_display_int8.txt

如果报错

** ERROR: <create_multi_source_bin:714>: Failed to create element 'src_bin_muxer'
** ERROR: <create_multi_source_bin:777>: create_multi_source_bin failed
** ERROR: <create_pipeline:1045>: create_pipeline failed
** ERROR: <main:632>: Failed to create pipeline
Quitting
App run failed

则是因为gstreamer缓存问题,运行下边指令删除即可

rm ${HOME}/.cache/gstreamer-1.0/registry.*

运行成功后,会显示检测画面。

如果是在服务器上运行,没有显示界面的话会报错如下

No EGL Display 
nvbufsurftransform: Could not get EGL display connection

需要修改环境变量,如下

vim ~/.bashrc

#打开后在最后边加下边语句
unset DISPLAY
export DISPLAY=:0 
#或者 export DISPLAY=:1

#保存退出
source ~/.bashrc
rm ${HOME}/.cache/gstreamer-1.0/registry.*

#然后再运行
deepstream-app -c source30_1080p_dec_infer-resnet_tiled_display_int8.txt

4 问题汇总

4.1 nvbufsurftransform:cuInit failed : 804 问题

该问题是由于运行的显卡不支持,需要在 T4 等显卡上才可以

 

常见问题汇总

官方论坛

============2121.4.16更新================

docker 安装指令

sudo docker run --gpus "device=1" -it --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -w /opt/nvidia/deepstream/deepstream-4.0 nvcr.io/nvidia/deepstream:4.0.2-19.12-samples

 

相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页