ubuntu18.04下opencv用CPU编译全过程
引言
本篇主要想總結一下Ubuntu下opencv對于CPU的編譯全過程,以及遇到的一些坑。
依賴項安裝
首先我們需要CMake來配置安裝,GCC進行編譯,Python-devel和Numpy來構建Python綁定等。
sudo apt-get install cmake sudo apt-get install gcc g++一般云服務器是沒有cmake的,而本地服務器的cmake也可能會版本比較低,如果需要編譯opencv4以上的版本,需要將cmake卸載,通過GitHub中的最新版源碼安裝,因為當前沒有官方源更新到相應的版本。
GTK支持(圖形界面庫)
可選圖片支持庫
sudo apt-get install libpng-dev sudo apt-get install libjpeg-dev sudo apt-get install libopenexr-dev sudo apt-get install libtiff-dev sudo apt-get install libwebp-d安裝python2、python3支持模塊
一般不建議安裝2的版本,在centos中因為yum連接為python2.7,這里會有很神奇的事情發(fā)生,有一次再重新編譯過程中,我沒有鎖定python3的版本,發(fā)現(xiàn)cmake到make都沒問題,make install的時候opencv的動態(tài)庫自動匹配到了python2.7而給我安裝了opencv2.4.5的動態(tài)庫。。。但我的包是3.4.6,所以如果不是對2有要求,建議在配置鎖定。
GUI功能的GTK支持,相機支持(v4l),媒體支持(ffmpeg,gstreamer)等。
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev當然,如果需要配合ffmpeg使用的話,這些包是不夠的,后面會提到還有哪些包缺失已經(jīng)出問題的原因,這里可以引用一個超級大法,把能裝的都寫上跑一遍就行,當然這是沒有辦法的時候的辦法了。。。
sudo apt-get -y install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264v4l-utils unzipffmpeg安裝
我之前有總結過關于ffmpeg的編譯方式,這里就不過多引用了,根據(jù)需求進行編譯安裝:
ffmpeg利用NVIDIA硬件加速編譯
ffmpeg源碼帶libx264安裝并用ffplay推流測試
ffmpeg與srs3編譯以及常用命令測試總結
這里主要介紹一些依賴包的地址:
libogg
Oog 數(shù)據(jù)流庫, 是libtheora 和 libvorbis 的依賴
libogg-1.3.2.tar.gz
Url:http://www.xiph.org/downloads/
lame
lame-3.99.5.tar.gz
Url:http://sourceforge.net/project/showfiles.php?group_id=290&package_id=309
NASM
一個匯編編譯器
nasm-2.13.01.tar.bz2
Url: http://www.nasm.us/pub/nasm/releasebuilds/2.13.01/nasm-2.13.01.tar.bz2
Yasm
另一個匯編編譯器
yasm-1.3.0.tar.gz
http://www.tortall.net/projects/yasm/releases/
libvorbis
libvorbis-1.3.3.tar.gz
Url:http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
(libvorbis依賴于libogg, 所以libogg必須先于libvorbis安裝)
xvid
xvidcore-1.3.2.tar.gz
Url:http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
x264
latest_x264.tar.bz2 (其中包含的目錄是 x264-snapshot-20131023-2245) ,H.264 的視頻編碼器, 如果需要使用的話, 在編譯 ffmpeg 中需要添加參數(shù) --enable-gpl --enable-libx264
Url:http://www.videolan.org/developers/x264.html
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/
amr-nb
amrnb-10.0.0.0.tar.bz2
http://ftp.penguin.cz/pub/users/utx/amr/ ( 從此處下載最新版本 )
amr-wb
amrwb-7.0.0.1.tar.bz2
http://ftp.penguin.cz/pub/users/utx/amr/ ( 從此處下載最新版本 )
faad2
faad2-2.7.tar.gz
http://www.audiocoding.com/downloads.html
libfdk_aac
AAC 音頻解碼器, 如果需要使用的話, 在編譯 ffmpeg 中需要添加參數(shù) --enable-libfdk_aac, 如果添加了 --enable-gpl參數(shù), 還需要同時使用 --enable-nonfree 參數(shù)
https://github.com/mstorsjo/fdk-aac
libvpx
VP8/VP9 視頻編解碼器, 如果需要使用的話, 在編譯 ffmpeg 中需要添加參數(shù) --enable-libvpx
https://chromium.googlesource.com/webm/libvpx.git
以上包的安裝方式都是找到configure所在目錄,然后編譯安裝:
./configure make make install然后網(wǎng)上還有一種https的安裝方式,我嘗試過但請求被攔截了下來,因為ssl,所以還是用上面的安裝包,需要什么裝什么。
opencv安裝
當所有依賴和ffmpeg都安裝好并沒有問題的情況下,可以進行OpenCV的編譯,將opencv3.4.7解壓后創(chuàng)建build文件夾并進入:
# 新建build文件夾,存放構建文件 $ mkdir build $ cd build執(zhí)行cmake,構建CMakeLists.txt自動化創(chuàng)建makefile,cmake需要之前可以指定一些構建參數(shù),用來確定安裝位置:
# 傻瓜式cmake cmake ../ # 帶參數(shù)cmake 默認位置安裝 cmake ../ -DWITH_CUDA=OFF -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF # 帶參數(shù)cmake 自定義位置安裝 cmake ../ -DWITH_CUDA=OFF -DCMAKE_INSTALL_PREFIX=/usr/local/opencv/opencv-3.4.7 -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF然后可以看到cmake進行編譯與滿屏的日志,這里還會出現(xiàn)一個問題,可能ippicv_2019_lnx_intel64_general_20180723.tgz沒有下載成功,因為它會向外網(wǎng)發(fā)送一個HTTP請求,如果下載失敗,我將資源上傳到了百度網(wǎng)盤里:鏈接:https://pan.baidu.com/s/1clRhwdCph4KtJcyTGg7sqA
提取碼:htpi
如上,是失敗日志,我編譯了很多次都有概率出現(xiàn)安裝不下來的時候,然后每次手動加載包的時候又忘記放哪了,索性上傳網(wǎng)盤,如果鏈接失效,可以私信或者評論區(qū)留言。
下載好后,將文件放在opencv-3.4.7/3rdparty/ippicv下,然后更改ippicv下的ippicv.cmake 文件,vim進去后定位到47行,將路徑改成安裝包的絕對路徑的上一級,然后再次嘗試cmake:
出現(xiàn)如下日志,說明ippicv_2019_lnx_intel64_general_20180723.tgz本地包加載成功:
-- IPPICV: Download: ippicv_2019_lnx_intel64_general_20180723.tgz -- found Intel IPP (ICV version): 2019.0.0 [2019.0.0 Gold] -- at: /home/program/opencv-3.4.7/build/3rdparty/ippicv/ippicv_lnx/icv -- found Intel IPP Integration Wrappers sources: 2019.0.0 -- at: /home/program/opencv-3.4.7/build/3rdparty/ippicv/ippicv_lnx/iw第二個問題 是關于ffmpeg的問題,如果依賴不是按照上述中安裝的那樣,會出現(xiàn)opencv檢索ffmpeg全no的情況:
FFMPEG: NOavcodec: NOavformat: NOavutil: NOswscale: NOavresample: NO這個問題坑了我兩個多小時,網(wǎng)上面的解答都是說我沒有加檢索路徑,需要添加ffmpeg的項,然后不外乎就是下面這幾句:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATHexport PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/ffmpeg/lib/pkgconfig:/usr/local/libsudo cp /usr/local/ffmpeg/lib/pkgconfig/* /usr/share/pkgconfig后來重新卸載了幾遍ffmpeg后,在編譯最后看到了問題所在。。這也說明,即使編譯輸出很多,但該檢索還是需要看一遍的:
Can't find ffmpeg - 'pkg-config' utility is missing那么這句話說明,少了pkg-config的依賴,我一直以為預裝好了,但沒有,so:
apt-get install pkg-configpkg-config的作用是:
- 檢查庫的版本號。如果所需要的庫的版本不滿足要求,它會打印出錯誤信息,避免鏈接錯誤版本的庫文件。
- 獲得編譯預處理參數(shù),如宏定義,頭文件的位置。
- 獲得鏈接參數(shù),如庫及依賴的其它庫的位置,文件名及其它一些連接參數(shù)。
- 自動加入所依賴的其它庫的設置。
另外還有一些其它問題,本篇CPU的話就不再贅述了,等之后寫關于GPU的編譯筆記在貼出遇到的錯誤,只能說遇到了太多太多問題。。。當我們CMake好后,需要看cmake輸出是否對 Link libraries 進行了兩個版本的python的鏈接,如果有,那么需要注意,最好是在環(huán)境變量中先暫時鎖定python3,因為上述沒有安裝python2的依賴,直接make可能會出問題。
如果檢查cmake輸出無誤,那么就可以進行make和make install,在CPU下,make一般不會出現(xiàn)問題,只有GPU才會報很多異常錯誤,這里make按照自己服務器的核數(shù)進行多核編譯,因為單核下,實在是太慢,所以我的編譯命令為:
make -j8 make install不飄紅或者make error即為成功,然后將其導入環(huán)境配置項中:
# 將opencv添加到系統(tǒng)環(huán)境變量中,使得其他程序能夠找到opencv環(huán)境 vim /etc/ld.so.conf.d/opencv.conf 追加 /usr/local/opencv3/lib64/ sudo ldconfig -v sudo cp /usr/local/opencv3/lib64/pkgconfig/opencv.pc /usr/share/pkgconfig/#測試opencv是否安裝成功 pkg-config --modversion opencv # 顯示如下 3.4.7到此,opencv就算編譯成功,如果需要調(diào)用,找到編譯成功的python路徑下產(chǎn)生了cv2.cpython-36m-x86_64-linux-gnu.so,將其移動到所需項目下即可啟動。
總結
以上是生活随笔為你收集整理的ubuntu18.04下opencv用CPU编译全过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos6.5 一件安装FFmpeg
- 下一篇: Linux环境下FFMPEG的安装与配置