LoginSignup
9
16

More than 5 years have passed since last update.

顔照合のオープンソースの実装について調査中

Last updated at Posted at 2017-12-03

dlibベースの顔照合プログラム face_recognition
を先に書いた。

また、OpenCVの本家の配布元自体にも顔照合のプログラムが含まれていることも書いた。
「OpenCV 3.3.0 Face Recognition with OpenCV」への補足記事

しかし、顔照合について、オープンソースの実装が多数存在する。
顔照合のついての特徴量の計算までの実装の場合もある。
以下のように深層学習を用いたものも存在する。

https://github.com/bytefish/facerec

PyPI facerec 1.0

Implements face recognition algorithms for MATLAB/GNU Octave and Python.

MATLAB/Octave Pythonによる顔照合のアルゴリズム

前処理 Preprocessing
特徴抽出 Feature Extraction
識別器 Classifier
交差検定 Cross Validation
についてそれぞれ知るべき手法を、手法の出典となった論文を記してくれている。

Preprocessing

Histogram Equalization
一般の画像は、輝度値の分布が偏っていることがあります。
輝度値の分布をどの輝度値でも一様に分布するように、変更する手法がヒストグラム均等化です。
scikit-image のHistogram Equalizationの説明が役立つでしょう。

Local Binary Patterns
は、3x3のブロックの明暗パターンによる特徴量です。
qiita OpenCVを使って誰の顔なのかを推定する(Eigenface, Fisherface, LBPH)の記事がLBPを使った前処理をするとどのような画像になるのかを知ることができます。

scikit-image のLocal Binary Pattern for texture classificationもLBPがどのようなものなのかを知ることができる。

TanTriggsPreprocessing (Tan, X., and Triggs, B. "Enhanced local texture feature sets for face recognition under difficult lighting conditions.". IEEE Transactions on Image Processing 19 (2010), 1635–650.)

github で以下のスクリプトを顔照合の例題を実行できます。

Results
にその実行結果があります。
このスクリプトでは、交差検定の結果を示すものになっています。

facerec/py/apps/scripts/simple_example.py

Since the AT&T Facedatabase is a fairly easy database we have got a 95.5% recognition rate with the Fisherfaces method (with a 10-fold cross validation):

AT&T Facedデータベースはかなり簡単なデータベースなので、Fisherfacesメソッドで95.5%の認識率が得られます
(10-分割交差検証)。

このリポジトリの記述は、顔照合が学術的にどうなっているのかを学ぶのには参考になるでしょう。


Face Recognition using Tensorflow (facenet)

Inception ResNet v1 というネットワーク構造の深層学習を利用しています。

paper FaceNet: A Unified Embedding for Face Recognition and Clustering

Screenshot from 2018-07-25 01-48-36.png
上記論文の figure 1

顔向きや照明条件が顔照合しづらい状況を評価しています。

Implement face recognition using PCA, LDA and LPP

PCA(principal component analysis 主成分分析): Eigen Faces
LDA(Linear Discriminant Analysis 線形判別分析): Fisher Faces
LPP(Locality Preserving Projection 局所性保存射影):Laplacian Faces

の手法の違いを説明しつつ、Java言語での実装を示しています。

PCAとLDAの違いについては、OpenCVの顔照合の本家のチュートリアルの中にも解説があります。

PCAで次の基底ベクトルを選ぶ際には、それまでの基底ベクトルと直交している中で、分散が一番大きい方向を選びます。

その際には、対象物の識別の容易さをまったく考慮にいれていません。
LDAでは、そのときに教師データを与えてやることで、識別しやすい軸が、後方のベクトルの中に埋もれてしまうことを防いでいるらしいです。

Deep Face Recognition with Caffe Implementation

Gesture, Emotions, Posture and Face Recognition using OpenPose/DLIB

Purpose of this work is to demonstrate few state of art computer vision applications using OpenPose/DLIB libraries.

以下のような潤沢なマシン環境で、いまいいとされている画像認識技術を組み合わせてみたコードのようです。

Requirements:

NVIDIA graphics card with at least 1.6 GB available (the nvidia-smi command checks the available GPU memory in Ubuntu).
At least 2 GB of free RAM memory.
Highly recommended: cuDNN and a CPU with at least 8 cores.

dlibベースのまた別の顔照合

  • https://github.com/vyomshm/face_recognition これは、先に紹介したforkしたものらしく、READM.md の記述に共通部分が多数見られます。   どこに、fork元の実装にまさる部分があるのか、調べてみよう。  

https://github.com/bytefish/libfacerec

Face Recognition Library for OpenCV.

このgithub のサイトはOpenCV2.4 のときの顔照合のOpenCV本体のライブラリについてのものです。

OpenCV2.4 のときにはcv::FaceRecognizerとして存在していたライブラリです。
OpenCV3.X のときには、cv::face以下に移っていますので、このgithubは 2015年以降更新がとまっています。

このサイトを利用するよりはOpenCV3.3 の顔画像の扱いの部分を集中的に調べた方がよさそうです。

github SeetaFace Engine
github SeetaFace2 Engine


付記

局所性保存射影 (Locality Preserving Projection, LPP)とラプラス固有写像 (Laplacian Eigenmap)

qiita Facenetを使った類似顔画像検索のための特徴量抽出

顔照合の性能の向上は、顔のlandmarkの位置合わせの精度に依存する。

顔照合の商用のライブラリは今後どうなっていくのだろうか?

9
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
16