初めまして、質問させていただきます。
私は現在、C言語+OpenCVで顔認証のプログラムを作成したいと思っています。
そこで、以下のようなものを実現したいと考えています。
webカメラである人物Aの顔を撮影し、その顔画像を保存。
次に、webカメラに人物Aの顔が映ったら保存した人物Aの
顔画像と比較して認証か否かの出力をする「顔認証」のプログラムです。
ここで、例として人物Bがカメラに映っても、登録していないので認証されず、
というようにしたいです。
これを実現するには、どういった考え方、アルゴリズム等が必要か、
もしくは参考サイト、書籍でも教えていただければありがたいと思います。
また、別の方法での顔認証の方がいいという考えがあればご教授願いたいです。
よろしくお願いします。
OpenCVによる顔認証
Re: OpenCVによる顔認証
どなたからもレスがなさそうなので、私の私見です。
まず、あなたの実力はどの程度なのでしょうか?
自分で作ってみたいというレベルの話でしたら、誰の顔かの認識ではなく、顔の認識を
行うプログラムはもう組めているのでしょうか?まだなら、まずこの段階のレベルに
挑戦でしょう。このレベルなら、OpenCVの本が出ています。
次のレベルは、AIやファジーってことになるのでしょうが、私が理解できるレベルでは
ありません。
まず、あなたの実力はどの程度なのでしょうか?
自分で作ってみたいというレベルの話でしたら、誰の顔かの認識ではなく、顔の認識を
行うプログラムはもう組めているのでしょうか?まだなら、まずこの段階のレベルに
挑戦でしょう。このレベルなら、OpenCVの本が出ています。
次のレベルは、AIやファジーってことになるのでしょうが、私が理解できるレベルでは
ありません。
non
Re: OpenCVによる顔認証
データベース(学習器)を用いるのか用いないのかではかなり違ってきそうですね。
1、一枚の学習から識別
まずカメラに写ったワンフレーム学習からの顔識別はかなり難しいかと思われます。
たとえば顔の登録が正面の顔一枚だとして、入力画像が斜めを向いていたらその時点で識別は困難になります。
また、同じ正面でも環境光が大きく違った部屋で撮影でも同様に困難です。
もしモデル化された環境でという前提ならばまず顔のパーツの認識からはじめるのが無難な気がします。
人には骨格、目、鼻、口、(耳)、眉毛、肌の色などの特徴が存在します。
ここから画像処理でブロックごとに分けて特徴量を抽出すれば尤度のひとつになりそうです。
また、目のくぼみ鼻の高さなどはkinectをはじめとしたセンサを用いればこれも判断材料に使えそうです。
ただこれは前提として「撮影に際して目は大体この位置に」、「あごはここぐらいに」と制約がある欠点が大きいと思います。
2、多数画像の学習から識別
まずはじめに登録する人の顔をいろいろな条件化で何百枚、何千枚と撮影し、人の顔データベースを作成します。
このデータベースを識別器にして部分的に識別を行って行きます。
たとえば目の識別器→鼻の識別器→口の識別器→・・・
すべてしきい値を満たしたなら人物特定であるって感じです。
識別器はいろいろありますが、opencvなら「SVM」と検索すると幸せになれるかもしれません。
ただし、大変なのは学習させるためのデータ収集が大変です。
個人的にはこれが一番無難な気がします。
が、学習器作成は結構面倒かと思われます。
今回の内容だと「本人かどうか」ですが、
「今映ってる顔はA,B,C,D,Eの誰に最も近いか」っというクラスタリングでも似たようなことができるような気がします。
「顔認識」で検索すれば多くの論文がヒットします。もう少し文献調査を行ってやることをさらに絞ってみてはどうでしょうか?
(自分でそのへんのサイトみながら勉強していただけなので誤認があるかもしれませんが、それはご愛嬌ということで。)
1、一枚の学習から識別
まずカメラに写ったワンフレーム学習からの顔識別はかなり難しいかと思われます。
たとえば顔の登録が正面の顔一枚だとして、入力画像が斜めを向いていたらその時点で識別は困難になります。
また、同じ正面でも環境光が大きく違った部屋で撮影でも同様に困難です。
もしモデル化された環境でという前提ならばまず顔のパーツの認識からはじめるのが無難な気がします。
人には骨格、目、鼻、口、(耳)、眉毛、肌の色などの特徴が存在します。
ここから画像処理でブロックごとに分けて特徴量を抽出すれば尤度のひとつになりそうです。
また、目のくぼみ鼻の高さなどはkinectをはじめとしたセンサを用いればこれも判断材料に使えそうです。
ただこれは前提として「撮影に際して目は大体この位置に」、「あごはここぐらいに」と制約がある欠点が大きいと思います。
2、多数画像の学習から識別
まずはじめに登録する人の顔をいろいろな条件化で何百枚、何千枚と撮影し、人の顔データベースを作成します。
このデータベースを識別器にして部分的に識別を行って行きます。
たとえば目の識別器→鼻の識別器→口の識別器→・・・
すべてしきい値を満たしたなら人物特定であるって感じです。
識別器はいろいろありますが、opencvなら「SVM」と検索すると幸せになれるかもしれません。
ただし、大変なのは学習させるためのデータ収集が大変です。
個人的にはこれが一番無難な気がします。
が、学習器作成は結構面倒かと思われます。
今回の内容だと「本人かどうか」ですが、
「今映ってる顔はA,B,C,D,Eの誰に最も近いか」っというクラスタリングでも似たようなことができるような気がします。
「顔認識」で検索すれば多くの論文がヒットします。もう少し文献調査を行ってやることをさらに絞ってみてはどうでしょうか?
(自分でそのへんのサイトみながら勉強していただけなので誤認があるかもしれませんが、それはご愛嬌ということで。)
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: OpenCVによる顔認証
OpenCVにおいて、「映っているのが顔か否か」を判定することはHaar-Like特徴量を計算すればある程度簡単に出来ますが、
「映っているのが以前登録した人か」を判定するのは学会レベルの話になりそうです。
顔認証が出来るライブラリも特にみたことがありません。(顔認識ならありますが)
Android 4.0で顔認証がサポートされるようになりましたが、
そのように自力で計算するのではなく他の機能で支援してもらう方法を取った方が現実的ではないでしょうか。
期待する回答が出来ずすみません。
「映っているのが以前登録した人か」を判定するのは学会レベルの話になりそうです。
顔認証が出来るライブラリも特にみたことがありません。(顔認識ならありますが)
Android 4.0で顔認証がサポートされるようになりましたが、
そのように自力で計算するのではなく他の機能で支援してもらう方法を取った方が現実的ではないでしょうか。
期待する回答が出来ずすみません。
Re: OpenCVによる顔認証
皆さん、ご回答ありがとうございました。
自分の実力では皆さんの言うような程の技量はありません。
この顔認証について、プログラムに詳しい人たちの意見を聞けて大変参考になりました。
今後は論文などを参考に自分のやるべきことを絞っていきたいと思います。
ありがとうございました。
自分の実力では皆さんの言うような程の技量はありません。
この顔認証について、プログラムに詳しい人たちの意見を聞けて大変参考になりました。
今後は論文などを参考に自分のやるべきことを絞っていきたいと思います。
ありがとうございました。