Jetson带CUDA编译的opencv4.5安装教程与踩坑指南,cmake配置很重要!

8 篇文章 16 订阅 ¥19.90 ¥99.00

0.jtop前后对比

1.安装教程

第一步:下载opencv与opencv-contrib的源码包,注意版本对应
opencv:https://github.com/opencv/opencv/releases
opencv-contrib:https://github.com/opencv/opencv_contrib/releases

第二步:解压opencv与opencv-contrib,并将opencv-contrib文件夹放到opencv文件夹中

第三步:安装依赖

sudo apt-get install build-essential \
libavcodec-dev \
libavformat-dev \
libavutil-dev \
libeigen3-dev \
libglew-dev \
libgtk2.0-dev \
libgtk-3-dev \
libjpeg-dev \
libpostproc-dev \
libswscale-dev \
libtbb-dev \
libtiff5-dev \
libv4l-dev \
libxvidcore-dev \
libx264-dev \
qt5-default \
zlib1g-dev \
libavresample-dev \
gstreamer1.0-plugins-bad \
pkg-config

第四步:进入opencv文件夹,创建build文件夹,进入build文件夹,进行cmake配置。cmake各参数含义参考下图

cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE\
 -D CMAKE_INSTALL_PREFIX=/usr/local\
 -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules\
 -D CUDA_ARCH_BIN='7.2'\
 -D WITH_CUDA=1\
 -D BUILD_opencv_python3=ON -DBUILD_opencv_python2=ON\
 -D WITH_V4L=ON\
 -D WITH_QT=ON\
 -D WITH_OPENGL=ON\
 -D CUDA_FAST_MATH=1\
 -D WITH_CUBLAS=1\
 -D OPENCV_GENERATE_PKGCONFIG=1\
 -D WITH_GTK_2_X=ON\
 -D WITH_GSTREAMER=ON ..

在这里插入图片描述

第五步:进行make,然后等待(我在NX上编译用了7-8个小时),make成功后,进行安装

make
sudo make install

make成功

至此,安装成功,可以使用命令pkg-config --modversion opencv4查看是否安装成功以及版本号,opencv4.5.1是最新版
在这里插入图片描述

安装教程参考博客:Ubuntu 18.04安装配置OpenCV 4.4.0。感谢这位博主,按照他的方法,opencv4.5也可安装成功

2.踩坑指南

2.1 cv2.error: OpenCV(4.4.0) /tmp/pip-build-2do2xloi/opencv-python/opencv/modules/highgui/src/window.cpp:651: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function ‘cvShowImage’

问题:Ubuntu下运行python3程序,cv2.imshow()相关的opencv图像显示函数都会报下面这个错,找了很多方法没有解决。值得一说的是,在程序中注释掉imshow相关函数,程序正常运行。
在这里插入图片描述
解决方法:重新编译
尝试一:安装libgtk2.0-dev、pkg-config,安装后重新在opencv文件里sudo make,我在安装libgtk2.0-dev就遇到了很多问题,make时候也有很多问题(我太难了Q_Q),最后走通一遍,没解决问题(=_=)。
安装libgtk2.0-dev可以参考这篇博客:Jetson Ubuntu安装libgtk2.0-dev,试过绝大多数方案后终于成功!值得一试!
尝试二:有方法说在这个文件夹下重新编译/tmp/pip-build-2do2xloi/opencv-python/opencv/modules/highgui/,未果
尝试三pip3 uninstall opencv-python卸载opencv,用pip3 install opencv-python安装(注意换源,编译时间较长,耐心等待),python3运行程序后没有之前那个问题了,但是出现了更棘手的问题,就是踩坑2.2。最后,按照本博客上面的安装教程解决了所有问题

2.2 Gtk-ERROR **: 11:55:33.973: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported

问题:Gtk-ERROR **: 11:55:33.973: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported
在这里插入图片描述
解决方法:这个问题相当棘手,尝试了很多方法都没解决,最终还是选择了重新编译
尝试一:按照这篇博客:Gtk-ERROR : GTK+ 2.x symbols detected. Using GTK+2.x and GTK+3 in the same process is not support做了修改,ARM环境Ubuntu平台安装QT5sudo apt-get install qt5-default qtcreator,出现了新的问题,也没有解决原来的问题,新的问题如下

File "/home/nvidia/.local/lib/python3.6/site-packages/matplotlib/backends/backend_qt5agg.py", line 11, in <module>
    from .backend_qt5 import (
  File "/home/nvidia/.local/lib/python3.6/site-packages/matplotlib/backends/backend_qt5.py", line 16, in <module>
    import matplotlib.backends.qt_editor.figureoptions as figureoptions
  File "/home/nvidia/.local/lib/python3.6/site-packages/matplotlib/backends/qt_editor/figureoptions.py", line 11, in <module>
    from matplotlib.backends.qt_compat import QtGui
  File "/home/nvidia/.local/lib/python3.6/site-packages/matplotlib/backends/qt_compat.py", line 175, in <module>
    raise ImportError("Failed to import any qt binding")
ImportError: Failed to import any qt binding

尝试二:参考这篇博客解决:GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported。他博客里的第二种方法是在python中

import matplotlib
matplotlib.use('Agg')
# matplotlib.use('TkAgg') # 两个选一个
 
import matplotlib.pyplot as plt
# .......

其实和上面尝试一的方法是一样的,这个更简单一点,而且在github上也是用这种方法,不过在我这里没有解决问题。
之后用了他博客里的第一种方法,重新编译,在cmake配置中增加-DWITH_GTK_2_X=ON,最后解决了问题。

2.3 CMake Error: The source directory "/home/nvidia/opencv-4.5.0/build/ " does not exist.

问题:CMake Error: The source directory "/home/nvidia/opencv-4.5.0/build/ " does not exist.
在这里插入图片描述
解决方法:参考这篇博客:Ubuntu环境下OpenCV 3.2版本中CMake error the source directory does not exist。他说-D后不能有空格,修改之后还是不行,于是我改成了不换行。

cmake -D CMAKE_BUILD_TYPE=RELEASE -D MAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D CUDA_ARCH_BIN='7.2' -D WITH_CUDA=1 -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D OPENCV_GENERATE_PKGCONFIG=1 -D CUDA_GENERATION=Pascal -D WITH_GTK_2_X=ON ..

当时没有彻底弄明白这些配置都是什么意思,只是把其他人的结合了起来,现在记录一下

cmake -DCMAKE_BUILD_TYPE=RELEASE \    #表示编译发布版本
    -DCMAKE_INSTALL_PREFIX=/usr/local \    #指定安装路径
    -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules .. \    #opencv_contrib modules路径
    -DCUDA_ARCH_BIN='7.2' \    #指定GPU算力,在NVIDIA官网查询,也可在jtop中查询
    -DWITH_CUDA=1 \    #使用CUDA
    -DWITH_V4L=ON \
    -DWITH_QT=ON \    #使用QT支持
    -DWITH_OPENGL=ON \
    -DENABLE_FAST_MATH=1 \
    -DCUDA_FAST_MATH=1 \
    -DWITH_CUBLAS=1 \
    -DOPENCV_GENERATE_PKGCONFIG=1 \    #用于生成opencv4.pc文件,支持pkg-config功能,没有这一项的话需要自己手动生成
    -DCUDA_GENERATION=Pascal \
    -DWITH_GTK_2_X=ON ..    #解决Gtk-ERROR的关键

2.4 fatal error: boostdesc_bgm.i: No such file or directory

问题:fatal error: boostdesc_bgm.i: No such file or directory
Makefile:162: recipe for target ‘all’ failed
make: *** [all] Error 2
在这里``插入图片描述
解决方法:主要是2个位置的文件下载有问题:
①opencv/.cache/xfeatures2d/boostdesc
②opencv/.cache/xfeatures2d/vgg
用下载好的文件覆盖即可。
参考博客:Ubuntu系统opencv编译错误:Makefile:162:recipe for target ‘all‘ failed make:*** [all] Error 2,该博客中提供了下载方式

2.5 fatal error: opencv2/video/detail/tracking.private.hpp:No such file or directory

问题:fatal error: opencv2/video/detail/tracking.private.hpp:No such file or directory
在这里插入图片描述
解决方法:这个问题我在网上实在没有找到答案,于是在github中进行了提问https://github.com/opencv/opencv_contrib/issues/2780
很快就有人给出了解答,cmake配置中-D ENABLE_FAST_MATH=1会导致莫名的错误,建议去掉;-D CUDA_GENERATION=Pascal对于-D CUDA_ARCH_BIN='7.2'来说是多余的,建议去掉;make -j6多核编译会出现莫名的错误,建议单核编译make VERBOSE=1,在单核编译下我用了7-8个小时;

2.6 fatal error: features2d/test/test_detectors_regression.impl.hpp: 没有那个文件或目录

问题:fatal error: features2d/test/test_detectors_regression.impl.hpp: 没有那个文件或目录
#include “features2d/test/test_detectors_regression.impl.hpp”
在这里插入图片描述
解决方法:头文件include地址不对,解决方法参考这篇博客:opencv_config安装问题

2.7 Makefile:61: recipe for target ‘install’ failed make: *** [install] Error 1

问题

Makefile:61: recipe for target ‘install’ failed make: *** [install]
Error 1 file INSTALL cannot copy file
“/home/nvidia/opencv/3rdparty/include/opencl/LICENSE.txt” to
“/usr/local/share/licenses/opencv4/opencl-headers-LICENSE.txt”

在这里插入图片描述
解决方法:无法复制"/home/nvidia/opencv/3rdparty/include/opencl/LICENSE.txt" 到
“/usr/local/share/licenses/opencv4/opencl-headers-LICENSE.txt”,因为权限不够,使用sudo make install即可解决。

2.8 CMake Error at cmake/OpenCVModule.cmake:339 (message): Duplicated modules NAMES has been found Call Stack (most recent call first): cmake/OpenCVModule.cmake:357 (_assert_uniqueness)

问题

modules/CMakeLists.txt:7 (ocv_glob_modules) CMake Error at
cmake/OpenCVModule.cmake:339 (message): Duplicated modules NAMES has
been found Call Stack (most recent call first):
cmake/OpenCVModule.cmake:357 (_assert_uniqueness)
modules/CMakeLists.txt:7 (ocv_glob_modules)

解决方法
1.有重复modules,检查opencv modules里和opencv_contrib modules里的文件是否重复,删除contrib里的重复组件即可。参考:Duplicated modules NAMES has been found
2.opencv与opencv_contrib版本不对应,下载对应的版本重新编译

2.9 CMake Error at cuda_compile_1_generated_gpu_mat.cu.o.RELEASE.cmake:221 (message): Error generating /home/nvidia/opencv-3.4/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/./cuda_compile_1_generated_gpu_mat.cu.o

问题
解决方法

如果解决了问题请点个赞,如果没有解决,可以评论区询问

  • 25
    点赞
  • 159
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论
首先,在Jetson Nano上安装OpenCV的依赖项: ``` sudo apt-get install build-essential 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 ``` 然后,从OpenCV官网下载源代码并解压缩。接下来,打开终端并进入解压后的目录。 在终端中输入以下命令: ``` mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_CUDA=ON -D CUDA_ARCH_BIN=5.3 -D CUDA_ARCH_PTX="" -D WITH_CUBLAS=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D ENABLE_NEON=ON -D WITH_QT=OFF -D WITH_OPENMP=ON -D WITH_OPENGL=ON -D BUILD_TIFF=ON -D WITH_FFMPEG=ON -D WITH_PNG=ON -D WITH_JPEG=ON -D BUILD_JPEG=ON -D BUILD_ZLIB=ON -D BUILD_EXAMPLES=OFF -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D PYTHON_DEFAULT_EXECUTABLE=$(which python3) -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D OPENCV_ENABLE_NONFREE=ON -D INSTALL_PYTHON_EXAMPLES=OFF -D INSTALL_C_EXAMPLES=OFF -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_NEW_PYTHON_SUPPORT=ON .. ``` 这个CMake命令会配置OpenCV编译选项,并生成Makefile。 然后,在终端中输入以下命令进行编译: ``` make -j4 ``` 这个命令会使用4个线程并行地编译OpenCV。 最后,在终端中输入以下命令进行安装: ``` sudo make install ``` 这个命令会将编译好的OpenCV安装到系统目录中。 如果您想使用Python绑定,可以使用以下命令编译: ``` make -j4 opencv_python_module ``` 这个命令会编译Python绑定,并且会在build/lib/目录下生成一个opencv_python-<version>.so文件。您可以将这个文件复制到Python的site-packages目录中,就可以在Python中使用OpenCV了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾系桉宁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值