OpenCV

OpenCVで顔認証を行いトリミングして保存する

投稿日:

顔認証

OpenCVで顔認証を行い、顔の画像のみをトリミングして保存する

OpenCVでは画像の変換に関するライブラリが非常に揃っています。このライブラリを使用することで、画像編集が苦手な方でも比較的容易に画像を編集することができます。また、画像認証のみならず、画像ファイルから顔認証や瞳検出を行うことができます。

OpenCVにて画像ファイルから顔認証や瞳検出を行う場合には、カスケード型分類器を使用します。カスケード型分類器はOpenCVのインストールに合わせてインストールされるため、特別な環境の設定は必要としません。カスケード型分類器を使用することで非常に簡単に顔の検出や笑顔の検出、目の部分のみの検出を行えるようになります。

これらで検出した結果を用いて、顔の周りを枠で囲ったり、顔の画像のみをトリミングして機械学習を行うなど、いろいろ応用することが出来るようになります。

オリジナルの画像(フリー画像)

オリジナル画像

こちらのフリー画像を元に顔認証を行っていきます。

白枠で顔を囲んだ画像

顔認証

顔認証で検出した部分について白枠で囲っています。

顔の画像のみをトリミングした画像

顔のトリミング

顔の部分だけトリミングして切り取った結果です。

ソースコード

ソースコードの詳細

OpenCVのインポート

OpenCVのインポートを行います。顔画像の検出程度の場合はcv2のみのインポートで十分です。

カスケード型分類器に使用する分類器のデータ(xmlファイル)を読み込み

カスケード型分類器に使用する分類器のデータ(xmlファイル)を読み込みます。
今回は顔検出を行いたいため、haarcascade_frontalface_default.xmlを指定します。
他にも以下のようなデータが存在します。

  • haarcascade_smile.xml・・・笑顔検出
  • haarcascade_eye.xml・・・目検出
  • haarcascade_frontalface_default.xml・・・顔検出

分類器のデータはOpenCVをインストールしたディレクトリのライブラリ配下にあります。見当たらない場合は、以下のGIT-Hubのリポジトリからダウンロード可能です。
https://github.com/opencv/opencv/tree/master/data/haarcascades

画像ファイルの読み込み

画像ファイルを読み込みます。★画像ファイルの箇所には顔認証を行いたい画像ファイルを指定してください。

グレースケールに変換する

一旦グレースケールに変換しています。

カラースケールのみでも十分顔検出が可能ですが、グレースケールを使用することで高速に顔検出できると言われています。

ただ、実際に試してみた感じでは、カラースケールとグレースケールで検出時間や精度について差分は感じられなかったため、サイズが小さいデータであったり、少数枚程度ならば特にどちらでも良さそうでした。

カスケード型分類器を使用して画像ファイルから顔部分を検出する

先ほど、読み込ませた分類器のデータ(xmlファイル)にグレースケールのデータをセットし顔検出を行っています。検出に成功した場合は画像のサイズが出力されます。

顔の座標を表示する

顔検出に成功した場合、顔の座標が表示されます。

顔部分を切り取る

顔部分を切り取っています。切り取った画像はface_cutという変数に格納しています。

白枠で顔を囲む

検出した顔の座標で顔枠を白で囲っています。
(255,255,255)が白色で太さは2としています。

画像の出力

先ほど切り取った顔部分の画像をface_cut.jpgとして保存しています。
同じように、白枠で顔を囲んだ画像をface_rectangle.jpgとして保存しています。

 

機械学習やディープラーニングなどで顔の認識精度が上らないという場合は、顔の部分のみに特化して切り取ることで精度が上がる可能性があります。

いろいろ試してください。

 

-OpenCV
-,

Copyright© AI人工知能テクノロジー , 2019 All Rights Reserved.