OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

时间:2023-03-09 02:50:07
OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

1 错误原因

1.1 报错全部信息:

cv2.error: OpenCV(4.0.1) D:\Build\OpenCV\opencv_contrib-4.0.1\modules\xfeatures2d\src\sift.cpp:1207: error: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'cv::xfeatures2d::SIFT::create'

1.2 报错信息分解:

1、  cv2.error: OpenCV(4.0.1) D:\Build\OpenCV\opencv_contrib-4.0.1\modules\xfeatures2d\src\sift.cpp:1207:

错位代码定位

2、  error: (-213:The function/feature is not implemented)

error 代号,函数 / 功能无法实现

3、 This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'cv::xfeatures2d::SIFT::create'

error 信息,该算法(SIFT)已经获得专利,在此配置中不包括,设置 OPENCV_ENABLE_NONFREE CMake 选项并在函数 ' cv :: xfeatures2d :: SIFT :: create ' 中重建库

2 修缮工程(守城)

该修改工程属于消极防御,记为守城之策。

2.1 方案一:安装opencv-contrib-python

采用 opencv-contrib-python 而非 opencv-python 。在 opencv-contrib-python 版本中含有额外模块( Extra modules ),而 opencv-python 版本中只含有基础模块。

网上有人说是 SIFT 申请了算法专利保护,所以就将 SIFT 放置在了 Extra modules 模块中,故安装 opencv-contrib-python 是能用的。

当然这个说法也是对的,官网【点击查看】上确实看到 Extra modules 中包含有  xfeatures2d. Extra 2D Features Framework 函数 / 功能。

2.2 方案二:版本问题

有人按照方案一操作,依据不可行,所以又出现了版本问题,确切地说 opencv-contrib-python 3.4.3.18 之前是有效的因为我在寻找解决办法时,好多解决办法都是降低版本至 3.4.3.16。完美解决该问题。但 - 但 - - 但 - - - 但这是2019 年 03 月 09 日。

由于我想的是越高的版本其算法应该会越好,bug 应该也越小。所以不想降低版本来实施运算;所以这个解决方案没有采用。

网上到处都是赋值粘贴的,也不注明出处。

2.3 方案三:按照报错信息去解决

写下一段插曲,算是反思吧。

查找原因顺序是,

1、先检索了报错代码,出现了方案一和方案二中的问题解决方案,这种方案撰写时间是在2018年下半年和2019年出现的,虽然并不是库文件版本越新越好,但是新版本的迭代优化总归是有所成效的。所以没有采用这些方案。

2、检索报错信息中的解决方案:Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'cv::xfeatures2d::SIFT::create'。出现了惊人的效果,真正的解决措施才徐徐拉开序幕.....

该修缮工程比较大,兹另起章节,详见下段 3。

3 修缮工程(攻城)

该修缮工程(实为上文的方案 3 ,在此段展开撰述)为积极攻伐,属为攻城之计。

3.1 下载安装包及工具

3.1.1 CMake

其实这个无所谓版本,我选择最新的。

首先下载 cmake 文件。请依据自己需求 【点击下载

下载 next - > next 安装,在安装的过程中注意有一项默认 “ 是否添加到PATH ” 默认是就行,要不还要手段添加 PATH。

安装完毕后打开即可。

3.1.2 opencv 被编译对象

之所以下载 opencv 各种包,主要是因为原安装包 .whl 不具备被 CMake 的编译条件,缺少CMakelist.txt 文件。

安装后下载拟编译的文件,由于需要编译的文件中必须包含 CMakeList.txt 文件,(我打开可以被编译的文件发现——每一个被编译的文件夹下面都有一个CMakeList.txt 文件)

先是下载了官网的安装包【点击下载网址,下拉即可看到,由于这个是4.0.0版本的,随着时间延伸,连接可能会失效,失效时候直接去官网就行,我只是将二级目录连接放着了】DocumentationSourcesWin pack (说白了,除了没有 IOS pack 的我都下载了),注意:opencv-4.0.0-vc14_vc15.exe 的安装格式其实相当于解压。

同时为了还下载了 GitHub 上的文件,分别为 opencv 和 opencv_contrib ,

其实,下载 GitHub 上的 opencv 和 opencv_contrib 就可以了。

3.2 编译

3.2.1 编译过程的小插曲(出现的问题)

3.2.1.1 缺少 CMakeLists.txt 文件

由于在编译时不知道是编译的那个文件,同时知道 .whl 文件与 .rar 文件一样,安装和解压类似。所以先找安装文件opencv_python-4.0.1+contrib-cp36-cp36m-win_amd64.whl 练练手。

先将 opencv_python-4.0.1+contrib-cp36-cp36m-win_amd64.whl 文件后缀改为 .rar ,解压后,导入CMake 文件输入路径中,随便输入一个保存路径。点击 Configure 。结果报错!缺少 CMakeList.txt 文件。

3.2.1.2 对比安装前后文件

是不是安装后的文件比安装文件增加了 CMakeLists.txt 文件,所以造成 " 练手 “ 失败。

打开 Everything 软件 --> 键入CMakeLists.txt

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

发现CMakeList.txt 只存在于 tensorflow 中,安装的 opencv 中压根没有。

3.2.1.2 查找源文件

既然其他文件中存在,而 opencv_contrib_python 中没有,那把 tensorflow 文件中的 CMakeLists.txt 拷贝到 opencv_contrib_python 中是否可行 ?逐一打开CMakeLists.txt 文件,发现内容 “ 非常丰富 ” ,文件存在又多,肯定不是 “ 上上签 ” ;继续踏上“ 征途 ”。

打开 opencv 的官方网站 GitHub 。我们发现包含有 CMakeList.txt 文件。惊喜大门缓缓开启!

3.2.2 编译(失败)

开始就编译 3.2.2.1 opencv-4.0.0-vc14_vc15.exe 解压文件 和3.2.2.2 opencv-4.0.0.zip 解压文件,均失败。这个失败可能不是文件本身造成的,很有可能刚开始 CMake 编译,有些该注意的地方没注意造成的,基于失败的经验,开始编译GitHub 下载的 opencvopencv_contrib 文件。历经波折、终于可以使用了。

3.2.2.1 opencv-4.0.0-vc14_vc15.exe

解压后文件分为

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

简单地说

build - 其可以直接被使用的,属于成品。将其 “ (D:\Software安装目录) \ opencv ( 解压文件后的根目录 ) \ build \ python \ cv2 \ python-3.6 ” 文件夹中的 cv2.cp36-win_amd64.pyd 文件直接拷贝到 “ (C:\Users\***\AppData\Local\Programs  Python程序的安装目录) \ Python \ Python36 \ Lib \ site-packages ” 文件夹中即可实现 opencv 的使用。

sources - 不能直接作为程序直接使用,属于半成品。打开这个文件夹,可以看到 CMakeLists.txt 文件,而 build 文件中没有该文件。这说明sources 文件中的内容可被 CMake 工具编译。

3.2.2.2 opencv-4.0.0.zip

该文件解压后,也含有 CMakeLists.txt 文件,其实仔细对比 3.2.2.1 opencv-4.0.0-vc14_vc15.exe 中的 sources 文件,文件夹中的内容是一样的。

3.2.3 编译(成功)

3.2.3.1 打开 CMake

3.2.3.2 首先编译基本库 opencv-master

具体入下图

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

注意:

1、填入路径(browse Source) 的文件夹下必须有 CMakeList.txt 文件。

对比下图,第一幅图是正确的;第二幅图是错误的,会报错。

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

2 、输出路径是自建的,如果没有该文件夹,CMake 会帮你创建并写入相关文件。

当在最下的窗口中出现如下图所示内容时,待变 configure 成功。

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

此意味基本库的编译完成

3.2.3.3 再次编译Extra modules(opencv_contrib-master)

在 Search 对话框中输入 PATH  ,或直接输入 OPENCV_EXTRA_MODULES_PATH(不区分大小写),找到 OPENCV_EXTRA_MODULES_PATH 后在 Value 中填入opencv_contrib-master 的文件中的 modules 路径,否则会不成功。

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

填入后,如下图所示

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

点击 Configure ,继续运行。

注意:

在该添加地址时,一定要区分好 / \ 两个符号关系。直接复制粘贴的文件路径是 (反斜杠 \)

D:\Software\opencv_contrib-master\opencv_contrib-master\modules

必须将其改为(正斜杠 /)

D:/Software/opencv_contrib-master/opencv_contrib-master/modules

否则会报错。Windows 10 CMake | OPENCV_EXTRA_MODULES_PATH | Bug #11655

CMake Error at cmake/OpenCVModule.cmake:368 (_glob_locations):
  Syntax error in cmake code at

    E:/opencv_github/opencv/cmake/OpenCVModule.cmake:368

  when parsing string

    E:\opencv_github\opencv_contrib\modules

  Invalid character escape '\o'.
Call Stack (most recent call first):
  modules/CMakeLists.txt:7 (ocv_glob_modules)

备注:

输出路径不要改变,该图中的输出路径与上图中的输出路径不同是因为我已经编译过了(重新编译很费时间),为了截图显示效果才改变的,输出路径始终不变!!!

同样出现下图,意味 Extend Modules 导入成功!

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

3.2.3.4 Set OPENCV_ENABLE_NONFREE

这个是要解决的重要事情。

在 Search 栏输入OPENCV_ENABLE_NONFREE,在其值Value中点击选中即可。如下图所示

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

选择完毕后再点击 Configure 。

3.2.3.5 点击 Generate

直到点击 Generate 才算完成。

(若不进行 Generate ,× 掉 CMake,软件会问你是否保存)

Generate 后暂时先不要关闭 CMake 。待 VS 编译时再关闭。

3.2.3.6 其他

有博客上说可以将 GitHub 下载的 opencv_master 和 opencv_contrib-master 解压到一个文件中进行编译,这个尝试的比较早,失败了。具体的失败原因不知道,也可能是方法可行而具体的细节没处理好造成的;但不排除这种方法本征上是行不通的。

3.2.4 其他

在 CMake 编译的过程中,看文件输出过程可知,其会自动搜寻电脑中的语言工具,如我电脑上是 python 3.6, 它会红色字体显示没有找到 python2.7,找到的是 python 。属于自动匹配吧。如果电脑上装的是 Java,CMake 编译时应该也能搜寻到的。

4 VS 编译

4.1 安装 VS

我安装的最新版本 VS 2019 。

安装 VS2019 之后,打开页面会显示 已安装 / 可用 两个选项,点击可用的最后个人版点击安装即可(由于安装过了,安装前没有截图,只能展示安装后的效果。)。

点击安装后选择 C++ 桌面版,如下图所示

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

这是我安装个人版之后为了展示效果安装的小型团体的过程步骤。首次选择只需点击 安装 即可。

安装之后关闭就行了。也可以选择性打开。

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

附:

已安装

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

可用

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

4.2 文件编译

一直没有关闭 CMake。点击 CMake 文件中的 Open Project 按钮。如下图所示

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

点击后跳转到 VS 2019。关闭 CMake,有文件上这样说的,反正没成功的时候都没有关闭 CMake,最后一次把所有问题解决后也看到有这样的博文,就关闭了,具体是否与CMake 有关,不得而知。

选择生成 --> 批生成。

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

打开批生成对话框

将图中选项选中,并选择 生成 或 重新生成。

(没有细究 生成 和 重新生成的区别,第一次时候选择是生长,后续操作我都选择了重新生成)

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

中间过程

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

最后完成 生成,见下图

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)

出现这个情况,也不用惊慌,我尝试,可以使用。

5 使用文件

找到 build 文件夹,找到 cv2.cp36-win_amd64.pyd 文件,我的文件地址 D:\ Software\build\lib\python3\Release

将该.pyd 文件复制到python文件的 site-packages 文件夹中即可。我的文件地址为C:\Users\***\AppData\Local\Programs\Python\Python36\Lib\site-packages

此时可以正常使用 SIFT了。

注意:文件夹中的 cv2.cp36-win_amd64.pyd 文件可以移动,但是编译完成的文件夹既不能修改名称也不能移动,否则会报错,找不到 CV 模块位置。

6 参考

Windows上使用CMake 有好多CMake的用法可以帮助理解

CMake(二)—— Windows下使用CMake 有启发

cmake: Visual Studio 15 2017 could not find any instance of Visual Studio 当时安装VS 2019,一直启动不了,后来才知道需要启动开发工具采用,只安装VS是不行的,它只是一个平台,比如还可以作为 python 的 IDE

CMake + OpenCV3.4.1 + VS2017静态编译 当时检索到的内容,内容具有一定参考性。