Scientific Linux7でOpenCVインストール
はじめに
本記事では、以下の項目を満たすOpenCVの環境構築を目的とします。
- Scientific LinuxでスムーズなOpenCVの導入が行える
- OpenCVの基本的な機能を扱える
- 一般的な動画の入出力が行える
- GPU演算環境は考慮しない
動画を扱わないのであれば、
[root@localhost ~]#su [root@localhost ~]#yum install opencv-devel
の実行だけで導入できる。
環境
- Scientific Linux 7.2 x86_64
導入パッケージ
Package | Version | Link | Remarks | Requirements |
---|---|---|---|---|
OpenCV | 2.4.13 | sourceforge.net | OpenCV本体 | CMake,TBB,FFmpeg |
FFmpeg | 3.1.1 | ffmpeg.org | OpenCVで動画を扱う場合必要 | x264,x265,vpx,theora |
x264 | 20160707-2245 | download.videolan.org | x264ビデオコーデックへの対応 | YASM |
x265 | 1.9 | bitbucket.org | x265ビデオコーデックへの対応 | CMake,NUMA |
vpx | 1.6.0 | chromium.googlesource.com | vpxビデオコーデックへの対応 | |
theora | 1.1.1 | theora.org | theoraビデオコーデックへの対応 | ogg |
ogg | 1.3.2 | xiph.org | oggオーディオコーデックへの対応 | |
YASM | 1.3.0 | yasm.tortall.net | x264等コンパイルに必要 | GCC |
CMake | 2.8.11 | yum | OpenCV,x265コンパイルに必要 | GCC-C++ |
GCC | 4.8.5 | yum | YASM等コンパイルに必要 | |
GCC-C++ | 4.8.5 | yum | CMake等コンパイルに必要 | |
NUMA | 2.0.9 | yum | x265コンパイルに必要 | |
TBB | 4.1 | yum | ビルドの高速化 | |
Git | 1.8.3.1 | yum | ソースコードの取得(vpx) |
他、扱う動画によって追加してください。
Linkがyumのものに関しては、ScientificLinux7.2のパッケージ管理ツールyumで対応出来るため、導入簡略化の意味も含め利用します。
インストール
インストールにあたりパッケージ間の依存関係が重要となります.
例えばFFmpegをインストールするためには要求されるx264,x265,vpx,theoraがインストールされている必要があります.
下記の順に従えば依存関係は問題となりませんが,上記導入パッケージのRequirementsの項目で確認できますので参考までにどうぞ.
0.環境のクリーンアップ
OpenCVをインストールするうえで障害となりうるパッケージを整理しておく.
1.YUMでの事前準備
まずyumからの設定。
以下のパッケージをyumからインストール。
端末を起動してスーパユーザー(root)にて以下のコマンドを実行。
以後スーパーユーザー(root)で実行の場合[root@localhost ~]
と表記する。(通常は[user@localhost ~]
)
[root@localhost ~]#su [root@localhost ~]#yum install cmake gcc gcc-c++ numactl numactl-devel
ここで、CMakeのバージョンについてOpenCV・x265それぞれの最低要求バージョンがあります。
- OpenCV-2.4.13 =>CMake-2.8.11以上
- x265 =>CMake-2.8.8以上
従ってyumでインストールしたCMakeのバージョンを確認。
[user@localhost src]# cmake --version cmake version 2.8.11
CMake-2.8.11がインストールされていますのでOKです。
2.8.8以前が入っている場合、スーパーユーザーで削除([root@localhost ~]#yum remove cmake
)
CMake公式ページより2.8.11以降のバージョンをダウンロード、コンパイル、インストールを行ってください。
※以後、ソースコードからのインストールになります。インストール後のディレクトリはアンインストール時に使用しますので削除しないでください。
2. YASMのインストール
今回はLinuxのディレクトリ構成に従いインストールしていく。ソースコード置き場/usr/local/src
に移動。
wget
コマンドでソースコードのダウンロード。(コマンドが見つからない場合はyum install wget
の実行)
x264の依存パッケージのためx264より先にインストールしておく必要があります。
[root@localhost ~]#cd /usr/local/src [root@localhost src]#wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz [root@localhost src]#tar xvf yasm-*.tar.gz [root@localhost src]#cd yasm-1.3.0 [root@localhost yasm-1.3.0]#./configure [root@localhost yasm-1.3.0]#make [root@localhost yasm-1.3.0]#make install
3. x264のインストール
FFmpegの依存パッケージのためFFmpegより先にインストールしておく必要があります。
[root@localhost ~]#cd /usr/local/src [root@localhost src]#wget http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20160707-2245.tar.bz2 [root@localhost src]#tar xvf x264-*.tar.bz2 [root@localhost src]#cd x264-snapshot-20160707-2245 [root@localhost yasm-1.3.0]#./configure --enable-shared --enable-pic [root@localhost yasm-1.3.0]#make [root@localhost yasm-1.3.0]#make install
ここで、x264(以降のx265,OpenCV)はpkg-config対応のため以下のパス設定を行う。通常ユーザーで行ってください。
rootで行ってしまうと通常ユーザーで反映できません。
一度行えば以後行う必要はありません。
[user@localhost ~]#echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig" >> ~/.bashrc [user@localhost ~]#echo "export LD_LIBRARY_PATH=/usr/local/lib" >> ~/.bashrc [user@localhost ~]#source ~/.bashrc
4. x265のインストール
FFmpegの依存パッケージのためFFmpegより先にインストールしておく必要があります。
[root@localhost ~]#cd /usr/local/src [root@localhost src]#wget https://bitbucket.org/multicoreware/x265/downloads/x265_1.9.tar.gz [root@localhost src]#tar xvf x265_*.tar.gz [root@localhost src]#cd x265_1.9/build/linux [root@localhost x265_1.9]#cmake ../../source [root@localhost x265_1.9]#make [root@localhost x265_1.9]#make install
5. vpxのインストール
FFmpegの依存パッケージのためFFmpegより先にインストールしておく必要があります.
[root@localhost ~]#cd /usr/local/src [root@localhost src]#git clone https://chromium.googlesource.com/webm/libvpx [root@localhost src]#cd libvpx [root@localhost libvpx]#./configure [root@localhost libvpx]#make [root@localhost libvpx]#make install
5. oggのインストール
theoraの依存パッケージのためtheoraより先にインストールしておく必要があります。
[root@localhost ~]#cd /usr/local/src [root@localhost src]#wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz [root@localhost src]#tar xvf libogg-*.tar.gz [root@localhost src]#cd libogg-1.3.2 [root@localhost libogg-1.3.2]#./configure [root@localhost libogg-1.3.2]#make [root@localhost libogg-1.3.2]#make install
6. theoraのインストール
FFmpegの依存パッケージのためFFmpegより先にインストールしておく必要があります。
[root@localhost ~]#cd /usr/local/src [root@localhost src]#wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2 [root@localhost src]#tar xvf libtheora-*.tar.bz2 [root@localhost src]#cd libtheora-1.1.1 [root@localhost libtheora-1.1.1]#./configure [root@localhost libtheora-1.1.1]#make [root@localhost libtheora-1.1.1]#make install
7.FFmpegのインストール
OpenCVの依存パッケージのためOpenCVより先にインストールしておく必要があります。
[root@localhost ~]#cd /usr/local/src [root@localhost src]#wget https://ffmpeg.org/releases/ffmpeg-3.1.1.tar.bz2 [root@localhost src]#tar xvf ffmpeg-*.tar.bz2 [root@localhost src]#cd ffmpeg-3.1.1 [root@localhost ffmpeg-3.1.1]#./configure --enable-libx264 --enable-gpl --enable-libx265 --enable-libvpx --enable-libtheora --enable-nonfree [root@localhost ffmpeg-3.1.1]#make [root@localhost ffmpeg-3.1.1]#make install
8. OpenCVのインストール
[root@localhost ~]#cd /usr/local/src [root@localhost src]#wget https://github.com/Itseez/opencv/archive/2.4.13.zip [root@localhost src]#unzip 2.4.13.zip [root@localhost src]#cd opencv-2.4.13 [root@localhost opencv-2.4.13]#mkdir build [root@localhost opencv-2.4.13]#cd build [root@localhost build]#cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=NO ../
以上でOpenCVの導入完了です。
OpenCVの使い方
前述しましたが、OpenCVはpkgconfigに対応しており、pkgconfigからインクルードパスやライブラリパスを呼び出すことが出来ます。
インクルードパスを呼び出すには以下のコマンドを実行する事で得られます。
[user@localhost ~]#pkgconfig --cflags opencv
同様にライブラリパスの場合は以下のコマンドです。
[user@localhost ~]#pkgconfig --libs opencv
実際にOpenCVを用いて作成したプログラムをコンパイルする際は、以下のような記述でできます。
※pkgconfig --cflags --libs opencv
を囲っている上付きの点はバッククウォートです。
[user@localhost ~]#g++ test.cpp -o test `pkgconfig --cflags --libs opencv`
Windowsからのftp接続が弾かれる
Windowsからftp接続する際、エラーで苦戦したので解決時のメモです。
実行環境
- Windows7 HomePremium 64bit
C:\Users\Master>ftp ftp>open xxxx.xxxx.xxxx.xxxx >接続されていません
ん?
検索してもなかなかヒットせず…
ファイアーウォールで止められている場合に表示されるらしいが、OFFにしても解決せず…
どうやらこのメッセージは、sftp(SSH File Transfer Protocol)サーバに対して
ftp接続要求した際に表示される模様。
後々考えてみるとセキュリティ上sftpにすべきですし一般的にもその流れのようですね…。
なのでsftpでアクセスしなければなりませんがWindows標準ではサポートしていない(のだろう…)。
おまけ
一応接続までの足がかりを。
上にも書きましたが、Windows標準ではサポートしていないと思われるので、sftpクライアントを用意します。
ここでは、WinSCPを取り上げますが、世の中には山程ありますのでお好きなもので。
WinSCPをダウンロード urlはこちら↓
ダウンロードファイル一覧 - WinSCP - OSDN
数回使うだけ・システム汚したくないのでしたら、
WinSCP-x.x.x.beta-Portable.zip
でよろしいかと。WinSCPを解凍・実行 右クリックなどから解凍、
WinSCP.com
を実行。
RedHat系でChromiumとFlashのインストール
Chromium+Flash インストール
研究室Linuxだけどニコニコ動画見れないよ!艦これ遠征出せないよ!
そんな方々もいるのではないでしょうか。
インストールできない…ChromiumでFlashが読み込めない…などなど苦戦しました><
RedHat系でChromium BrowserとFlash Playerの動作できたのでまとめてみました。
確認した環境は下記の通り。
使用したパッケージは下記の通り。
Chromium本体のインストール
ソースコードからインストールするとなると数時間要するらしい…
ので、今回はコンパイル済みのrpmパッケージを用います。
ncsu.edu(ノースカロライナ州立大学?)にそれなりに新しいパッケージを発見。
urlはこちら↓
http://install.linux.ncsu.edu/pub/yum/itecs/public/chromium/rhel7/x86_64/
今のところ最新版は下記の様。これをダウンロードします。
端末からならwgetコマンドなどで。
chromium-43.0.2357.81-2.el7.centos.x86_64.rpm 02-Jun-2015 15:16
root権限でダウンロードしたパッケージをインストール。
が、私の環境ではlibXss.so.1
ライブラリがないと怒られました。
[user@localhost ~]$ su [root@localhost user]# rpm -ivh chromium-43.0.2357.81-2.el7.centos.x86_64.rpm 警告: chromium-39.0.2171.99-1.el7.centos.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID ******: NOKEY エラー: 依存性の欠如: libXss.so.1()(64bit) は chromium-39.0.2171.99-1.el7.centos.x86_64 に必要とされています。
とりあえずyumリポジトリ内で必要なパッケージを検索。運よくありました。
※Fedora22ではパッケージ管理がyumからdnfに変更されましたが、
扱い方は変わっていませんのでyumのところをdnfに置き換えて実行。
(例:dnf provides */libXss.so.1
)
[root@localhost user]# yum provides */libXss.so.1 libXScrnSaver-1.2.2-6.1.el7.i686 : X.Org X11 libXss runtime library リポジトリー : sl 一致 : ファイル名 : /usr/lib/libXss.so.1 libXScrnSaver-1.2.2-6.1.el7.x86_64 : X.Org X11 libXss runtime library リポジトリー : sl 一致 : ファイル名 : /usr/lib64/libXss.so.1
yumの標準リポジトリ内に必要パッケージが見つかったyum(dnf)でインストール。
※もしリポジトリ内になかった場合、epel等のリポジトリを追加して検索するか、
rpmパッケージを個別に捜してくることになるかも…
再度Chromiumをインストールします。
[root@localhost user]# yum install libXScrnSaver [root@localhost user]# rpm -ivh chromium-39.0.2171.99-1.el7.centos.x86_64.rpm
ここまででChromiumが起動できます。
Flash Playerのインストール
次に本題。Flashプラグインを導入します。
Chromium系のプラグインにはNPAPIとPPAPIがありますが、
NPAPIがサポートから除外されPPAPIに移行する流れのようです。
2015年9月までNPAPIは無効化されているだけのようで、
chrome://flags/#enable-npapi
にアクセスすることで使えるらしいのですが既に項目が見つかりません…
NPAPIじゃなければいけないわけじゃないので今回はPPAPIを導入したいと思います。
が!
Adobe公式ではPPAPIはLinux以外でしかサポートしていない…
そこでPepper Flashを用います。
おそらくGoogleがChrome向けに用意したものと思いますが、
検索してみたがソースファイル等も見つからず詳細不明…
PostInstallerFのFedora向けにPepper Flashがあったため、こちらをダウンロード。
urlはこちら↓
http://sourceforge.net/projects/postinstaller/files/fedora/releases/22/x86_64/chromium-pepper-flash-17.0.0.134-1.fc22.x86_64.rpm/download
最新版は以下の様。Chromium 45もリリースしているし既に更新止ってる気配がっ…(2015/06)
chromium-pepper-flash-17.0.0.134-1.fc22.x86_64.rpm 2015-03-13
[user@localhost ~]$ su [root@localhost user]# rpm -ivh chromium-pepper-flash-17.0.0.134-1.fc22.x86_64.rpm
恐らくこの状態でChromiumを起動してもFlashを認識できていないと思います。
Flashが読み込めているかのチェックはこちらなどを参考に。
原因はChromiumが起動時に参照するlibpepflashplayer.so
のディレクトリが一致していないため!
今回使用したChromiumパッケージのデフォルト配置先をrpm -qs
コマンドで確認。
[root@localhost user]# rpm -qs chromium-39.0.2171.99-1.el7.centos 通常 /opt/chromium 通常 /opt/chromium/chrome 通常 /opt/chromium/chrome-sandbox 通常 /opt/chromium/chrome-wrapper ...
この/opt/chromium/chrome-wrapper
にFlashの参照先が書かれている。
chrome-wrapperのほぼ最終行付近の記述を見てみる。
[root@localhost user]# cat /opt/chromium/chrome-wrapper ... if [ -f /opt/chromium/PepperFlash/libpepflashplayer.so ]; then exec $CMD_PREFIX "$HERE/chrome" --ppapi-flash-path=/opt/chromium/PepperFlash/libpepflashplayer.so "$@" else exec $CMD_PREFIX "$HERE/chrome" "$@" fi
ここで参照先が/opt/chromium/PepperFlash/libpepflashplayer.so
となっている。
次にPepper Flashの配置先を見てみる。
[root@localhost user]# rpm -qs chromium-pepper-flash-17.0.0.134-1.fc22 通常 /usr/lib64/chromium 通常 /usr/lib64/chromium/PepperFlash 通常 /usr/lib64/chromium/PepperFlash/libpepperflashplayer.so 通常 /usr/lib64/chromium/PepperFlash/manifest.json 通常 /usr/share/lisenses/chromium-pepper-flash/eula_text.html
Flashは/usr/lib64/chromium/PepperFlash/libpepperflashplayer.so
に配置されているので参照先が異なり、認識できてないですね。
FlashをChromiumに認識させるために起動オプションを変更します。
テキストエディタで/opt/chromium/chrome-wrapper
を開き、最終行を表示します。
デフォルトで
/opt/chromium/PepperFlash/libpepflashplayer.so
となっている部分を
/usr/lib64/chromium/PepperFlash/libpepflashplayer.so
に置き換えます。
if文の条件式中とppapi-flash-pathの2箇所があります。
… if [ -f /opt/chromium/PepperFlash/libpepflashplayer.so ]; then exec $CMD_PREFIX "$HERE/chrome" --ppapi-flash-path=/opt/chromium/PepperFlash/libpepflashplayer.so "$@" else exec $CMD_PREFIX "$HERE/chrome" "$@" fi
⇓
… if [ -f /usr/lib64/chromium/PepperFlash/libpepflashplayer.so ]; then exec $CMD_PREFIX "$HERE/chrome" --ppapi-flash-path=/usr/lib64/chromium/PepperFlash/libpepflashplayer.so "$@" else exec $CMD_PREFIX "$HERE/chrome" "$@" fi
これでFlash Playerも動作すると思われます。
先ほども掲載しましたが、動作確認はこちら↓
https://helpx.adobe.com/jp/flash-player/kb/235703.html
インストールしなくてもYouTubeが見れるぞ!という話も聞きますが、
これはYoutubeではHTML5に対応していて、Flash Playerを使わずとも再生出来るためです。
YouTubeのデフォルト設定はこちらから↓
https://www.youtube.com/html5
余談ですが、ChromiumとFlashのディレクトリが/opt
と/usr/lib64
に分かれて気持ち悪い…
rpmコマンドでインストールする際、--prefix
オプションで変更しようとしたが、
再配置不可パッケージの様…
[root@localhost user]# rpm -ivh --prefix=/usr/lib64 chromium-39.0.2171.99-1.el7.centos.x86_64.rpm エラー: パッケージchromiumは再配置できません。
--relocate
と--badreloc
を用いて強制的に再配置することでうまく行った。
[root@localhost user]# rpm -ivh --relocate /opt=/usr/lib64 --badloc chromium-39.0.2171.99-1.el7.centos.x86_64.rpm
しかし、この場合でも配置されるchrome-wrapperファイルには、
上記と同じlibpepflashplayer.so
の参照先が記述されていますので書き換えの必要があります。
参考:再配置不可rpmパッケージのインストール先の変更
RPMパッケージ管理 - ソフトウェアエンジニアリング - Torutk
rootアカウントでの起動対応
おまけですが、rootアカウントで起動できない場合の対処法です。
上記同様、テキストエディタで/opt/chromium/chrome-wrapper
を開き、最終行を表示します。
exec $CMD_PREFIX "$HERE/chrome" "$@"
に--user-data-dir
を付加して
exec $CMD_PREFIX "$HERE/chrome" "$@" --user-data-dir
とします。
これにてroot権限でもChromiumを使えるのではないでしょうか。
充実したLinux Lifeを!
初めての投稿ですので誤字・誤情報・新情報などありましたら叱咤激励していただけると嬉しいです。