Table des matières
1. Installez cuda 10.2 et cudnn 7.6.5
Remarque : opencv4.4.0 ne supporte théoriquement que cudnn7.6.5, et cudnn8.x ne peut pas être compilé lorsque cudnn est activé. Veuillez vous référer à cette question
Pour l'installation, reportez-vous à mon autre article Installation de l'environnement d'apprentissage en profondeur Ubuntu 18.04 et cuda
2. Installez opencv4.4.0
Télécharger opencv-4.4.0.zip
opencv_contrib-4.4.0.zip
unzip opencv-4.4.0.zip
unzip opencv_contrib-4.4.0.zip
cd opencv_contrib-4.4.0
cp ./opencv_contrib-4.4.0 ../opencv-4.4.0/
cd ..
cd opencv-4.4.0
mkdir build
cd build
Dépendances d'installation, reportez-vous à Comment installer OpenCV 4.2.0 avec CUDA 10.0 dans la distribution Ubuntu 18.04
sudo apt-get install qt5-default
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install build-essential cmake pkg-config unzip yasm git checkinstall
$ sudo apt install libjpeg-dev libpng-dev libtiff-dev
$ sudo apt install libavcodec-dev libavformat-dev libswscale-dev libavresample-dev
$ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt install libxvidcore-dev x264 libx264-dev libfaac-dev libmp3lame-dev libtheora-dev
$ sudo apt install libfaac-dev libmp3lame-dev libvorbis-dev
$ sudo apt install libopencore-amrnb-dev libopencore-amrwb-dev
$ sudo apt-get install libdc1394-22 libdc1394-22-dev libxine2-dev libv4l-dev v4l-utils
$ cd /usr/include/linux
$ sudo ln -s -f ../libv4l1-videodev.h videodev.h
$ cd ~
sudo apt-get install libgtk-3-dev
sudo apt-get install libtbb-dev
$ sudo apt-get install libatlas-base-dev gfortran
$ sudo apt-get install libprotobuf-dev protobuf-compiler
$ sudo apt-get install libgoogle-glog-dev libgflags-dev
$ sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen
Bloquer le proxy :
export http_proxy="http://127.0.0.1:12333"
export https_proxy="http://127.0.0.1:12333"
cmake
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_C_COMPILER=/usr/bin/gcc-7 -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D WITH_TBB=ON -D WITH_CUDA=ON -D BUILD_opencv_cudacodec= OFF -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_PC_FILE_NAME=opencv.pc -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=…/opencv_contrib-4.4.0/modules -D BUILD_EXAMPLES=ON -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D CUDA_ARCH_BIN=6.1 -D CUDA_ARCH_PTX=6.1 -D PYTHON_EXECUTABLE=/home/xxx/ miniconda3/envs/torch/bin/python …
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_C_COMPILER=/usr/bin/gcc-7 -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D WITH_TBB=ON -D WITH_CUDA=ON -D BUILD_opencv_cudacodec=OFF -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_PC_FILE_NAME=opencv.pc -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.4.0/modules -D BUILD_EXAMPLES=ON -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D CUDA_ARCH_BIN=6.1 -D CUDA_ARCH_PTX=6.1 -D PYTHON_EXECUTABLE=/home/xxx/miniconda3/envs/torch/bin/python ..
une autre configuration cmake sur un notebook rtx2060 :
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_C_COMPILER=/usr/bin/gcc-7 -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D WITH_TBB=ON -D WITH_CUDA=ON -D BUILD_opencv_cudacodec=OFF -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_PC_FILE_NAME=opencv.pc -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.4.0/modules -D BUILD_EXAMPLES=ON -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D CUDA_ARCH_BIN=7.5 -D CUDA_ARCH_PTX=7.5 -D PYTHON_EXECUTABLE=/usr/bin/python ..
Capacité de calcul GPU GTX 1080Ti 6.1 Capacité de calcul GPU
RTX 2060 7.5
faire installer
$ nproc
$ make -j8 #根据CPU线程数量或nproc结果定义
$ sudo make install
Résolvez l'erreur lors du chargement des bibliothèques partagées : libopencv_core.so.4.4 : impossible d'ouvrir le fichier objet partagé : aucun fichier ou répertoire de ce type ne
peut être rencontré, la solution :
cd /etc/ld.so.conf.d/
sudo echo /usr/local/lib >> opencv.conf
sudo ldconfig -v
3. Testez-le
1) Testez opencv pour lire jpeg et afficher
Testez test.cpp, placez une image apple.jpeg dans le même dossier :
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char **argv)
{
Mat src = imread("./apple.jpeg", IMREAD_COLOR);
if (!src.data)
{
cerr << "Error : could not load image." << endl;
return -1;
}
imshow("input", src);
waitKey(0);
return 0;
}
Compilez et exécutez :
g++ test.cpp -o test `pkg-config opencv --cflags --libs
./test
résultat de sortie
2) Tester cuda d'opencv
Testez cuda :
test2.cpp
#include <iostream>
#include <ctime>
#include <cmath>
#include "bits/time.h"
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/core/cuda.hpp>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/cudaimgproc.hpp>
#define TestCUDA true
int main() {
std::clock_t begin = std::clock();
try {
cv::String filename = "./apple.jpeg";
cv::Mat srcHost = cv::imread(filename, cv::IMREAD_GRAYSCALE);
for(int i=0; i<1000; i++) {
if(TestCUDA) {
cv::cuda::GpuMat dst, src;
src.upload(srcHost);
//cv::cuda::threshold(src,dst,128.0,255.0, CV_THRESH_BINARY);
cv::cuda::bilateralFilter(src,dst,3,1,1);
cv::Mat resultHost;
dst.download(resultHost);
} else {
cv::Mat dst;
cv::bilateralFilter(srcHost,dst,3,1,1);
}
}
} catch(const cv::Exception& ex) {
std::cout << "Error: " << ex.what() << std::endl;
}
std::clock_t end = std::clock();
std::cout << double(end-begin) / CLOCKS_PER_SEC << std::endl;
}
Compilez-le :
g++ test2.cpp -o test `pkg-config opencv --cflags --libs
./test2
sortir:
(base) xxx@desktop:~/Desktop/test_opencv$ ./test2
0.528226
faites-le !!!