OpenCV3.2.0をインストール - ubuntu18.04 cuda9.2

はじめに: 本来、ubuntu18.0.4 には OpenCV3.2 が付属しているはずですが、何をしたのかわかりません、消えてしまいました (または、pencv4 にアップグレードされました)。ただし、me​​lodic は opencv3.2 を使用しているため、バージョンの違いにより一部のライブラリ間で競合が発生します。opencv3.2を再インストールする予定(opencv4は削除せずに切り替え可能)

1.opencv3.2.0の依存関係をインストールします。

sudo apt-get install build-essential  
  
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev  
  
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev  
 
sudo apt-get install build-essential qt5-default ccache libv4l-dev libavresample-dev  libgphoto2-dev libopenblas-base libopenblas-dev doxygen  openjdk-8-jdk pylint libvtk6-dev
 
sudo apt-get install pkg-config

2.opencv3.2.0とopencv_contribをダウンロードします。

opencv3.2.0 github リンク
https://github.com/opencv/opencv/releases/tag/3.2.0

opencv_contrib github リンク
https://github.com/opencv/opencv_contrib/tags?after=3.4.3

これらを別々に解凍し、解凍された opencv_contrib を opencv3.2.0 のルート ディレクトリに置きます。

3. cuda9.2 のバージョンは比較的高く、opencv3.2.0 のコンパイルをサポートしていないため、opencv3.2.0 の一部のファイルを変更する必要があります。

A. opencv3.2.0 の cmake フォルダーで FindCUDA.cmake ファイルを見つけます。

1) コマンドラインを見つける

find_cuda_helper_libs(nppi)

への変更

  find_cuda_helper_libs(nppial)
  find_cuda_helper_libs(nppicc)
  find_cuda_helper_libs(nppicom)
  find_cuda_helper_libs(nppidei)
  find_cuda_helper_libs(nppif)
  find_cuda_helper_libs(nppig)
  find_cuda_helper_libs(nppim)
  find_cuda_helper_libs(nppist)
  find_cuda_helper_libs(nppisu)
  find_cuda_helper_libs(nppitc)

2) コマンドラインを見つける

set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")

への変更

set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")

3) コマンドラインを見つける

unset(CUDA_nppi_LIBRARY CACHE)

への変更

unset(CUDA_nppial_LIBRARY CACHE)
unset(CUDA_nppicc_LIBRARY CACHE)
unset(CUDA_nppicom_LIBRARY CACHE)
unset(CUDA_nppidei_LIBRARY CACHE)
unset(CUDA_nppif_LIBRARY CACHE)
unset(CUDA_nppig_LIBRARY CACHE)
unset(CUDA_nppim_LIBRARY CACHE)
unset(CUDA_nppist_LIBRARY CACHE)
unset(CUDA_nppisu_LIBRARY CACHE)
unset(CUDA_nppitc_LIBRARY CACHE)

B. opencv3.2.0 の cmake でファイル OpenCVDetectCUDA.cmake を見つけます。

次のコマンドラインを変更します

  set(cuda_arch_ptx "")
  if(CUDA_GENERATION STREQUAL "Fermi")
    set(cuda_arch_bin "2.0")
  elseif(CUDA_GENERATION STREQUAL "Kepler")
    set(cuda_arch_bin "3.0 3.5 3.7")

上記のコマンドを次のように変更します

  set(cuda_arch_ptx "")
  if(CUDA_GENERATION STREQUAL "Kepler")
    set(cuda_arch_bin "3.0 3.5 3.7")
  elseif(CUDA_GENERATION STREQUAL "Maxwell")
    set(cuda_arch_bin "5.0 5.2")

C. ヘッダー ファイル cuda_fp16.h を opencv3.2.0/modules/cudev/include/opencv2/cudev/common.hpp に追加します。

common.hppを追加

#include <cuda_fp16.h>

4. opencv3.2.0をcuda9.2でコンパイルします。

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE   -D CMAKE_INSTALL_PREFIX=/usr/local/opencv320 -D WITH_TBB=ON -D WITH_V4L=ON   -D WITH_QT=ON   -D WITH_OPENGL=ON   -D WITH_CUDA=ON   -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1   -D CUDA_NVCC_FLAGS="-D_FORCE_INLINES"   -D WITH_CUBLAS=1 -D OPENCV_EXTRA_MODULES_PATH=/home/sharine/software/opencv-3.2.0/opencv_contrib-3.2.0/modules/ -D CUDA_GENERATION=Kepler -D OPENCV_ENABLE_NONFREE=True \..
make -j8

知らせ:

-D CMAKE_INSTALL_PREFIX=/usr/local/opencv320opencv のインストール場所を設定するコマンド

-D OPENCV_EXTRA_MODULES_PATH=/home/sharine/software/opencv-3.2.0/opencv_contrib-3.2.0/modules/このコマンドは、opencv_contrib 内のモジュールのフォルダーの場所であり、独自のパスに従って設定されます。

5. ネットワークの問題により、多くのファイルが失われます。

# 下载后,放到 opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e 下
ippicv_linux_20151201.tgz

# 下载后,放到 opencv-3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/src 下
boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i

これらのファイルのリソースは、私の github
https://github.com/SharineLee/opencv320-toolにあります。

ダウンロードしたファイルをopencv-3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/srcディレクトリに配置します

ただし、プログラムのコンパイルを続行する場合は、上記のファイルをダウンロードしようとする可能性があります。

ここではコメントxfeatures2d/CMakeList.txtの最後の 2 行が必要です (opencv3.4.0 ではコメントは必要ありません)。

include(cmake/download_vgg.cmake)
include(cmake/download_boostdesc.cmake)

それから保存します。そうすれば、cmake はエラーを報告しなくなります。

6. コンパイル

次のコマンドを使用してコンパイルしてインストールします

make -j8
sudo make install

(1)エラー1:

/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: No such file or directory

cmakeし直す必要がある

そしてそれをcmakeオプションに追加します

-D ENABLE_PRECOMPILED_HEADERS=OFF 

(2)エラー2:

fatal error: LAPACKE_H_PATH-NOTFOUND/lapacke.h: No such file or directory #include “LAPACKE_H_PATH-NOTFOUND/lapacke.h”

解決:

sudo apt-get install liblapacke-dev checkinstall
打开opencv-3.2.0/build/opencv_lapack.h
将第二行中的#include"LAPACKE_H_PATH-NOTFOUND/lapacke.h" 修改为#include"lapacke.h"

(3)エラー3:

[ 92%] Linking CXX executable ../../bin/opencv_test_sfm
../../lib/libopencv_sfm.so.3.4.10:对‘google::InitVLOG3__(int**, int*, char const*, int)’未定义的引用
../../lib/libopencv_sfm.so.3.4.10:对‘google::kLogSiteUninitialized’未定义的引用

BUILD で TEST 項目を閉じるとパス-DBUILD_TESTS=OFFできます。

7. ROS プロジェクトで使用される

(1) Melodic がインストールされている opencv3.2.0 を見つけるには、システムにインストールされている opencv3.2.0 フォルダーをリンクする必要があります/usr/include/opencv

sudo ln -s /usr/local/opencv320 /usr/include/opencv

(2) Melodic が opencv2 を見つけるために (致命的なエラー: opencv2/opencv.hpp: そのようなファイルまたはディレクトリはありません)

sudo ln -s /usr/local/opencv320/opencv2 /usr/include/opencv2

(3) ros ワークスペースに opencv3.2.0 を検出させるために、次のようにCmakeList.txt変更
します。find_package(OpenCV REQUIRED)
find_package(OpenCV 3 REQUIRED)

参考

https://blog.csdn.net/weixin_51925771/article/details/121120677
https://zhuanlan.zhihu.com/p/367323296
https://blog.csdn.net/qq_41246375/article/details/119487839
https:/ /blog.csdn.net/weixin_43409736/article/details/121096223

おすすめ

転載: blog.csdn.net/weixin_37950717/article/details/125307549