業務で顔認証機能を提供しているOSSについて調査する機会があったので、メモを残しておきます。
##1. OpenCV
OpenCVは、画像処理・画像解析および機械学習等の機能を持つオープンソースのライブラリです。オープンソースですので、基本的に無料で使用することができます。Pythonを始め、C/C++、Java、MATLAB用として公開されており、もともとはインテルが開発・公開しています。
####関連記事
公式ページ,Github
https://opencv.org
https://docs.opencv.org/3.4.3/d1/dfb/intro.html
https://github.com/opencv/opencv
OpenCVで顔認証やってみた
https://qrunch.net/@Atom/entries/Q9fV8JEIQJVCDVId?ref=qrunch
OpenCV だけで顔検出から顔照合まで完結している
https://qiita.com/nonbiri15/items/a970affd90b7a02b2e85
ただし、OpenCVに現時点で実装されているコードだけでは、商用ライブラリのうち高い水準にあるものとは次の範囲で違いが生じる可能性は高いと思われます。
*隠れのある顔画像
例:マスクをした顔・サングラスをした顔
*正面を向いていない顔
例:30度ほど斜めを向いた顔
*よくない照明条件
光が均一な当たり方をしていない顔画像
##2. face_recognition
dlibベースのDLを利用した顔認証ライブラリ
※dlibは機械学習のC++ Pythonのライブラリ
####関連記事
公式ページ,Github
https://github.com/ageitgey/face_recognition
https://pypi.org/project/face-recognition/
https://www.cresco.co.jp/blog/entry/9468/
このモデルはFaceNetにインスパイアされているようなので、詳しい仕組みや理論的な背景はその論文を読むと良いかと思います。
顔識別を行う(Dlib と ageitgey/face_recognition パッケージを使用)
https://www.kkaneko.jp/dblab/dlib/facerec.html
OpenCVとdlibとOpenFaceでの顔検出と知見まとめ
https://vaaaaaanquish.hatenablog.com/entry/2016/06/28/004811
##3. face-net
FaceNetは2015年にGoogleが発表した顔認証用のニューラルネットワークです。
FaceNetの論文はこちらから参照できます。 https://arxiv.org/pdf/1503.03832.pdf
####関連記事
Github
https://github.com/davidsandberg/facenet
FaceNet(顔認識)を動かしてみた
https://masaeng.hatenablog.com/entry/2019/07/26/234225
Facenetを使うことでのメリットは、以下が挙げられます。
- 学習済みモデルが利用できる
- ベクトルに落とし込むので、検索したい人の画像が少なくてすむ
- 顔画像に特化している
- お手軽
FaceNet(顔認証)を使って自動撮影カメラを作ってみた
https://masaeng.hatenablog.com/entry/2019/08/09/235046
##4. OpenFace
オープンソースの顔認識技術としてOpenFaceというものもあります。http://cmusatyalab.github.io/openface/
こちらはFaceNet論文を元にしたオープンソースの実装です。
あまり調査できていないが、情報は少ない印象。
##まとめ
非DLのOpenCVは、DLを利用している他ライブラリと比べると、顔の写りなどによっては精度が劣るらしい。
関連記事のサンプルは、すべてPythonで実装。
それぞれの実装のし易さ、精度などは実際に動かして検証する必要がありそう。
face_recognition と face-net を検証してみるのがいいかも。