顔認識技術は、セキュリティ、マーケティング、エンターテインメントなど、さまざまな分野で応用されています。
特に、ディープラーニングの発展により、顔認識の精度は飛躍的に向上し、より広い範囲で利用されるようになりました。
そんな中、Pythonで顔認識を手軽に実装できるオープンソースのフレームワーク「Deepface」が注目を集めています。
Deepfaceは、複数の最先端の顔認識モデルをラップしており、少ないコード量で高精度な顔認識を実現できます。
この記事では、そんなDeepfaceについて解説しています。
本記事の内容
- Deepfaceとは?
- Deepfaceのインストール
- Deepfaceの動作確認
それでは、上記に沿って解説していきます。
Deepfaceとは?
Deepfaceは、Pythonで書かれた顔認識のためのオープンソースフレームワークです。
最先端の顔認識モデルをラップする形となります。
- VGG-Face
- FaceNet
- OpenFace
- DeepID
- ArcFace
- Dlib
- SFace
- GhostFaceNet
このことにより、ユーザーはこれらのモデルを簡単に利用できます。
Deepfaceは顔認識だけでなく、年齢、性別、感情、人種などの属性分析も可能です。
また、Deepfaceは、高精度な顔認識を少ないコード量で実現できるのが特徴になります。
ただし、DeepfaceはTensorFlowをバックエンドとして使用しているのです。
このことは、システムを構築する上でネックになる可能性があります。
現時点では、バックエンドにはPyTorchの採用が増えています。
そのため、TensorFlowの導入・利用は負担増になり得ます。
Deepfaceのインストール
Deepfaceのインストールは、次のコマンドを実行するだけです。
pip install deepface
ただし、Windowsの場合には注意が必要となります。
Windowsの場合、GPU版のTensorFlowがそのままで利用できません。

なんと、WindowsにおけるGPU版のサポートの開発を止めてしまったようです。
2.10が最後のGPU対応バージョンになります。

したがって、GPU版のTensorflowでDeepfaceを動かしたい場合は、それ以前をインストールしましょう。
現時点では、以下のバージョンがpipで見つかります。
(from versions: 2.8.0rc1, 2.8.0, 2.8.1, 2.8.2, 2.8.3, 2.8.4, 2.9.0rc0, 2.9.0rc1, 2.9.0rc2, 2.9.0, 2.9.1, 2.9.2, 2.9.3, 2.10.0rc0, 2.10.0rc1, 2.10.0rc2, 2.10.0rc3, 2.10.0, 2.10.1, 2.11.0rc0, 2.11.0rc1, 2.11.0rc2, 2.11.0, 2.11.1, 2.12.0rc0, 2.12.0rc1, 2.12.0, 2.12.1, 2.13.0rc0, 2.13.0rc1, 2.13.0rc2, 2.13.0, 2.13.1, 2.14.0rc0, 2.14.0rc1, 2.14.0, 2.14.1, 2.15.0rc0, 2.15.0rc1, 2.15.0, 2.15.1, 2.16.0rc0, 2.16.1)
なお、指定しなければ最新のTensorflowがインストールされます。
今なら、2.16.1ですね。
このバージョンのTensorflowの場合、以下が追加でインストール必要となっています。
pip install tf-keras
Deepfaceの動作確認
顔属性分析を行いましょう。
コードは、公式に載っているものを利用しています。
from deepface import DeepFace
import pprint
# DeepFace を使用して画像解析
objs = DeepFace.analyze(
img_path="img.jpg",
actions=['age', 'gender', 'race', 'emotion'],
)
pprint.pprint(objs)
画像は、以下を用います。

そして、コードを実行した結果は以下となります。
[{'age': 35,
'dominant_emotion': 'happy',
'dominant_gender': 'Woman',
'dominant_race': 'white',
'emotion': {'angry': 6.098496213381482e-07,
'disgust': 1.7798517062275717e-11,
'fear': 1.0022804962306884e-09,
'happy': 99.7582912156929,
'neutral': 0.24169299838757496,
'sad': 2.0835920719042223e-05,
'surprise': 1.3021159926003723e-06},
'face_confidence': 0.91,
'gender': {'Man': 1.1569126456834056e-05, 'Woman': 99.99998807907104},
'race': {'asian': 0.059160134920387276,
'black': 0.010547083563844956,
'indian': 0.48793455357139665,
'latino hispanic': 15.77151974779132,
'middle eastern': 27.63976721289549,
'white': 56.03106546031648},
'region': {'h': 105,
'left_eye': (368, 158),
'right_eye': (337, 158),
'w': 105,
'x': 305,
'y': 116}}]
「dominant_」で始まる値が、最終結果となるようです。
まあ、無難な結果と言えます。
あと、GPU版Tensorflowだと3.7秒の処理時間となります。
CPU版だと、その2倍の7.5秒となっています。
もちろん、この値はそれぞれの環境によって異なってきます。
とりあえず、CPU版でもそこまで遅いモノではありません。


