こんにちは、荒井(@yutakarai)です。
機械学習を使った顔認識は、画像内で顔を見つける機能として、カメラアプリなどのいくつかの製品で使われています。
顔認識機能は、分類の問題になります。
顔を検出するタスクを実行するための一般的な方法のひとつは、SVMや画像変換をする方法です。
今回は、オープンソースの機械学習ライブラリのdlibライブラリを使って顔検出のプログラムを作ってみます。(必要ライブラリのインストールの解説は割愛します)
dlibライブラリには、画像からの人の顔やその他オブジェクトを検出するためのクラスが用意されています。
ライブラリの中身はHoG1とSVM2を利用したシンプルな構成ですが、HoGフィルターのパラメータ調整や学習を行ってくれる便利なAPIがあり、人気のライブラリです。
顔認識のプロセス
ここで利用するdlib顔認識ライブラリは、3つのコンセプトに基づいています。
1. ウィンドウがスライドしながら対象オブジェクトをチェック
小さなウインドウが画像全体にスライドし、検出器が各ウインドウの内容を対象オブジェクトに対してチェックします。
以下の図は、検出された顔を含むすべてのウィンドウ(緑色の四角形)が緑で輪郭が描かれ、その他は赤で塗りつぶされていることがわかります。
2. SVM (Support Vector Machine)
顔か顔でないかを分離するために使用されるSVM3を利用します。
サポートベクターマシン(SVM)は、1995年頃にAT&TのV.Vapnikが発表したパターン識別用の教師あり機械学習方法であり、局所解収束の問題が無い長所がある。 「マージン最大化」というアイデア等で汎化能力も高め、現在知られている方法としては、最も優秀なパターン識別能力を持つとされている。(参照ページ)
3. HoG (Histogram of Oriented Gradient fetaures)
HoG4は、さまざまなオブジェクトを検出するために使用される勾配ベースの特徴量です。
ソースコード
以下ソースコードを貼り付けておきます。
以下ソースコードのリンクです。
face_detection_sample.py