Ubuntu14.04下OpenCV2.4.9+FFmpeg1.2.12安裝配置及問題解決方案

在視頻處理過程中用到時空興趣點[1](Space-Time Interest Points,STIP)和改進的密集軌跡[2](Improved Dense Trajectories,IDT)這兩種特徵提取方法,兩者都是應用十分普遍的算法。我們可以在作者主頁上找到公開的算法源碼,它們在Linux下需要OpenCV和FFmpeg的支持方可順利運行。之前已經用過這兩種工具,現在換了工作環境後想要再用,但是配置和安裝過程中依舊出現不少問題。因此在搞定之後覺得很有必要將具體過程和遇到的問題及解決方案記錄下來以備後用,也希望能夠給其他人帶來一點點幫助。


OpenCV2.4.9及FFmpeg1.2.12源碼包下載

這兩個軟件在官網都可以直接找到各種版本的源碼包,下載之後編譯安裝。如果不是特別需要最新版本的軟件,個人建議採用那些已被多數人使用過的偏早期版本,出現問題時也能夠較爲方便地找到對應的解決方案。我選用的分別是OpenCV2.4.9和FFmpeg1.2.12這兩個版本。

FFmpeg編譯配置

FFmpeg是一個領先的多媒體框架,可以用來記錄、轉換數字音頻、視頻,並能將其轉化爲流的開源程序,它包括了目前領先的音/視頻編碼庫libavcodec、libavutil、libavformat等[3]

1.卸載之前安裝的FFmpeg和x264軟件
爲了防止出現版本問題等,建議先卸載之前(可能)安裝的相關版本。命令如下:

sudo apt-get -qq remove ffmpeg x264 libx264-dev

2.安裝依賴項及相關軟件

sudo apt-get install yasm
sudo aptitude install libx264-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev  libxext-dev libxfixes-dev

3.編譯安裝
解壓下載的FFmpeg包,進入解壓的目錄

cd ffmpeg-1.2.12

環境配置[4]

./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvorbis --enable-nonfree --enable-pic --enable-shared

注意複製的過程中可能會有回車或字符問題,如果提示命令有問題,需要仔細檢查空格及回車。上面使用prefix指定了軟件的安裝路徑,則需要在配置文件中修改相應的路徑,讓系統能夠找到FFmpeg的安裝路徑:

vi /etc/profile

按insert鍵,在該文件的末尾加上如下兩行:

export FFMPEG_HOME=/usr/local/ffmpeg 
export PATH=$FFMPEG_HOME/bin:$PATH

按Esc鍵輸入“:wq”即可退出並保存,再令上面的修改生效,命令如下:

source profile

一切配置完成後,準備安裝,命令如下:

make
make install

安裝之後在/usr/local/ffmpeg會看到有三個目錄:bin 執行文件目錄,lib 靜態、動態鏈接庫目錄,include 編程用到的頭文件。

4.檢查安裝配置是否正確
網上有說通過執行bin目錄下的ffplay播放視頻文件來測試是否安裝成功。但是我編譯安裝之後並沒有生成ffplay,bin目錄下只有ffmpeg和ffserver。因此這裏採用直接檢查版本是否正確,之後使用時也沒有出現問題。命令如下:

ffmpeg -version

此時出現正確的版本及配置信息,說明安裝成功。

OpenCV編譯安裝

OpenCV的全稱是:Open Source Computer Vision Library。OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法[5]

1.安裝依賴項

sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libopencore-amrnb-dev libopencore-amrwb-dev x264 v4l-utils 

2.編譯安裝
解壓下載的OpenCV包,進入解壓的目錄

cd opencv-2.4.9

創建編譯目錄,編譯安裝

mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install

這裏編譯時間較長,完成後會在最後一行打印如下提示信息:

-- Configuring done
-- Generating done
-- Build files have been written to: /opt/opencv-2.4.9

在編譯過程中,可能會在Configuring done這一行停留時間很久,不要因爲着急終止編譯,需要耐心等待編譯全部完成。安裝過程中會出現“[10%]”百分比形式的進度提示,過程也會很慢,請耐心等待。

提示:cmake完成後會出現相關信息,其中可以查看是否已經支持FFmpeg,支持的話FFMPEG後將出現YES,下面還有一些編碼及格式同爲YES。

3.環境配置
所有的庫文件默認安裝在 /usr/local/lib 下, 所有的頭文件安裝在 /usr/local/include/opcv*/下面。修改環境配置[6],命令如下:

vim /etc/ld.so.conf

按insert鍵在文件最後一行加入

/usr/local/lib

按Esc鍵輸入“:wq”即可退出並保存,再執行以下命令:

ldconfig

至此,OpenCV安裝完成。

libcxcore.so.2無法找到問題解決方案

OpenCV安裝完成後,測試IDT算法可以正常運行,但是執行STIP程序時出現如下錯誤:

./bin/stipdet: error while loading shared libraries: libcxcore.so.2: cannot open shared object file: No such file or directory

看問題意思是程序執行過程中無法找到共享庫文件libcxcore.so.2,不存在這個文件或路徑。從網上搜索結果來看,出現這個問題多數都是準備使用STIP來獲取視頻特徵的,密集軌跡程序則並沒有這個問題。stackoverflow網站上有這個問題以及幾種解決的方案,可供參考[7]

創建軟鏈接等方式在我這裏沒有成功,可能是當時沒有設置正確,之後又沒有root權限,最終採用了一種臨時的辦法。設置共享庫搜索目錄,命令如下:

export LD_LIBRARY_PATH=[enter your path]/opencv-2.4.9/release/lib

在Linux下執行某些外部程序的時候可能會提示找不到共享庫的錯誤,這比較常見。執行STIP出現這個問題的原因是儘管已經安裝了該共享庫,但是在準備調用的時候,程序無法找到該文件。

我的問題在於共享庫文件安裝到了其它“非/lib或/usr/lib”目錄下,但是安裝完成之後非root用戶沒有權限在“/etc/ld.so.conf”中加路徑。因此export一個全局變量LD_LIBRARY_PATH,然後運行程序的時候就會去這個目錄中找共享庫[8]

執行STIP程序

在該目錄下直接執行“./bin/stipdet –help”會無法執行,必須將stipdet和stipshow這兩個文件變成可執行文件。爲了方便我就直接將其改成完全公開可執行的權限[9]。命令如下:

chmod 777 bin/stipdet
chmod 777 bin/stipshow

對於密集軌跡的程序採用同樣的方式,就可以正常執行了。此外,由於export的全局變量每次關閉命令窗口之後就不再生效。因此在執行STIP程序前必須先按照上述方法設置共享庫搜索目錄,就不會出現libcxcore.so.2無法找到的問題。

OpenCV版本查看

在使用過程中可能會需要查看安裝的OpenCV版本,可以採用如下命令[10]

pkg-config --modversion opencv

pkg-config是編譯應用程序和庫文件的一個十分有用的工具,其功能之一就是檢查庫的版本號。

Python調用OpenCV模塊

如果需要用Python來調用OpenCV模塊,可以先安裝Python再載入cv即可[4]。命令如下:

sudo apt-get install python-opencv
sudo apt-get install python-numpy
python
import cv


參考文獻:
[1] https://www.di.ens.fr/~laptev/interestpoints.html
[2] https://lear.inrialpes.fr/people/wang/improved_trajectories
[3] https://ffmpeg.org/about.html
[4] http://blog.csdn.net/u010106759/article/details/51931815
[5] http://opencv.org/
[6] http://blog.csdn.net/firefoxbug/article/details/7554409
[7] http://stackoverflow.com/questions/5212728/libcxcore-so-2-missing-in-opencv
[8] http://blog.csdn.net/sahusoft/article/details/7388617
[9] http://blog.chinaunix.net/uid-21880738-id-1813031.html
[10] http://blog.csdn.net/ppp2006/article/details/47445903

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章