最全、最新安装 Denseflow 教程,安装 CUDA11.8、12.4 支持的 OpenCV 4.X【MCPRL】

一、前言

        最近在做一个视频理解的项目,需要使用 MMaction 对 ActivityNet 进行抽帧。

        根据 MMaction/data/activitynet/ 下的 md 文件,看到需要提前安装 denseflow,而 denseflow 需要带 CUDA 版本的 OpenCV,反复装了很多次终于装好了。

        算是安装最长时间的环境(满打满算有五天,遭遇无数问题,根本上是版本兼容的问题),故在此记录。希望有帮助。

二、准备工作

        CUDA:11.8+ (个人尝试 11.8、12.4 均成功)

        CMake:3.29.0   没有的可以 sudo apt-get install cmake 安装

        gcc、g++:10.5.0   很重要(高版本可能会报错,但是低版本我没有尝试), 可采用这个                                                                                                                                                                            

方法进行 gcc、g++ 版本的切换:gcc/g++ 多版本之间切换_gcc 版本切换-优快云博客

        CUDNN:不是必须,如有需要,可以自行选择安装

三、正式安装

        写在前面:我是全程挂的代理,确保所有脚本、编译时需要的文件都被完整下载。否则可能导致xxx.i 文件缺失,这个可能需要自行百度。

        教程:我的安装时参考这个来的

                https://github.com/open-mmlab/denseflow/blob/master/INSTALL.md

        a、conda 创建虚拟环境并进入(python = 3.9.19)
conda create --name env_name python=3.9.19
conda activate env_name
       b、安装 OpenCV 所需的相关依赖
# find one dir, example: /baihuple/test
cd /baihuple/test

# ZZROOT is the root dir of all the installation
# you may put these lines into your `.bashrc` or `.zshrc`.
vim ~/.bashrc
export ZZROOT=$HOME/app
export PATH=$ZZROOT/bin:$PATH
export LD_LIBRARY_PATH=$ZZROOT/lib:$ZZROOT/lib64:$LD_LIBRARY_PATH
# wq! the file
source ~/.bashrc

# go back to the environment
conda activate env_name

# fetch install scripts
git clone https://github.com/innerlee/setup.git
cd setup

# opencv depends on ffmpeg for video decoding
# ffmpeg depends on nasm, yasm, libx264, libx265, libvpx
./zznasm.sh
./zzyasm.sh
./zzlibx264.sh
./zzlibx265.sh
./zzlibvpx.sh

# finally install ffmpeg
./zzffmpeg.sh
        c、安装 OpenCV4,使用 setup/zzopencv.sh 脚本【最关键部分,容易出错在 cmake

             注意:我在执行 zzopen.sh 经常报错,是它脚本里的 opencv、opencv_contrib 的版本太                                                                                                 老了,我采用的方法是在 github 上 opencv/opencv、opencv/opencv_contrib 直接拉取,下载到 ~/app/src 下。服务器配上梯子最好哦

# 切换到脚本本来解压下载的 tar 文件的目标文件夹
cd ~/app/src/

# 下载 opencv
git clone https://github.com/opencv/opencv.git

# 下载 opencv_contrib
git clone https://github.com/opencv/opencv_contrib.git

# back to the dir
cd /baihuple/test/setup

             在此之后,由于我们不用根据原脚本下载 tar 和解压,故需要对 zzopencv.sh 中的代码进行修改,下面直接贴修改后的代码。

# edited code for the zzopencv.sh
#!/bin/bash
# install opencv
set -e

ROOTDIR=${ZZROOT:-$HOME/app}

mkdir -p src/$NAME1
mkdir -p src/$NAME2

cd src/$NAME1
mkdir -p build
cd build

export PKG_CONFIG_PATH="$ROOTDIR"/lib/pkgconfig:$PKG_CONFIG_PATH

cmake \
    -DBUILD_EXAMPLES=OFF \
    -DWITH_QT=OFF \
    -DCUDA_GENERATION=Auto \
    -DOpenGL_GL_PREFERENCE=GLVND \
    -DBUILD_opencv_hdf=OFF \
    -DBUILD_PERF_TESTS=OFF \
    -DBUILD_TESTS=OFF \
    -DCMAKE_BUILD_TYPE=RELEASE \
    -DBUILD_opencv_cnn_3dobj=OFF \
    -DBUILD_opencv_dnn=OFF \
    -DBUILD_opencv_datasets=OFF \
    -DBUILD_opencv_aruco=OFF \
    -DBUILD_opencv_tracking=OFF \
    -DBUILD_opencv_text=OFF \
    -DBUILD_opencv_stereo=OFF \
    -DBUILD_opencv_saliency=OFF \
    -DBUILD_opencv_rgbd=OFF \
    -DBUILD_opencv_reg=OFF \
    -DBUILD_opencv_ovis=OFF \
    -DBUILD_opencv_matlab=OFF \
    -DBUILD_opencv_freetype=OFF \
    -DBUILD_opencv_dpm=OFF \
    -DBUILD_opencv_face=OFF \
    -DBUILD_opencv_dnn_superres=OFF \
    -DBUILD_opencv_dnn_objdetect=OFF \
    -DBUILD_opencv_bgsegm=OFF \
    -DBUILD_opencv_cvv=OFF \
    -DBUILD_opencv_ccalib=OFF \
    -DBUILD_opencv_bioinspired=OFF \
    -DBUILD_opencv_dnn_modern=OFF \
    -DBUILD_opencv_dnns_easily_fooled=OFF \
    -DBUILD_JAVA=OFF \
    -DBUILD_opencv_python2=OFF \
    -DBUILD_NEW_PYTHON_SUPPORT=ON \
    -DBUILD_opencv_python3=OFF \
    -DHAVE_opencv_python3=OFF \
    -DPYTHON_DEFAULT_EXECUTABLE="$(which python)" \
    -DWITH_OPENGL=ON \
    -DWITH_VTK=OFF \
    -DFORCE_VTK=OFF \
    -DWITH_TBB=ON \
    -DWITH_GDAL=ON \
    -DCUDA_FAST_MATH=ON \
    -DWITH_CUBLAS=ON \
    -DWITH_MKL=ON \
    -DMKL_USE_MULTITHREAD=ON \
    -DOPENCV_ENABLE_NONFREE=ON \
    -DWITH_CUDA=ON \
    -DNVCC_FLAGS_EXTRA="--default-stream per-thread" \
    -DWITH_NVCUVID=OFF \
    -DBUILD_opencv_cudacodec=OFF \
    -DMKL_WITH_TBB=ON \
    -DWITH_FFMPEG=ON \
    -DMKL_WITH_OPENMP=ON \
    -DWITH_XINE=ON \
    -DENABLE_PRECOMPILED_HEADERS=OFF \
    -DCMAKE_INSTALL_PREFIX="$ROOTDIR" \
    -DOPENCV_GENERATE_PKGCONFIG=ON \
    -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
    ..

make -j"$(nproc)" && make install

echo "$NAME1" installed on "$ROOTDIR"
echo add following line to .zshrc
echo export OpenCV_DIR="$ROOTDIR"

                修改后,直接执行该脚本 zzopencv.sh,编译正常就能看见进度条终于到达 100% 啦!如果你成功安装,那么恭喜你🎉🎉🎉,opencv 完全安装好了!

# install opencv 4.3.0
./zzopencv.sh

# you may put this line into your .bashrc
vim ~/.bashrc
export OpenCV_DIR=$ZZROOT
source ~/.bashrc

# back to env
conda activate my_env

                 配置 OpenCV 路径,以便后续查看 OpenCV 相关信息

# into ~/.bashrc
vim ~/.bashrc

# 添加下面在 ~/.bashrc 最后
# /path/to/opencv/lib/pkgconfig 里面有 opencv4.pc
# ~/app/lib/ 下
export PKG_CONFIG_PATH=/path/to/opencv/lib/pkgconfig:$PKG_CONFIG_PATH

# 生效,回到 my_env 环境
source ~/.bashrc
conda activate my_env

                通过下面命令,查看 OpenCV 安装信息,若有输出,则配置路径成功。

# check opencv4
pkg-config --libs opencv4
        d、 安装 Boost Libray、HDF5 Libary(Optional) 
# install boost
./zzboost.sh

# you may put this line into your .bashrc
vim ~/.bashrc
export BOOST_ROOT=$ZZROOT
source ~/.bashrc

conda activate my_env

# install hdf5
./zzhdf5.sh
         e、安装 Denseflow
# finally, install denseflow
./zzdenseflow.sh

                 安装完成后,出现如下界面,那么继续恭喜你,DenseFlow 完全安装好了,路径在 ~/app/src/denseflow 里面,相关生成的库文件在 ~/app/lib 中:

四、遭遇 Bug 记录

        1、在 ./zzopencv.sh 执行过程中,出现 Error Generating File 问题(最主要)

                原因:CUDA 版本、Opencv 版本、GCC、G++ 版本不匹配

                解决:参考我的配置情况,重新安装,完成后删除 ~/app/src 下的所有文件,从三b重                                            新执行后续步骤

        2、软链接找不到问题 libvpx、lib256

                原因:三b 前几行写入 ~/.bashrc 有问题

                解决:删除 ~/app/src 下的所有文件,三b开始重新执行

                命令:sudo ln -sf xxx xxx

        3、编译过程中缺失文件问题

                原因:从外网下载文件被墙了

                解决:配节点 or 问百度

        4、解释一下 zzopencv.sh 的 CMAKE 命令

                若编译 CUDA 版本的,相关参数一定要带上,网上有些教程没带 CUDA_ON 的,能够                                编译成功,但是到最后编译 denseflow 时,会报错缺少 cudaarith.hpp 文件等问题。

                CMAKE 命令及参数没问题,不要轻易更改。

五、总结

        刚上手项目,没想到卡在这卡了快一周,果真程序员最难的是配环境。不过只要坚持找问题,一定能够解决的。希望这篇博客能够帮助大家,欢迎评论区讨论!!

        

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值