环境配置
目标
在uos环境部署图像检测程序。
通过opencv读取实时视频流解码成图片,通过TensorRT推理每一张图片的结果。保存告警图片与告警视频。
环境信息
- 系统版本:UnionTech OS Server 20
- 编译环境信息:cmake version 3.18.2;g++ (GCC) 8.5.0 20210514 (UnionTech 8.5.0-10.0.3);gcc (GCC) 8.5.0 20210514 (UnionTech 8.5.0-10.0.3)
- GPU: Tesla T4
- GPU驱动:520.61.05 (通过cuda安装文件一起安装的)
- cuda: 11.8(官网下载cuda_11.8.0_520.61.05_linux.run 直接安装驱动与cuda)
- cudnn:cudnn-linux-x86_64-9.2.0.82_cuda11-archive.tar.xz
- VideoCodec:Video_Codec_Interface_12.2.72.zip
- ffmpeg:ffmpeg-6.1.1.tar.xz opencv:4.10.0.zip
- TensorRT:TensorRT-10.2.0.19.Linux.x86_64-gnu.cuda-11.8.tar.gz
配置开发环境
基础开发依赖安装
cuda安装
直接在官网下载cuda_11.8.0_520.61.05_linux.run,执行安装即可。
如果安装驱动失败,需要先停止X service;停止方式: systemctl stop lightdm
安装cudnn
官网下载cudnn-linux-x86_64-9.2.0.82_cuda11-archive.tar.xz,解压到/usr/local目录下,配置环境变量
配置环境变量
export PATH=$PATH:/usr/local/cuda-11.8/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cudnn-linux-x86_64-9.2.0.82_cuda11-archive/lib
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/cudnn-linux-x86_64-9.2.0.82_cuda11-archive/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/cudnn-linux-x86_64-9.2.0.82_cuda11-archive/include
export CUDA_MODULE_LOADING=LAZY
export CUDA_HOME=/usr/local/cuda-11.8
export CPATH=/usr/local/cuda/targets/x86_64-linux/include
ffmpeg 源码安装
安装编解码依赖
让ffmpeg支持GPU硬件解码+支持h264 h265编解码格式。
fdk-aac
下载fdk-aac-2.0.0-3.el8.x86_64.rpm + fdk-aac-devel-2.0.0-3.el8.x86_64.rpm 离线安装包,通过rpm -ivh *.rpm --force --nodeps安装
x264
下载x264-0.164-6.20220602gitbaee400f.el8.x86_64.rpm + x264-devel-0.164-6.20220602gitbaee400f.el8.x86_64.rpm + x264-libs-0.164-6.20220602gitbaee400f.el8.x86_64.rpm 离线安装包,通过rpm -ivh *.rpm --force --nodeps安装
x265
下载x265-3.5-5.el8.x86_64.rpm + x265-libs-3.5-5.el8.x86_64.rpm + x265-devel-3.5-5.el8.x86_64.rpm 离线安装包,通过rpm -ivh *.rpm --force --nodeps安装
ffnvcodec
下载 nv-codec-headers 进入目录执行make 再执行make install 完成安装
配置环境变量:export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
源码安装
官网下载源码解压后执行
./configure --disable-asm --disable-x86asm --enable-parsers \
--enable-gpl --enable-libx264 --enable-libx265 --enable-nonfree --enable-libfdk-aac \
--enable-cuda --enable-cuvid --enable-nvenc \
--enable-nonfree --enable-libnpp \
--extra-cflags=-I/usr/local/cuda/include \
--extra-cflags=-fPIC \
--extra-ldflags=-L/usr/local/cuda/lib64 \
--enable-libfreetype --disable-debug \
--enable-shared --disable-static --disable-doc
再执行make 与 make install 进行安装
安装完成后配置环境变量:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
opencv 源码安装
去官网下载源码后解压
添加硬件编解码支持
添加cuda的NVCUVENC支持:修改cmake/OpenCVDetectCUDA.cmake 69行为
set(cuda_toolkit_dirs "${CUDA_TOOLKIT_TARGET_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}" "/usr/include" "/usr/local/include/ffnvcodec")
添加cuda中的NVCUVID支持:
下载Video_Codec_Interface_12.2.72,将头文件cuviddec.h+nvcuvid.h导入/usr/local/include目录下。
添加cudnn支持:cmake添加如下选项:(下一步提供cmake指令)
-D CUDNN_LIBRARY=/usr/local/cudnn-linux-x86_64-8.9.7.29_cuda11-archive/lib/libcudnn.so
开始编译安装
创建build目录 mkdir build && cd build
执行cmake指令
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D ENABLE_PRECOMPILED_HEADERS=OFF -D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=OFF \
-D WITH_TBB=ON -D BUILD_TBB=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 -D WITH_V4L=ON -D WITH_LIBV4L=ON -D WITH_CUDA=ON \
-D WITH_CUDNN=ON -D BUILD_opencv_cudacodec=ON \
-D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.8 \
-D cuda_toolkit_dirs=/usr/local/cuda-11.8/include:/usr/local/include:/usr/local/include/ffnvcodec \
-D CUDNN_INCLUDE_DIR=/usr/local/cudnn-linux-x86_64-8.9.7.29_cuda11-archive/include \
-D WITH_NVCUVID=ON -D CUDA_ARCH_BIN=7.5 -D WITH_GTK_2_X=ON -D \
WITH_OPENGL=ON -D WITH_FFMPEG=ON -DOPENCV_DOWNLOAD_MIRROR_ID=gitcode \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..
执行编译安装: make 与 make install
TensorRT 安装
解压TensorRT安装包到/usr/local目录下。
配置环境变量
export PATH=$PATH:/usr/local/TensorRT-10.2.0.19/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/TensorRT-10.2.0.19/targets/x86_64-linux-gnu/lib
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/TensorRT-10.2.0.19/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/TensorRT-10.2.0.19/include