日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

ubuntu18.04下opencv用CPU编译全过程

發布時間:2023/12/14 Ubuntu 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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支持(圖形界面庫)

# 安裝gtk2支持 sudo apt-get install libgtk2.0-dev # 安裝gtk3支持 sudo apt-get install libgtk-3-dev

可選圖片支持庫

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,這里會有很神奇的事情發生,有一次再重新編譯過程中,我沒有鎖定python3的版本,發現cmake到make都沒問題,make install的時候opencv的動態庫自動匹配到了python2.7而給我安裝了opencv2.4.5的動態庫。。。但我的包是3.4.6,所以如果不是對2有要求,建議在配置鎖定。

# 安裝python2支持 # sudo apt-get install python-dev python-numpy # 安裝python3支持 sudo apt-get install python3-dev python3-numpy

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使用的話,這些包是不夠的,后面會提到還有哪些包缺失已經出問題的原因,這里可以引用一個超級大法,把能裝的都寫上跑一遍就行,當然這是沒有辦法的時候的辦法了。。。

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 unzip

ffmpeg安裝

我之前有總結過關于ffmpeg的編譯方式,這里就不過多引用了,根據需求進行編譯安裝:

ffmpeg利用NVIDIA硬件加速編譯

ffmpeg源碼帶libx264安裝并用ffplay推流測試

ffmpeg與srs3編譯以及常用命令測試總結

這里主要介紹一些依賴包的地址:

libogg
Oog 數據流庫, 是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 中需要添加參數 --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 中需要添加參數 --enable-libfdk_aac, 如果添加了 --enable-gpl參數, 還需要同時使用 --enable-nonfree 參數
https://github.com/mstorsjo/fdk-aac

libvpx

VP8/VP9 視頻編解碼器, 如果需要使用的話, 在編譯 ffmpeg 中需要添加參數 --enable-libvpx
https://chromium.googlesource.com/webm/libvpx.git


以上包的安裝方式都是找到configure所在目錄,然后編譯安裝:

./configure make make install

然后網上還有一種https的安裝方式,我嘗試過但請求被攔截了下來,因為ssl,所以還是用上面的安裝包,需要什么裝什么。

opencv安裝

當所有依賴和ffmpeg都安裝好并沒有問題的情況下,可以進行OpenCV的編譯,將opencv3.4.7解壓后創建build文件夾并進入:

# 新建build文件夾,存放構建文件 $ mkdir build $ cd build

執行cmake,構建CMakeLists.txt自動化創建makefile,cmake需要之前可以指定一些構建參數,用來確定安裝位置:

# 傻瓜式cmake cmake ../ # 帶參數cmake 默認位置安裝 cmake ../ -DWITH_CUDA=OFF -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF # 帶參數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進行編譯與滿屏的日志,這里還會出現一個問題,可能ippicv_2019_lnx_intel64_general_20180723.tgz沒有下載成功,因為它會向外網發送一個HTTP請求,如果下載失敗,我將資源上傳到了百度網盤里:鏈接:https://pan.baidu.com/s/1clRhwdCph4KtJcyTGg7sqA
提取碼:htpi

-- IPPICV: Download: ippicv_2019_lnx_intel64_general_20180723.tgz -- =======================================================================Couldn't download files from the Internet.Please check the Internet access on this host. =======================================================================CMake Warning at cmake/OpenCVDownload.cmake:193 (message):IPPICV: Download failed: 6;"Couldn't resolve host name"For details please refer to the download log file:/home/runone/program/opencv-3.4.7/build/CMakeDownloadLog.txt

如上,是失敗日志,我編譯了很多次都有概率出現安裝不下來的時候,然后每次手動加載包的時候又忘記放哪了,索性上傳網盤,如果鏈接失效,可以私信或者評論區留言。

下載好后,將文件放在opencv-3.4.7/3rdparty/ippicv下,然后更改ippicv下的ippicv.cmake 文件,vim進去后定位到47行,將路徑改成安裝包的絕對路徑的上一級,然后再次嘗試cmake:

出現如下日志,說明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的問題,如果依賴不是按照上述中安裝的那樣,會出現opencv檢索ffmpeg全no的情況:

FFMPEG: NOavcodec: NOavformat: NOavutil: NOswscale: NOavresample: NO

這個問題坑了我兩個多小時,網上面的解答都是說我沒有加檢索路徑,需要添加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-config

pkg-config的作用是:

  • 檢查庫的版本號。如果所需要的庫的版本不滿足要求,它會打印出錯誤信息,避免鏈接錯誤版本的庫文件。
  • 獲得編譯預處理參數,如宏定義,頭文件的位置。
  • 獲得鏈接參數,如庫及依賴的其它庫的位置,文件名及其它一些連接參數。
  • 自動加入所依賴的其它庫的設置。

另外還有一些其它問題,本篇CPU的話就不再贅述了,等之后寫關于GPU的編譯筆記在貼出遇到的錯誤,只能說遇到了太多太多問題。。。當我們CMake好后,需要看cmake輸出是否對 Link libraries 進行了兩個版本的python的鏈接,如果有,那么需要注意,最好是在環境變量中先暫時鎖定python3,因為上述沒有安裝python2的依賴,直接make可能會出問題。

如果檢查cmake輸出無誤,那么就可以進行make和make install,在CPU下,make一般不會出現問題,只有GPU才會報很多異常錯誤,這里make按照自己服務器的核數進行多核編譯,因為單核下,實在是太慢,所以我的編譯命令為:

make -j8 make install

不飄紅或者make error即為成功,然后將其導入環境配置項中:

# 將opencv添加到系統環境變量中,使得其他程序能夠找到opencv環境 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就算編譯成功,如果需要調用,找到編譯成功的python路徑下產生了cv2.cpython-36m-x86_64-linux-gnu.so,將其移動到所需項目下即可啟動。

總結

以上是生活随笔為你收集整理的ubuntu18.04下opencv用CPU编译全过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。