1. 程式人生 > >OpenCV4.4.0 安裝測試 Installation & Examination (Ubuntu18.04, Ubuntu 20.04)

OpenCV4.4.0 安裝測試 Installation & Examination (Ubuntu18.04, Ubuntu 20.04)

# **OpenCV4.4.0 安裝測試 Installation & Examination (Ubuntu18.04, Ubuntu 20.04)** > 單純簡單的 OpenCV 安裝配置方法,在這個地方已經踩過好幾次坑了,這次是基於 WSL 平臺,Ubuntu 20.04 進行的安裝,但是其中遇到的問題基本上已經足夠用於 Linux 系統的各種意外了 ## **下載 dependencies** 安裝 `OpenCV4.4` 需要一些準備工作(不包含 python),首先要做的是下載它的一些 dependency(來自 [**Ubuntu 20.04 從原始碼編譯並配置OpenCV 4.4.0 以及 python 3.8 支援**](https://www.jianshu.com/p/26dd452a362e)): ```bash # If you don't have cmake: # sudo apt-get install cmake sudo apt-get install libswscale-dev libtiff5-dev libgtk2.0-dev pkg-config sudo apt install build-essential sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev # If need to support python3: # sudo apt install python3-dev python3-numpy # If need ffmpeg: sudo apt install ffmpeg ``` 如果安裝成功了就不用看下面這些了,但是我遇到了各種問題: ### **意外Ⅰ.依賴損壞導致的 apt-get 中 Unmet dependencies 問題** 可能系統由於之前某(幾)次 `apt-get upgrade` 過程中斷,導致依賴損壞;安裝新的包時,提示Unmet dependencies,解決方案來源於[**如何解決 apt-get 中 Unmet dependencies 問題**](https://blog.csdn.net/jinguangliu/article/details/78145423),這個時候可以嘗試去根據提示資訊,執行 `apt-get -f install` 來修復問題就解決了。 簡單來說,就是先執行上述修復命令,然後更新升級一下確保沒留什麼隱患: ```bash sudo apt --fix-broken install sudo apt-get update sudo apt-get upgrade ``` 如果網路不好,你可以執行多次這些命令,下到一半的包(據我所知)是可以接著前面繼續下載的... ... ### **意外Ⅱ.Ubuntu18.04^+^上找不到 libpng12.0 的問題** 在上面安裝包的時候發生報錯類似於 `Package libpng12-0 is not installed`,而且無論如何掙扎,網有多好都裝不上這個東西,解決方案來自[**修復了在 Ubuntu 18.04、19.10、20.04 上找不到的 libpng12-0**](https://zh.codepre.com/how-to-8413.html),據說這已經不是個新的問題了,只是使用者升級到更高版本如18.04,19.10,20.04後,“`libpng12` 不再在Ubuntu儲存庫檔案中可用,從而導致新的 libpng(`libpng16`)庫安裝失敗。” 這裡是 Ubuntu20.04、19.10 或 19.04 上的問題的解決方案,可以使用使用更新的libpng12-0軟體包建立的 PPA 安裝 libpng。新增 PPA 並使用以下命令安裝 libpng12-0(手動安裝、18.04/Linux Mint 19 的解決方案以及其它問題見前面的連結): ```bash sudo add-apt-repository ppa:linuxuprising/libpng12 sudo apt update sudo apt install libpng12-0 ``` 成功後,PPA 版本中不再發生上述錯誤。 ### **意外Ⅲ.Ubuntu20.04^+^ 系統遇到的 Can not locate package "libjasper-dev"** 如果報錯 `Can not locate package "libjasper-dev"`,八成是網路差造成的,解決方案為新增一下下面這個源: ```bash sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" ``` 然後重新 install 一下 `libjasper-dev` 相關的庫大概就可以了。 ## **安裝&編譯** ### **生成 Makefile** 注意上面的都務必先安裝成功,然後輸入如下命令構建 Makefile: ```bash cd opencv-4.4.0 mkdir build cd build cmake \ -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=ON \ -D OPENCV_EXTRA_MODULES_PATH=/home/optic_css/opencv-4.4.0/opencv_contrib-4.4.0/modules/ \ -D BUILD_opencv_world=YES \ -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=OFF \ -D WITH_OPENGL=ON -D WITH_EIGEN=ON \ -D BUILD_EXAMPLES=ON -D BUILD_DOCS=ON \ .. ``` 上面的`cmake`命令中有幾點需要註明的: - `CMAKE_BUILD_TYPE`一定要設定成`Release`的; - `CMAKE_INSTALL_PREFIX`要寫成你自己想要安裝的路徑,不寫的話預設是`/usr/local`的`include/`, `bin/`, `lib/`3個資料夾下; - 由於4.0以後的版本不再有預設設定的`opencv4.pc`檔案,在這裡要記得手動設定下`OPENCV_GENERATE_PKGCONFIG`是開著的來支援pkg-config功能; - `OPENCV_ENABLE_NONFREE`開啟後會允許使用已申請專利的演算法們,還是值得開啟一下的; - `OPENCV_EXTRA_MODULES_PATH`填寫`contrib`庫的位置,我的`contrib`原始檔放在了`opencv-4.4.0`的資料夾下,按理說可以放在任何位置,最好弄得和我一樣叭; - `BUILD_opencv_world`作為綜合所有標頭檔案的東西,還是打上勾; - 這裡把關於`python`方面的編譯都給關掉了; - 為了使用相關的`example`和`doc`,把這兩個對應的開關開啟; ### **意外Ⅳ. Makefile生成時卡在了ippicv的下載上** 在 `cmake ..` 命令執行時,卡在了(基本是因為網太差,或者是網址被 ban 了): ```bash IPPICV: Download: ippicv_2020_lnx_intel64_20191018_general.tgz ``` 解決方案參考了[**OpenCV 中手動安裝 ippicv(ubuntu)**](https://www.jianshu.com/p/3c2fc0da7398),具體來說,採取的是先找到下載這個東西的網址,然後進入網址手動下載後放在XXX路徑,去檔案裡面手動改一下下載路徑到本地路徑即可。 下載 ippcv 檔案的網址被放在了 `opencv-x.x.x\3rdparty\ippicv\ippicv.cmake` 檔案中,開啟檔案,找到下面這三部分語句: ```cmake # Commit SHA in the opencv_3rdparty repo set(IPPICV_COMMIT "a56b6ac6f030c312b2dce17430eef13aed9af274") ################################################################################################ "${OPENCV_IPPICV_URL}" "$ENV{OPENCV_IPPICV_URL}" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/" ################################################################################################ if(X86_64) set(OPENCV_ICV_NAME "ippicv_2020_lnx_intel64_20191018_general.tgz") set(OPENCV_ICV_HASH "7421de0095c7a39162ae13a6098782f9") ``` 提取一下紅色字串裡面的資訊,得到目標檔案的下載網址為 https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_lnx_intel64_20191018_general.tgz,下載得到 `ippicv_2020_lnx_intel64_20191018_general.tgz`,把檔案放在一個你喜歡的位置,我放在了 `file:/home/optic_css/opencv-4.4.0`(如果不能下載,移步 [**ubuntu 安裝 opencv 無法下載 IPPICV 的問題ippicv_2020_lnx_intel64_20191018_general.tgz**](https://blog.csdn.net/gadwgdsk/article/details/107423625))。這樣之後再把以前的檔案中的網址改成本地地址就好了,也就是說,把 `ippicv.cmake` 檔案中的: ```cmake "${OPENCV_IPPICV_URL}" "$ENV{OPENCV_IPPICV_URL}" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/" ``` 改成你的本地下載地址: ```cmake "${OPENCV_IPPICV_URL}" "$ENV{OPENCV_IPPICV_URL}" "file:/home/optic_css/opencv-4.4.0" #"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/" ``` ### **意外Ⅴ. Makefile生成後發現有未能下載的檔案** 發現有下面這些檔案在 `cmake` 的時候沒有下載下來(你可以在 `build/CMakeDownloadLog.txt` 中檢視,查詢 `#cmake_download`,在其後首先列出的是檔名
,接著是下載地址): - ~"/home/optic_css/opencv-4.4.0/.cache/ade/b624b995ec9c439cbc2e9e6ee940d3a2-v0.1.1f.zip"~ "https://github.com/opencv/ade/archive/v0.1.1f.zip" - ~"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i"~ "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i" - ~"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/232c966b13651bd0e46a1497b0852191-boostdesc_bgm_bi.i"~ "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_bi.i" - ~"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/324426a24fa56ad9c5b8e3e0b3e5303e-boostdesc_bgm_hd.i"~ "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_hd.i" - ~"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/202e1b3e9fec871b04da31f7f016679f-boostdesc_binboost_064.i"~ "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_064.i" - ~"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/98ea99d399965c03d555cef3ea502a0b-boostdesc_binboost_128.i"~ "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_128.i" - ~"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/e6dcfa9f647779eb1ce446a8d759b6ea-boostdesc_binboost_256.i"~ "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_256.i" - ~"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/0ae0675534aa318d9668f2a179c2a052-boostdesc_lbgm.i"~ "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_lbgm.i" - ~"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/vgg/e8d0dcd54d1bcfdc29203d011a797179-vgg_generated_48.i"~ "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_48.i" - ~"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/vgg/7126a5d9a8884ebca5aea5d63d677225-vgg_generated_64.i"~ "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_64.i" - ~"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/vgg/7cd47228edec52b6d82f46511af325c5-vgg_generated_80.i"~ "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_80.i" - ~"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/vgg/151805e03568c9f490a5e3a872777b75-vgg_generated_120.i"~ "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_120.i" 於是手動一個一個地把它們下載下來,放在路徑 `/opencv-4.4.0/opencv_contrib-4.4.0/modules/xfeatures2d/src/` 下就可以了,不用再次生成 Makefile。 ### **編譯(未在編譯中遇到除了時間長以外的任何問題)** 有在編譯中遇到問題的可以看 [**Ubuntu18.04+Opencv4.4.0+contrib 詳細配置過程**](https://blog.csdn.net/cloud_shen/article/details/107878654)或者[**自己去網上查**]()。 生成好 Makefile 之後就可以直接編譯、下載了(先看一下電腦有幾個核,考慮多執行緒編譯叭,不然直接慢die): ```bash make -j8 sudo make install ``` 開了八個執行緒之後的結果就是等了將近一個小時,編譯成功輸出的東西是下面這一坨:[**OpenCV4.4.0 Compiling Output**](2020. Oct. [email protected]),雖然基本看不懂裡面那些庫都是啥,但是仍然很有成就感? ## **OpenCV4.4.0的環境配置** ### **新增/usr/local/lib作為程式執行時共享庫*.so的路徑** 在 `/etc/ld.so.conf.d/opencv4.conf` 中(如果沒有就自己新建一個)寫入 `/usr/local/lib`,用 `nano` 開啟這個檔案並修改: ```bash sudo nano /etc/ld.so.conf.d/opencv4.conf ``` 沒有的話就直接新建,然後寫入這個內容: ```bash # libc default configuration /usr/local/lib ``` 儲存(似乎是 Ctrl+X,然後 Y 確認寫入 Buffer,然後 Enter 確認要把檔案命名為預設),然後更新一下配置: ```bash sudo ldconfig ``` ### **配置pkg-config環境到bash.bashrc** 向上面一樣,`nano` 開啟 `/etc/bash.bashrc `: ```bash sudo nano /etc/bash.bashrc ``` 然後在檔案內容的末尾加上這些: ```bash # Add in the end PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH ``` 儲存,然後啟用一下: ```bash source /etc/bash.bashrc sudo updatedb ``` ### **寫/usr/local/lib到ld.so.conf** 有時會報錯 `error while loading shared libraries: libopencv_core.so.*`,因此無論如何也應該加一句 `/usr/local/lib` 到 `/etc/ld.so.conf`,不贅述,直接進入然後加上這一句就好了: ```bash sudo nano /etc/ld.so.conf ``` 儲存,然後更新一下: ```bash sudo ldconfig ``` ## **檢測OpenCV4.4.0安裝成功** 這樣就算是安裝完成了,就算你執行: ```bash pkg-config --modversion opencv ``` 然後告訴你找不到這個包也無所謂,因為我們安裝的是新版本,要執行與檢測的是: ```bash pkg-config --modversion opencv4 ``` 輸出,如果不行的話就有必要去看看 [**Package opencv was not found in the pkg-config search path**](https://blog.csdn.net/PecoHe/article/details/97476135): ```bash root@LAPTOP-3SQ4QCQT:/home/optic_css# pkg-config --modversion opencv4 >
> 4.4.0 ``` 就算是成功了,進一步還可以執行如下指令,試一下程式碼是否能跑出來: ```bash cd /mnt/c/Users/a1020/Desktop/Reinforcement_ELyou/Demolist/slamdemo/slambook/ch6 mkdir build cd build cmake .. make -j8 ``` --- > **[0.0]** 面號:**[OPTSxNaN]** > Too basic to have N