ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

UbuntuでOpenCVを使う方法

※ 9/4 12:00 インストールパッケージ名が間違っていたので修正

f:id:ytooyama:20170902205927p:plain:w460

上図は、任意の画像から顔を検出したところ

OpenCVOSSの画像処理ライブラリーです。C++, C, Python, Java からの操作や、Windows, Linux, Mac OS, iOS, Androidをサポートしています。

日本で出ているOpenCVの書籍の多くはC++を実行させるためにWindowsVisual Studioを使わせるパターンが多いですが、OpenCV自体は前述のようにWindows以外でも動かすことができます。今回は汎用的に使えるLinuxで動かすことにしました。

とりあえず今回はUbuntu上で動かす流れを書いてみたいと思います。 インストール方法は次のサイトを参考にしました。

milq.github.io

ただし、この方法は必要なライブラリーをインストールしない場合がありますので、次のようにコマンドを実行してインストールしました。

$ sudo apt install libopencv-dev libcv2.4 libcvaux2.4 libcvaux-dev libhighgui-dev libhighgui2.4 libopencv-highgui-dev libopencv-highgui2.4-deb0 libopencv-imgproc2.4v5 libopencv-imgproc-dev

インストールするUbuntuのバージョンによって、インストールできる各コンポーネントのバージョンが異なると思います。apt searchコマンドで必要なパッケージの名前を確認しましょう。

$ apt search opencv
$ apt search libcv
$ apt search highgui

今回使ったのはUbuntu 17.04で、このバージョンでインストールできるOpenCVは2.4.9.1でした。もっと新しいOpenCVを使いたい場合はPPAを探しましょう。ただ、OpenCV 2と3ではソースコードの書き方が違うと思います。注意しましょう。

必要に応じて、他のlibopencv-*のような名前のライブラリーを追加で入れます。ちなみにOpenCVlibopencv-*のライブラリーを全てインストールするとOSを含めて/は6GB消費していました。

OpenCV 2ではPython2でAPIを使ってAPIを叩けるようです。追加でこの辺りのパッケージを入れておくといいようです。

$ sudo apt install python-opencv python-numpy python-scipy python-matplotlib python-urllib3 

インストールがおわったら、いろいろ動かして見ましょう。OpenCVソースコードにサンプルのソースコードがいろいろ収録されているので、これをダウンロードします。

$ wget https://github.com/opencv/opencv/archive/2.4.13.3.zip
$ unzip 2.4.13.3.zip

サンプルをいろいろ実行してみます。C++版のコードはLinuxではg++コマンドでビルドする必要があります。実行結果は-oで指定したファイル(ここでは便宜的にファイルの最後に.outをつけたファイル名にしています)を実行すると、実行結果が表示されます。Pythonのコードを実行したい場合はpython2のディレクトリー内のサンプルを実行してください。だいたい同じようなサンプルソースが揃っています。

$ cd opencv-2.4.13.3/sample/cpp
$ g++ inpaint.cpp -o inpaint.out `pkg-config --libs --cflags opencv` 
$ ./inpaint.out

ここまでできたら、次に以下のサイトを参考にいろいろやって見ましょう。このサイトではC++版のソースコードがサンプルとして掲載されています。

OpenCV.jp : OpenCV逆引きリファレンス — OpenCV-CookBook

Pythonから使う場合は次のサイトの例が参考になりそうです。

OpenCV-Python チュートリアル文書のページへようこそ! — OpenCV-Python Tutorials 1 documentation

Ubuntuのデスクトップ環境

UbuntuのMinimalCDをダウンロードして、Ubuntu 17.04をインストールしました。インストールの最後に追加でインストールするパッケージの選択が出るので、Ubuntu Mate minimalを追加で選択しました。

ソースの編集環境

ソースの編集にはgeditを使いました。選択した理由はなんとなくです。

ビルド方法

C++ソースコードは、次のようなコマンドラインを端末で実行します。

g++ hoge.cpp -o hoge.out `pkg-config --libs --cflags opencv` 
./hoge.out

画像から顔を検出する

顔を検出するのコードを実行しても何も起こらないので、なぜかなと思ったら評価器を用意する必要があったんですね。ソースコードにもxmlファイルを定義しているところがあって気がつきました。ソースパッケージのdataディレクトリーやGithubにいくつか用意されていますので、ソースコードの以下の部分のパスを正しく設定すればちゃんと動きました。

...
  // 分類器の読み込み
  std::string cascadeName = "./haarcascade_frontalface_alt.xml"; // Haar-like
  //std::string cascadeName = "./lbpcascade_frontalface.xml"; // LBP

最後にOpenCVについてまとまっていたスライドがあったので、以下に埋め込んでおきます。

www.slideshare.net