Mac OSX (Mountain Lion) の homebrew で OpenCV のインストール

パッケージ管理システムのHomebrewを使って,OpenCVをインストールしたときのログです.
ここでは,Homebrewの設定は済んでいるものとします.
このへんのページを参考にしてください.

まず,OpenCVに必要なライブラリをインストールします.
必要なものは

  • TBB ( Intel Threading Building Block ) 並列化ライブラリ
  • Qt GUIライブラリ

です.
それぞれ

 brew install tbb
 brew install qt
 

でインストールします.

次に,OpenCVをインストールします.
これもbrewコマンドで一発ですが,上でインストールしたライブラリを有効にするためにオプションを追加します.

 brew install opencv --with-tbb --with-qt
 

僕の環境では,これではコンパイルが通りませんでした.
コンパイルにllvmを使うように指定します.

 brew install opencv --with-tbb --with-qt --use-llvm
 

これでコンパイルが通るかと思います.

僕はインストール前に,

 brew edit opencv
 

して,--with-qtの行を参考に,--with-cudaと--with-eigenというオプションを追加して,各ライブラリを有効にしたコンパイルをしています.

OpenCVで顔検出

OpenCVには顔検出用に学習したカスケード型識別器の学習結果があるので、それを使って顔検出してみました。

識別器の学習結果は、環境・インストール方法によって保存場所が若干異なります。

Windowsの場合

C:¥OpenCV にインストールしたとすると、C:¥OpenCV¥data 以下にあります。

Linuxの場合

yumやapt-getでインストールすると、基本的には/usr/share/OpenCV/以下にあると思います。(未確認)

自分でソースコードをダウンロードしてコンパイルしてインストールしている場合は、/usr/local/share/OpenCV/以下にあると思います。
もちろん、インストール先を/usr/localから変更している場合は、その部分は変わります。

Macの場合

僕はMacで、Homebrewを使ってインストールしているのでこれに該当するのですが、この場合は/usr/local/Celler/opencv/2.4.2/share/OpenCV/以下にあります。
もちろんOpenCVのバージョンやHomebrewのインストール先によって当該部分が変わります。

自分でソースコードをコンパイルしてインストールしている場合はLinuxの時と同じで/usr/local/share/OpenCV 以下にあると思います。(未確認)

で、どういうファイルがあるかですが、上記のディレクトリの 下には、haarcascadesとlbpcascadesというディレクトリがあります。haarcascades以下には、haar-like特徴で学習した識別器のデータ(xml)が、lbpcascades以下にはLocal Binary Patterns特徴量で学習した識別器のデータがあります。
以下のソースコードでは、例として、lbpcascade_frontalface.xmlを使っています。

実際のソースコードはこちら。

#include <opencv2/opencv.hpp>;

int main (int argc, char **argv){
    cv::Mat img, gray;
    const std::string cascade_name = "/usr/local/Cellar/opencv/2.4.2/share/OpenCV/lbpcascades/lbpcascade_frontalface.xml";
    cv::CascadeClassifier cascade;
    
    cascade.load(cascade_name);
    
    img=cv::imread(argv[1]);
    cv::cvtColor(img, gray, CV_BGRA2GRAY);
    
    cv::equalizeHist (gray, gray);
    
    std::vector<cv::Rect> faces;
    cascade.detectMultiScale(gray, faces);
    
    for(std::vector<cv::Rect>::iterator it=faces.begin(); it!=faces.end(); it++){
        cv::rectangle(img, *it, CV_RGB(255,0,0), 3);
    }
    
    cv::imshow("Detected", img);
    cv::waitKey (0);
    
    return 0;
}

上の例では、簡単のため、argv[1]で顔検出したい画像を渡しています。

scikit-learnを使ってPCAによる次元削減を7行で書いてみた

高次元のデータを解析する場合、データの分布などが見てもわからないので、PCAを使って次元削減をしてから可視化する場合があります。
PCAについてはこれまでにこのブログでも何度も触れているのでそちらを参照してください。

今回はフランスのINRIAがFundingしているscikit-learnというライブラリを使って7行で(空行含まず)書いてみました。言語はPythonです。

import numpy
import sklearn.decomposition

dim=2
data=numpy.loadtxt("data.csv", delimiter=",")
pca=sklearn.decomposition.PCA(dim)

result=pca.fit_transform(data);
numpy.savetxt("result.csv", result, delimiter=",")

たったこれだけで、data.csvというファイル(行ごとに多次元データがカンマ区切りで入っている)を読み込み、PCAで次元削減(2次元へ圧縮)したあとresult.csvというファイルに書き出しています。

白色化する場合は pca.whiten=True という行を、fit_transform の前に入れればOKだと思います。

PCAというより、numpy.loadtxt / numpy.savetxt 素晴らしい!という内容になりました。

藤ノ木古墳が綺麗になってた

今日、近くに行ったので藤ノ木古墳に立ち寄ってみた。

子供の頃の記憶では、藤ノ木古墳は周りを何かで囲まれた発掘現場だったけど、数年前に行ったときにめちゃくちゃキレイに整備されていてびっくりした。

それが、今回行ったら、また様子が変わっていた。
前回綺麗になってたのは、土を盛った茶色い山、という感じだったのだが、 今回、そこに草が生えて緑色の、いわゆる古墳のイメージになっていた。

観光地として良い感じになってきている。

Github for Mac

気づけばGithubのクライアント,Github for Macがリリースされてた.
Windows版は以前から知っていて,Mac版が出るのを待っていた.

とりあえずgitクライアントとしてよく使う機能は大体できる.
リポジトリへの追加候補は,リストアップされるのでチェックを入れればOK.
ローカルのリポジトリへのコミット,リモートリポジトリとの同期がGUIからボタンひとつで実行できる.
ブランチの作成,管理もできるし,コミットログの管理や差分の確認もできる.
Github.comに公開しないような自前のリモートリポジトリでも使えるぽい.

まず,リポジトリの管理画面.

Github.com上にリポジトリを作成してそれをローカルにcloneすることもできるし,ローカルマシン上にリポジトリを作成することもできる.

リポジトリの作成.


という感じでリポジトリ名と説明,ローカルでのパスを入れるだけ.
チェックボックスで,Github.comへ公開するかどうかを指定できる.

まずはリポジトリのコミットログ画面.
まだ何もコミットしていないのでログはない.

こちらがリポジトリの設定画面.

リモートリポジトリを設定したり,.gitignoreを編集したりできる.
ここで指定したリモートリポジトリへ,同期させることができる.

こういう感じで,ぱっと見て操作できるので,コマンドラインのgitに慣れていない人には非常にいいかもしれない.

OmniGrafflePro使ってみた

OmniGraffleProはMacのチャート図表作成アプリケーション。
非常に綺麗な図が作成できるようだ。
商品の紹介ページから引用すると。

『Omni Graffle』は、米国 Omni Group 社により開発された、Mac OS X用ビジネスドローイングツールです。パーツ同士の関連性を保った描画が特徴で、主にチャート図表を作成する際に有用な機能を搭載。ベクターベースの美しい図表作成を可能にします。

だという。

公式サイトから試用版がダウンロードできるので試してみた.

まずは起動画面.
いろいろなテンプレートが用意されている.

こちらがステンシルウインドウ.
この中からドラッグ&ドロップでワークスペースにオブジェクトを配置していく.

こちらがツールパレット.
線のスタイルや塗りつぶしの色などを変更する場合はこれを操作する.

そしてこれがワークスペース.
ここにいろいろなオブジェクトを配置していく.

適当にマウスのドラッグ&ドロップでこういうグラフがさっと書けた.
使い勝手のイメージとしては,PowerPointで図を描いていくのと同じような感じ.
色を変えたり矢印の両端を変えたり,かなり色々やれそう.

保存形式は.graffleという形式だが,[ファイル]→[書き出す] によって,PNGやPDF,SVGなどに出力できる.

試用期間は14日なので,その間フル活用したい.

MacBook Pro Retina にしました

随分前ですが、仕事用のラップトップをMacBook Pro Retinaに変えました。
もともと13inchのMacBook (2008 Late) 13inchだったのですが、液晶の調子が悪くなったのと、メモリ的に限界だったので思い切て。

大きさが13inch→15inchになったので、カバンに入るか心配でしたが、厚みが減ったこともあってギリギリ入りました。
重さもそんなに違わないので運ぶ大変さはあまり変わりませんでした。

matplotlibで3次元データのプロット

Pythonのグラフ描画用のライブラリであるmatplotlibを使って、3次元データのプロットを行ったときのメモ。

matplotlibで2次元のデータ( y = f(x) のようなもの )の散布図を描画するのは簡単で、matplotlibの中のpyplotを使って

import numpy
import matplotlib.pyplot as plt

xs=numpy.random.rand(1,100)
ys=numpy.random.rand(1,100)

plt.scatter(xs, ys)
plt.show()

でできる。結果はこのような感じ。

(もちろん先に関数fを定義しておく必要はある。上の例ではランダムな値を入れている)
要は、同じ数のデータ系列が2つあれば、それをx,y軸の値に取るような散布図を描画できる。

これを3次元でやりたい。要はx, y, zの3つの同じ数のデータが合った時の散布図を作りたい。
これはちょっと面倒で、mpl_toolkits.mplot3dというのを使う。

import numpy
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D

xs=numpy.random.rand(1,100)
ys=numpy.random.rand(1,100)
zs=numpy.random.rand(1,100)

fig=plt.figure()
ax=Axes3D(fig)

ax.scatter3D(xs, ys, zs)
plt.show()

これで下のような感じのプロットができる。

Macで数式ありプレゼンテーション


最近Macがメインになってきているので,プレゼンもMacでやることが多い.

これまではMac+Windows/Virtualbox+PowerPointでスライドを作成していた.

スライドに数式を入れないといけない場合は,TeXclipで数式を書いて,画像をコピって貼り付けていた.
texclipで作ってパワポに貼ると,画像の代替テキストにtexのコードが 入るので,それをコピーすれば数式の編集もできる.

しかしプロパティ見てコピってブラウザに貼って編集してコピってパワポに貼り付け直すのはめんどくさい.
また,数式がベクトルデータではないので,拡大縮小した時に汚い.
(EPSでダウンロードするオプションもあるが,パワポへの貼付けには余計手間がかかる.)

ということで,せっかくMacなんだし,Keynoteを使ってみた.
数式の入力は,MacTeXを入れたらついてくるLaTeXiTでやってみた.

LaTeXiTの入力欄にtexのコードを入力し,inlineやdisplayなどの環境,フォントサイズ,色を選択してから[LaTeX it!]ボタンを押すと,上側に数式の出力結果が表示される.

この結果を,ドラッグ&ドロップでKeynoteに貼り付ければ数式を挿入できる.
逆に,Keynoteで数式を選択し,Command+cでコピーして,LaTeXiTでCommand+vでペーストすれば,入力欄にtexのコードが復元され,数式を編集できる.