pc now!

進捗だめです><

Scientific Linux7でOpenCVインストール

はじめに

本記事では、以下の項目を満たすOpenCVの環境構築を目的とします。

  • Scientific LinuxでスムーズなOpenCVの導入が行える
  • OpenCVの基本的な機能を扱える
  • 一般的な動画の入出力が行える
  • GPU演算環境は考慮しない

動画を扱わないのであれば、

[root@localhost ~]#su
[root@localhost ~]#yum install opencv-devel

の実行だけで導入できる。

環境

導入パッケージ

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接続する際、エラーで苦戦したので解決時のメモです。

実行環境

早速、コマンドプロンプトよりftp接続…

C:\Users\Master>ftp
ftp>open xxxx.xxxx.xxxx.xxxx
>接続されていません

ん?
検索してもなかなかヒットせず…
ファイアーウォールで止められている場合に表示されるらしいが、OFFにしても解決せず…

どうやらこのメッセージは、sftp(SSH File Transfer Protocol)サーバに対して
ftp接続要求した際に表示される模様。
後々考えてみるとセキュリティ上sftpにすべきですし一般的にもその流れのようですね…。
なのでsftpでアクセスしなければなりませんがWindows標準ではサポートしていない(のだろう…)。

おまけ

一応接続までの足がかりを。
上にも書きましたが、Windows標準ではサポートしていないと思われるので、sftpクライアントを用意します。
ここでは、WinSCPを取り上げますが、世の中には山程ありますのでお好きなもので。

  1. WinSCPをダウンロード urlはこちら↓
    ダウンロードファイル一覧 - WinSCP - OSDN
    数回使うだけ・システム汚したくないのでしたら、
    WinSCP-x.x.x.beta-Portable.zipでよろしいかと。

  2. WinSCPを解凍・実行 右クリックなどから解凍、WinSCP.comを実行。

RedHat系でChromiumとFlashのインストール

Chromium+Flash インストール

研究室Linuxだけどニコニコ動画見れないよ!艦これ遠征出せないよ!
そんな方々もいるのではないでしょうか。
インストールできない…ChromiumFlashが読み込めない…などなど苦戦しました><
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を用います。
おそらくGoogleChrome向けに用意したものと思いますが、
検索してみたがソースファイル等も見つからず詳細不明…
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

Flashrpmパッケージをインストール

[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-wrapperFlashの参照先が書かれている。
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
に配置されているので参照先が異なり、認識できてないですね。
FlashChromiumに認識させるために起動オプションを変更します。
テキストエディタ/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

余談ですが、ChromiumFlashのディレクトリが/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を!

初めての投稿ですので誤字・誤情報・新情報などありましたら叱咤激励していただけると嬉しいです。