Ubuntu20.04源码安装Opencv,保姆级教程少走90%的弯路

2023-09-21 14:09:22
/
0 点赞
/
94 阅读
2023-09-21

前言

正文

decord NVIDIA视频硬解码库

最小依赖

sudo apt update 
sudo apt install -y cmake g++ wget unzip   
sudo apt-get install build-essential pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev

其他依赖

# 2. INSTALL THE DEPENDENCIES

# Build tools:
sudo apt-get install -y build-essential cmake

# GUI (if you want GTK, change 'qt5-default' to 'libgtkglext1-dev' and remove '-DWITH_QT=ON'):
sudo apt-get install -y qt5-default libvtk6-dev

# Media I/O:
sudo apt-get install -y zlib1g-dev libjpeg-dev libwebp-dev libpng-dev libtiff5-dev libjasper-dev \
                        libopenexr-dev libgdal-dev

# Video I/O:
sudo apt-get install -y libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev \
                        libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev yasm \
                        libopencore-amrnb-dev libopencore-amrwb-dev libv4l-dev libxine2-dev

# Parallelism and linear algebra libraries:
sudo apt-get install -y libtbb-dev libeigen3-dev

# Python:
sudo apt-get install -y python-dev  python-tk  pylint  python-numpy  \
                        python3-dev python3-tk pylint3 python3-numpy flake8

# Java:
sudo apt-get install -y ant default-jdk

# Documentation and other:
sudo apt-get install -y doxygen unzip wget

下载源码

下载opencv源码

git clone -b 4.9.0 https://github.com/opencv/opencv.git

下载opencv_contrib源码

cd opencv
git clone -b 4.9.0 https://github.com/opencv/opencv_contrib.git

编译

mkdir build
cd  build
# cmake ..

cmake命令

cmake -D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
-D CMAKE_INSTALL_PREFIX=~/software/opencv \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CUDNN_LIBRARY="/home/ai/dyb/cudnn-linux-x86_64-8.8.0.121_cuda12-archive/lib/libcudnn.so" \
-D CUDNN_INCLUDE_DIR="/home/ai/dyb/cudnn-linux-x86_64-8.8.0.121_cuda12-archive/include/cudnn.h" \
-D CUDA_ARCH_BIN=12.0 \
-D CUDNN_VERSION=8.8.0 \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_GTK_2_X=ON \
-D WITH_CUDA=ON \
-D CUDA_GENERATION=Auto \
-D WITH_CUBLAS=1  \
-D WITH_GTK=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_FFMPEG=ON \
-D OPENCV_GENERATE_PKGCONFIG=1 \
-D BUILD_opencv_cudacodec=ON \
-D WITH_QT=OFF \
-D WITH_GSTREAMER=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D WITH_NVCUVID=ON ..
cmake -D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
-D CMAKE_INSTALL_PREFIX=~/software/opencv \
-D CMAKE_BUILD_TYPE=RELEASE \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_GTK_2_X=ON \
-D WITH_CUDA=ON \
-D CUDA_GENERATION=Auto \
-D WITH_CUBLAS=1  \
-D WITH_GTK=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_FFMPEG=ON \
-D OPENCV_GENERATE_PKGCONFIG=1 \
-D BUILD_opencv_cudacodec=ON \
-D WITH_QT=OFF \
-D WITH_GSTREAMER=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D WITH_NVCUVID=ON .. \
-D CUDA_nvcuvid_LIBRARY=/home/ai/dyb/Video_Codec_SDK_12.0.16/Lib/linux/stubs/x86_64/libnvcuvid.so \
-D PYTHON3_EXECUTABLE=$(which python) \
-D BUILD_opencv_python3=ON \
-D PYTHON3_LIBRARY=/home/ai/anaconda3/pkgs/python-3.8.19-h955ad1f_0/lib/ \
-D PYTHON3_INCLUDE_DIR=/home/ai/anaconda3/envs/py38/include/python3.8/ \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/ai/anaconda3/envs/py38/lib/python3.8/site-packages/numpy/core/include/ \
-D PYTHON3_PACKAGES_PATH=/home/ai/anaconda3/envs/py38/lib/python3.8/site-packages ..

注意:如果编译出来的Opencv不支持视频编解码,一般是FFmpeg没有成功安装,最终输出的信息因该是包含下面这样

--   Video I/O:
--     DC1394:                      YES (2.2.5)
--     FFMPEG:                      YES
--       avcodec:                   YES (58.54.100)
--       avformat:                  YES (58.29.100)
--       avutil:                    YES (56.31.100)
--       swscale:                   YES (5.5.100)
--       avresample:                YES (4.0.0)
--     GStreamer:                   YES (1.16.3)
--     v4l/v4l2:                    YES (linux/videodev2.h)

编译,-j后面是cpu核心数,加快编译速度

make -j24
make install

然后就是漫长的等待,根据cpu核心数不同,等待时间不同,我电脑编译大概需要10分钟

常见错误

DNN: CUDA backend requires cuDNN. Please resolve dependency or disable

Could NOT find CUDNN: Found unsuitable version “…”, but required is at least “7.5”

遇到这个错误,安装cudnn或则设置OPENCV_DNN_CUDA=OFF,这个错误有可能是因为新版的cudnn已经把版本信息放到文件cudnn_version.h中,尝试修改cmake/FindCUDNN.cmake


下载地址:cudnn-download

如果错误没有解决,可尝试使用

sudo cp cudnn/include/* /usr/local/cuda-12.0/include/
sudo cp cudnn/lib/* /usr/local/cuda-12.0/lib64/

install Video_Codec_SDK_11.1.5.zip

https://blog.csdn.net/u014248312/article/details/127307407?ydreferer=aHR0cHM6Ly9jbi5iaW5nLmNvbS8%3D
sudo cp /Video_Codec_SDK_11.1.5/Interface/* /usr/local/cuda/include/
sudo cp /Video_Codec_SDK_11.1.5/Lib/linux/stubs/x86_64/* /usr/local/cuda/lib64/

Video_Codec_SDK

没有检测到视频Video_Codec_SDK,原来是版本不对,机器上安装的cuda 10.2,最新的SDK不匹配

下载历史版本: Video Codec SDK Archive | NVIDIA Developer

下载: Video_Codec_SDK_10.0.26.zip

cp ../data/Video_Codec_SDK_10.0.26/Interface/*.h /usr/local/cuda/include/
cp ../data/Video_Codec_SDK_10.0.26/Lib/linux/stubs/aarch64/*.so /usr/local/cuda/lib64/

GLIBCXX_3.4.29

undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29’

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

sudo add-apt-repository ppa:ubuntu-toolchain-r/test # Ignore if not ubuntu
sudo apt-get update
sudo apt-get upgrade libstdc++6

python使用实例

import cv2
def main(file_path):
    cv2.namedWindow("GPU", cv2.WINDOW_OPENGL)
    cap = cv2.cudacodec.createVideoReader(file_path) 
    while True:
        ret, frame = cap.nextFrame()
        if ret is False:
            break
        cv2.imshow('image', frame)
        cv2.waitKey(1)
    cap.release()
if __name__ == '__main__':
    file_path = 'test.mp4'
    main(file_path)

参考

版权属于:

那棵树看起来生气了

本文链接:

(转载时请注明本文出处及文章链接)