最近因为要在Jetson Xavier NX上使用SIFT、SURF等包,但是由于opencv版本问题,一直都报错:
module 'cv2' has no attribute 'xfeatures2d'
这个错误是因为现在的opencv版本没有这个包,网上有很多人说这个是专利问题,确实在那之后这两种受到商业保护的算子从opencv库中移除了出去,但是只需要下载opencv_contrib库,并且编译时设置选项即可使用,根据我在Jetson板子上的试验,opencv4.4.0版本是没有任何问题的,网上所说的将opencv版本降级,这个我试了,没有用。如果在上位机上报这个错误,可以直接执行:
pip install opencv-python
pip install opencv-contrib-python
就可以解决问题了,但是在Jetson系列的板子上,执行这个是装不上去的,原因是自动查找软件包的时候,找不到适合ARM板子的版本,所以需要手动安装opencv,于是,在下面的介绍中,开始介绍如何手动安装opencv4.4.0和opencv-contrib4.4.0。
1. 更新一下系统
sudo apt-get update
sudo apt-get upgrade
如果是首次更新,可能时间比较长。
2. 安装官方的opencv依赖包:
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
3. 下载opencv和opencv_contrib安装包:
首先下载 Opencv4.4.0 的源文件,选择 4.4.0 版本的 Sources 版本: https://opencv.org/releases/
再下载 opencv_contrib的对应版本:https://github.com/opencv/opencv_contrib/releases
4. 安装CMake-gui,也可以不下载安装,用指令也可以完成Cmake,但是个人感觉用这个真方便,而且可以避免很多不必要的错误,这里用的是GUI的方式。
sudo apt-get install cmake-qt-gui
1. 解压opencv和opencv_contrib安装包,并建立opencv文件夹,我解压以后的文件放置如下,网上也有人说将opencv_contrib安装包放在opencv里,也行,但是下面这样比较省事。
2. 进入压缩包解压以后的opencv文件夹(个人习惯,将后面的数字都删掉了),打开终端,然后依次输入以下指令:
mkdir build
cd build
3. 去github或是其他网站把opencv_contrib的module缺失文件下载下来,然后放到opencv_contrib/modules/xfeatures2d/src目录下,下载链接:https://github.com/opencv/opencv_contrib/issues/1301,
或是百度云网盘:链接:https://pan.baidu.com/s/1mB1tc2UplD4ZMeSXyuweIw 提取码:k7y3
(注:在这一步的原因在后面安装过程出现的问题这一栏,一定要注意!)
4. 将opencv/modules/features2d复制,然后粘贴到build目录。
5. 进入CMake的图形化界面,(不要忘了最后的空格和两个点)在上方的两个路径里面,选择代码所在文件夹的路径和要安装的路径,这里我们将要安装的路径选择新建的build文件夹:
cmake-gui ..
6. 点击左下方的Configure按钮,选择Unix Makefiles,选择Use default native compilers(默认),然后点击Finish:
7. 需要下载一些文件,要等待一段时间,然后CMake即载入默认配置,如下图所示:
窗口的中间部分即配置列表,这里和使用cmake命令直接生成makefile文件一致的,这里通过图形界面的方式来进行配置,感觉比之前用命令行代码或者代码实现更加直观和方便。
8. 针对个人需求进行修改,主要是为了用上SIFT、SURF等算子,所以下面这几步很重要:
(1)在CMAKE_BUILD_TYPE 值处输入RELEASE,其他保持不变(如果已经存在就不必修改):
(2)在OPENCV_EXTRA_MODULES_PATH处,选择输入目录(单击这一行后方空白处即可选中),选到我们刚才解压的opencv_contrib/modules文件夹:
(3)在OPENCV_ENABLE_NONFREE这个地方也要打上勾,才能使用SIFT、SURF这些算子。(很重要!)
9. 点击Generate生成配置文件:
10. 在build目录下打开终端,输入:
make
sudo make install
make成功:
install:
11. 然后就开始安装了,这一步需要等很长时间,可以喝杯咖啡。
12. 等下面显示到100%就完成了。
1. 安装成功后需要设置opencv的环境变量。打开文件:
sudo gedit /etc/ld.so.conf.d/opencv.conf
2. 将以下内容添加到最后:
/usr/local/lib
3. 接下来配置库:
sudo ldconfig
4. 更改环境变量:
sudo gedit /etc/bash.bashrc
5. 在文件后添加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
6. 保存退出,执行下面生效,到此,安装和配置的整个过程都完成了!
source /etc/bash.bashrc
(1)fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory
原因是没找到这个文件,解决方法如下:
将opencv/modules/features2d复制,然后粘贴到build目录。
(2)出现opencv_contrib/modules/xfeatures2d/src/vgg.cpp:490:41: fatal error: vgg_generated_120.i: No such file or directory。(还有可能会出现另一些 *.i文件找不到的错误)
原因是在Cmake环节,下载的时候有的文件没下载下来:
解决方法如下:
1)自己去github或是其他网站把这些文件下载下来,然后放到opencv_contrib/modules/xfeatures2d/src目录下就可以了,下载链接:https://github.com/opencv/opencv_contrib/issues/1301
2)或是百度云网盘:链接:https://pan.baidu.com/s/1mB1tc2UplD4ZMeSXyuweIw 提取码:k7y3
感谢下面这几位小伙伴:
1. ubuntu16.04+opencv4.1+opencv_contrib编译及安装(SIFT、SURF)
2. Ubuntu系统opencv4.4安装常见问题 找不到 feature2d/test/test_detectors_regression.impl.hpp 文件