TX2重新刷了机,当时刷的是jetpack3.3.1版本的,由于host笔记本内存不足,当时刷机时只是刷了Ubuntu16.04的系统,其他的软件都没刷,系统刷完后这里可以选择手动安装这些。
1、CUDA9.0
jetpack3.3.1版本应该可以装CUDA8.0或者CUDA9.0,这里考虑到要装openpose所以直接装的是CUDA9.0
1、从官网下载CUDA9.0的安装包,这里我下的版本是cuda-repo-l4t-9-0-local_9.0.252-1_arm64.deb。这里可能需要注册,而且下载速度真的是慢的有点让人头大。如果不想去官网下的这里我存了链接
2、将下载好的安装包放到home下,运行下列命令:
sudo dpkg -i cuda-repo-l4t-9-0-local_9.0.252-1_arm64.deb
sudo apt-get update
sudo apt-get install cuda-toolkit-9-0
sudo gedit /etc/bash.bashrc
#在文件的末尾加入:
export PATH=/usr/local/cuda-9.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH
总体来说,CUDA的安装还是没什么问题的,除了当时update的时候有点慢,应该是自带的源的问题。
2、cudnn7.0
cudnn的安装比CUDA步骤多一点,但其实差不多。这里下载的是cuDNN v7.0.3-linux,同样可以在英伟达的官网下载。CSDN的下载链接
下载后,放到home文件夹下,解压,得到一个cuda文件夹,然后运行下列命令:
sudo cp cudnn.h /usr/local/cuda-9.0/include/
sudo cp libcudnn.so /usr/local/cuda-9.0/lib64/
sudo cp libcudnn.so.7 /usr/local/cuda-9.0/lib64/
sudo cp libcudnn.so.7.0.3 /usr/local/cuda-9.0/lib64/
sudo cp libcudnn_static.a /usr/local/cuda-9.0/lib64/
这里其实只是将几个文件从cuda文件夹下拷贝到/usr/local/cuda-9.0中的两个文件夹中去了而已,如果不想执行这些命令的可以试一下直接复制粘贴是否可行,应该没问题。
然后,创建软连接,并删除之前的cudnn版本,命令行如下:
sudo chmod +r libcudnn.so.7.0.3
sudo rm -rf libcudnn.so libcudnn.so.5
sudo ln -s libcudnn.so.7.0.3 libcudnn.so.7
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ldconfig
cd /usr/bin
sudo rm -i libcudnn.so
sudo rm -i libcudnn.so.5
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ln -s libcudnn.so.7.0.3 libcudnn.so.7
这里如果用ln -s报错的话可以用ln -sf。
另外这里在执行
sudo rm -rf libcudnn.so libcudnn.so.5
之后似乎把新添加的libcudnn.so文件删除了,可以用前面的方式重新添加一下。
最后,通过运行
cat /usr/local/cuda-9.0/include/cudnn.h | grep CUDNN_MAJOR -A 2
如果显示有cudnn7.0.3的版本信息,则证明cudnn7.0.3已成功安装。
3、opencv3.4
首先,需要下载opencv和opencv_contrib(后者会在cmake配置的时候用到),这是因为opencv3以后SIFT和SURF之类的属性被移到了contrib中,下载地址:
opencv:https://opencv.org/releases.html
opencv_contrib:https://github.com/opencv/opencv_contrib/tree/3.4.0
下载Opencv3.4.0和OpenCV_contrib模块后,在home目录下解压opencv-3.4.0,并把opencv_contrib-3.4.0解压到opencv-3.4.0目录下。 然后,安装依赖项,终端输入:
sudo apt-get install -y \
cmake \
libavcodec-dev \
libavformat-dev \
libavutil-dev \
libeigen3-dev \
libglew-dev \
libgtk2.0-dev \
libgtk-3-dev \
libjasper-dev \
libjpeg-dev \
libpng12-dev \
libpostproc-dev \
libswscale-dev \
libtbb-dev \
libtiff5-dev \
libv4l-dev \
libxvidcore-dev \
libx264-dev \
qt5-default \
zlib1g-dev \
pkg-config
接着,进入opencv-3.4.0目录并新建build文件夹,终端输入:
cd ~/opencv-3.4.0/
mkdir build
在build文件夹下创建make_opencv.sh文件,文件内容为:
#!/bin/bash
cmake \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr \
-D BUILD_PNG=OFF \
-D BUILD_TIFF=OFF \
-D BUILD_TBB=OFF \
-D BUILD_JPEG=OFF \
-D BUILD_JASPER=OFF \
-D BUILD_ZLIB=OFF \
-D BUILD_EXAMPLES=OFF \
-D BUILD_opencv_java=OFF \
-D BUILD_opencv_python2=ON \
-D BUILD_opencv_python3=OFF \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
-D WITH_OPENCL=OFF \
-D WITH_OPENMP=OFF \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_GSTREAMER_0_10=OFF \
-D WITH_CUDA=ON \
-D WITH_GTK=ON \
-D WITH_VTK=OFF \
-D WITH_TBB=ON \
-D WITH_1394=OFF \
-D WITH_OPENEXR=OFF \
-D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-9.0 \
-D CUDA_ARCH_BIN=6.2 \
-D CUDA_ARCH_PTX="" \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.0/modules/ \
../
注意这里关于
-D BUILD_EXAMPLES=OFF \
这一项这里设置为了OFF,因为当时编译的时候出现了一个最终也未能解决的错误,但是这个错误是由于编译EXAMPLES导致的,所以我把这项关了最后编译通过的。
接下来,更改make_opencv.sh的执行权限,终端输入:
chmod 777 make_opencv.sh
然后,进入build目录,执行make_opencv.sh文件
./make_opencv.sh
配置成功后,执行:
make -j4
sudo make install
最后完成编译
期间遇到的几个问题:
问题1、boostdesc_bgm.i: No such file or directory
这里是由于缺少一系列文件造成的,可以通过手动下载这些文件统一放到opencv_contrib/modules/xfeatures2d/src/
路径下即可。CSDN下载链接
问题2、fatal error: opencv2/xfeatures2d/cuda.hpp: No such file or directory
这个问题就比较奇怪了,因为本身这个路径是存在的,文件也是存在的,但是似乎它并没有找到。实际上该文件的路径是在./opencv_contrib-3.4.0/modules/xfeatures2d/include/opencv2/xfeatures2d/
下,但是我将保存的文件中该路径改为绝对路径也存在同样的错误,死活找不到。后来我将该文件拷贝到./modules/core/include/opencv2/xfeatures2d/
路径下,编译通过。
问题3、CMakeFiles/example_gpu_surf_keypoint _matcher.dir/surf_keypoint_matcher.cpp.o: In function `main’:
完整的报错是这样子的:
CMakeFiles/example_gpu_surf_keypoint_matcher.dir/surf_keypoint_matcher.cpp.o: In function `main':
surf_keypoint_matcher.cpp:(.text.startup.main+0x352): undefined reference to `cv::cuda::SURF_CUDA::SURF_CUDA()'
surf_keypoint_matcher.cpp:(.text.startup.main+0x579): undefined reference to `cv::cuda::SURF_CUDA::operator()(cv::cuda::GpuMat const&, cv::cuda::GpuMat const&, cv::cuda::GpuMat&, cv::cuda::GpuMat&, bool)'
surf_keypoint_matcher.cpp:(.text.startup.main+0x60d): undefined reference to `cv::cuda::SURF_CUDA::operator()(cv::cuda::GpuMat const&, cv::cuda::GpuMat const&, cv::cuda::GpuMat&, cv::cuda::GpuMat&, bool)'
surf_keypoint_matcher.cpp:(.text.startup.main+0x6af): undefined reference to `cv::cuda::SURF_CUDA::defaultNorm() const'
surf_keypoint_matcher.cpp:(.text.startup.main+0x7ca): undefined reference to `cv::cuda::SURF_CUDA::downloadKeypoints(cv::cuda::GpuMat const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&)'
surf_keypoint_matcher.cpp:(.text.startup.main+0x7ea): undefined reference to `cv::cuda::SURF_CUDA::downloadKeypoints(cv::cuda::GpuMat const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&)'
surf_keypoint_matcher.cpp:(.text.startup.main+0x800): undefined reference to `cv::cuda::SURF_CUDA::downloadDescriptors(cv::cuda::GpuMat const&, std::vector<float, std::allocator<float> >&)'
surf_keypoint_matcher.cpp:(.text.startup.main+0x812): undefined reference to `cv::cuda::SURF_CUDA::downloadDescriptors(cv::cuda::GpuMat const&, std::vector<float, std::allocator<float> >&)'
collect2: error: ld returned 1 exit status
samples/gpu/CMakeFiles/example_gpu_surf_keypoint_matcher.dir/build.make:132: recipe for target 'bin/example_gpu_surf_keypoint_matcher' failed
make[2]: *** [bin/example_gpu_surf_keypoint_matcher] Error 1
这个问题的解决方式是通过修改以下路径中的文件:
./build/samples/gpu/CMakeFiles/example_gpu_surf_keypoint_matcher.dir/link.txt
这个文件是刚才编译的时候自动生成的,将该link.txt 中的内容替换成以下内容即可:
--as-needed CMakeFiles/example_gpu_surf_keypoint_matcher.dir/surf_keypoint_matcher.cpp.o ../../modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/surf.cuda.cpp.o ../../modules/xfeatures2d/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_surf.cu.o
不是特别明白,具体的讨论在这里面有:
https://github.com/opencv/opencv/issues/9949
安装过程的参考文档:
1、
https://blog.csdn.net/qq_38595610/article/details/105958131
2、
https://blog.csdn.net/GungnirsPledge/article/details/108597474
3、这里面提供了一种cudnn的安装方式,还没试过
https://blog.csdn.net/qq_30129009/article/details/99059404
4、
https://blog.csdn.net/nannan7777/article/details/103256157