OpenCVを利用した顔検出
スケッチの作成
Processingを起動して,新規にスケッチを保存しましょう. メニューから[ファイル]-[名前を付けて保存]をクリックして,「スケッチフォルダを名前を付けて保存」を開きます. ファイル名に「Project11」を入力し,[保存]をクリックしましょう. 保存先に「Project11」という名前のフォルダが作成されていることを確認してください.
OpenCVの導入
インテルが開発したオープンソースのライブラリである OpenCV を導入することで, 画像処理・画像解析など様々な機能を利用することが可能となります. ここでは,Processing用の OpenCV を導入して,顔検出を試みてみましょう. まずは,メニューから[スケッチ]-[ライブラリをインポート]-[ライブラリを追加]をクリックして, 「Contribution Manager」を開きます. ここで, opencv をキーワードに検索すると, 「 OpenCV for Processing | Computer vision with OpenCV. 」が表示されるので, このライブラリを選択してインストールしましょう.
次に,[スケッチ]-[ライブラリをインポート]-[OpenCV for Processing]をクリックして,OpenCVライブラリをインポートします. また,同様にVideoライブラリをインポートしてください. ソースコードの先頭に「 import gab.opencv.∗ 」と「 import processing.video.∗ 」が 表示されていることを確認してください.
カメラ映像の表示
Capture クラスを利用して,カメラから入力した画像を表示しましょう. 下記を参考にコードを入力したら,Runボタンをクリックしてください. ここでは, サイズ(size) が 320x240 , フレームレート(fps) が 30 となっている, 3番のカメラを使用していることに注意してください. ウィンドウにカメラ映像が表示されることを確認してください.
顔位置の検出
顔位置の検出には OpenCV クラスを利用して下記のように記述します.
例えば, OpenCV.CASCADE_FRONTALFACE は顔を検出することを意味します.
この他に OpenCV.CASCADE_PEDESTRIANS は歩行者, OpenCV.CASCADE_EYE は目を検出することが可能です
(詳細はOpenCVのドキュメントを参照してください).
検出された顔位置は Rectangle クラスとして返されます.
Rectangle クラスは矩形を表しており,フィールドとしてx
, y
, width
, height
を持ちます.
x
,y
で左上の座標,width
,heigth
で幅と高さを表します.
opencv = new OpenCV(this, cam);
opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);
faces = opencv.detect();
それでは,検出された顔位置にrect()
関数で矩形を描いてみましょう.
下記を参考にコードを入力したら,Runボタンをクリックしてください.
ここでは,矩形の輪郭線を 赤色 ,また, 塗りつぶしを描画しない ように設定しています.
検出された顔位置に赤い矩形が表示されることを確認してください.
次は,検出された顔位置に画像を表示してみましょう. 下記の2種類の画像(red.png,blue.png)の内から一つを選び, 画像をダウンロードしてください(画像提供:GAHAG|著作権フリー写真・イラスト素材集). いずれの画像もサイズは250x220ピクセルです. また,ダウンロードした画像は「スケッチフォルダ(Project11)」の中に配置しましょう. これ以降,本資料ではred.pngを例に取り説明していきます.
まずは, PImage クラスのインスタンスを作成し,ダウンロードした画像を読み込みます.
後は,draw()
関数の中で,これまでのrect()
関数に代えて,image()
関数を呼び出すだけです.
image()
関数の引数は, PImage 型の変数に加えて,表示する位置x
,y
,幅width
,高さheight
を指定します.`
下記を参考にコードを入力したら,Runボタンをクリックしてください. 検出された顔位置に画像が表示されていることを確認してください.
課題
OpenCV.CASCADE_EYE を指定して目の位置を検出し,目の位置に円を描きましょう. 課題が完成したら,作成したスケッチを ZIPアーカイブ 形式で保存します. ZIPアーカイブを作成するには,メニューから[ツール]-[スケッチをアーカイブ]をクリックして,「スケッチを名前を付けてアーカイブする」を開きます. 保存するファイル名を確認した上で,[保存]をクリックします. 保存先に「Project11-日付a.zip」というファイルが作成されていることを確認してください.