generate报错 make_如何安装opencv_contrib及解决其安装编译问题
1、背景
最近在實現一個基于opencv3的自動人臉識別項目,主要是使用了cv2.face模塊自帶的三種人臉識別算法,分別是cv2.face.EigenFaceRecognizer_create()、cv2.face.FisherFaceRecognizer_create()以及cv2.face.LBPHFaceRecognizer_create(),這三個算法一個比一個效果好,但是在運行代碼時,出現了如下問題:
AttributeError: module ‘cv2.cv2’ has no attribute ‘face’
網上搜索后,得知是因為cv2.face模塊因穩定性和測試不足問題沒有在opencv3庫上自帶,需要自己下載opencv3和opencv_contrib源代碼使用CMake和visual studio編譯!
2、下載CMake和opencv/opencv_contrib
根據提示,基于自身的環境一步一步的下載相關代碼:
環境:win10 x64 + python3.6.2
(因網絡原因后來我到百度上下載了CMake 3.8.0,已放在百度網盤:
安裝CMake并解壓opencv和opencv_contrib source code到同一個文件夾上!
3、使用CMake生成opencv_contrib的python接口
我覺得步驟還是蠻簡單的:
3.1、選取opencv source目錄和build output目錄
如下圖:
1是opencv的source code路徑,2是CMake output(包括configure和generate)的目錄
3.2、第一次點擊左下角的Configure
這一步主要是根據opencv source code路徑下的CMakeLists.txt生成一些配置選項
如果看到CMake底部log輸出窗口輸出“Configuring done”則說明第一步成功了。
3.3、配置OPENCV_EXTRA_MODULES_PATH
這一步就是要配置opencv_contrib的路徑,以便生成opencv_contrib相關模塊的庫函數接口
找到OPENCV_EXTRA_MODULES_PATH,然后選擇opencv_contrib/modules所在路徑
C:\Users\Administrator\Desktop\build\opencv\opencv_contrib-master\modules
3.4、檢查是否包含有BUILD_opencv_python3
這一步就是要檢查是否包含BUILD_opencv_python3或BUILD_opencv_python2,這與個人系統環境是否包含python3或python2有關,為后來生成opencv_contrib的python接口做準備
對應目錄應該是C:\Users\Administrator\Desktop\build\opencv\opencv-3.3.0\modules\python
3.5、第二次點擊左下角的Configure
這一步根據之前配置的opencv_contrib path重新生成配置項
3.6、直接點擊左下角Generate生成visual studio項目文件
之前Configure時無錯誤則可直接等待幾分鐘生成visual studio文件
如果看到“Configure done”和“Generate done”字眼說明成功了。
4、解決CMake報錯CXX/C compiler unknown的問題
題主使用CMake時遇到如下問題:
The CXX compiler identification is unknown
The C compiler identification is unknown
從錯誤log來看就是C/C++編譯器找不到了,可是在第一次Configure時都會跳出如下選框選擇默認編譯器的。
注意:我發現一個規律,如果重新配置CMake的“where to build the binaries” 路徑,可以重新選擇編譯器版本,網上有些說需要重新安裝CMake來選擇編譯器其實是不需要的!
后來,我嘗試選了不同的編譯器,但是發現都無效,后來想想是不是自己沒有安裝visual studio啊(前段時間重裝了win10系統沒有安裝任何版本的visual studio),打開控制面板查看已安裝的程序,果然沒有安裝任何版本的visual studio!!!
折騰一番,安裝好visual studio后,選擇對應的visual studio版本,這次終于可以了!
5、使用visual studio生成帶有opencv_contrib接口的opencv庫
5.1 visual studio打開OpenCV.sln
CMake Genarate成功后,會在CMake output目錄下生成一堆東西,在根目錄下,找到OpenCV.sln,然后使用相應的visual studio打開加載該解決方案。
5.2、設定“配置管理器”
這一步主要是設定“解決方案”為“release”而不是“debug”
再visual studio界面:生成–>配置管理器–>“活動解決方案配置”由“debug”改為“release”
5.3、逐個編譯CMakeTargets
分別對INSTALL、ALL_BUILD以及BUILD_opencv_python3右鍵單擊”生成“,等待直到編譯完成無報錯信息,如果有報錯信息且是一些不太常用的模塊,則可到CMake界面配置項里將相應模塊去掉,即將相應的勾去掉不包含進來,如下是將ximgproc去掉,然后再重新來一遍,直到沒有任何報錯信息!
5.4、拿到cv2.cp36-win_amd64.pyd放到python安裝目錄下
visual studio編譯生成opencv python接口后,會在CMake output路徑下的lib\python3\Release生成帶有opencv_contrib接口的opencv庫文件,如cv2.cp36-win_amd64.pyd,將其放到相應的python安裝目錄lib/site-packet/cv2下即可使用!
比如ximgproc模塊報錯,那就到CMake里將BUILD_opencv_ximgproc配置項去掉!
如果在對“INSTALL”生成編譯過程中報如下錯誤:
50>C:\Users\Administrator\Desktop\build\opencv\opencv_contrib-master\modules\xfeatures2d\src\sift.cpp(1156): error C2039: “removeDuplicatedSorted”: 不是“cv::KeyPointsFilter”的成員
50>C:\Users\Administrator\Desktop\build\opencv\opencv-3.3.0\modules\features2d\include\opencv2/features2d.hpp(99): note: 參見“cv::KeyPointsFilter”的聲明
50>C:\Users\Administrator\Desktop\build\opencv\opencv_contrib-master\modules\xfeatures2d\src\sift.cpp(1156): error C3861: “removeDuplicatedSorted”: 找不到標識符
則到類KeyPointsFilter查看確實沒有“removeDuplicatedSorted”這個接口,但是卻有“removeDuplicated”,所以將其修改成正確的接口,如下:
調用cv2函數庫時,如果提示“from .cv2 import * ImportError: DLL load failed: 找不到指定的模塊”,則需要使用Depends.exe查看dll依賴關系,如果缺少一些dll庫,可以安裝Visual C++ Redistributable for Visual Studio 2015(Visual C++ Redistributable for Visual Studio 2015)或者版本更高的reditexe試試!
后記:
以上是不是太折騰了,其實PyPI上早已幫我們編譯好相應安裝包了,執行一條語句即可完成安裝:pip install opencv-contrib-python
總結
以上是生活随笔為你收集整理的generate报错 make_如何安装opencv_contrib及解决其安装编译问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 邀请合作如何表达_有偿兼职!土木在线全媒
- 下一篇: a commit git 参数是什么意思