顔認識技術は、セキュリティ、マーケティング、エンターテインメントなど、さまざまな分野で応用されています。
特に、ディープラーニングの発展により、顔認識の精度は飛躍的に向上し、より広い範囲で利用されるようになりました。
そんな中、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版でもそこまで遅いモノではありません。