「Pythonで顔認識を実行したい」
「ディープラーニングによる顔認識を試したい」
「OpenCVよりも精度の高い顔認識を行いたい」
このような場合には、InsightFaceが利用できます。
この記事では、InsightFaceについて解説しています。
本記事の内容
- InsightFaceとは?
- InsightFaceのシステム要件
- InsightFaceのインストール
- InsightFaceの動作確認
それでは、上記に沿って解説していきます。
InsightFaceとは?
InsightFaceは、オープンソースの2D&3D深層顔解析ツールボックスです。
InsightFaceを使えば、顔の配置(目・鼻・口などの配置)まで認識できます。
ここまでできれば、顔認識はもっと容易にできますね。
つまり、InsightFaceによる顔認識の精度は高いということです。
これらの画像は、公式に載っている画像です。
ただ、このようなことは話半分に聞いたほうがよい場合が多いです。
言葉は悪いですが、誇大広告というヤツです。
しかし、InsightFaceはどうやらそうではありません。
次の画像は、OpenCVで顔認識を行った結果となります。
この画像は、次の記事より取得しています。
実際に、OpenCVで顔認識して作成した画像です。
そのサンプルコードも次の記事に載せています。
この元画像をInsightFaceで顔認識した結果は、以下。
手前の女性の顔を認識できています。
それに、目・鼻・口まで認識する余裕があります。
この結果により、InsightFaceのスゴさを感じました。
そして、このスゴさはPyTorchやMXNetをベースにしています。
ディープラーニングが、大活躍ということです。
ここまで書くと、PyTorchやMXNetが必須に思うでしょう。
しかし、顔認識を行うだけならば、これらは不要です。
もちろん、自分でデータを用意してモデルを作成する場合は必要になります。
あくまで、学習済みモデルを利用するだけなら、ONNX RuntimeだけでOKです。
以上、InsightFaceについての説明でした。
次は、InsightFaceのシステム要件を確認します。
InsightFaceのシステム要件
現時点(2021年10月末)でのInsightFaceの最新バージョンは、0.5となります。
この最新バージョンは、2021年9月21日にリリースされています。
InsightFaceのシステム要件は、少々複雑です。
そのため、次のポイントに分けて説明していきます。
- OS
- Python
- Cython
- ONNX Runtime
OS
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
Python
サポート対象となるPythonのバージョンは、特に明示はされていません。
あるとしたら、「Python 3.x」で動くという表記ぐらいです。
依存関係にあるパッケージを見る限りでは、Python 3.6以降となるでしょう。
少なくとも、下記で出てくるONNX RuntimeはPython 3.6以降が必須です。
よって、サポート対象となるPythonのバージョンはPython 3.6以降だと言えます。
Cython
ここは注意です。
事前にインストールしておく必要があります。
そうしないと、最新版のInsightFace 0.5をインストールできません。
最新版だけではなく、0.4や0.3もインストールできないのです。
結局、InsightFace 0.2.1がインストールされることになります。
これは、WindowsとLinux(Ubuntu)の両方で何度も検証しました。
次のコマンドにより、最新版のCythonをインストールしておきます。
pip install cython
ONNX Runtime
ONNX Runtimeに関しては、インストールするタイミングはいつでもOKです。
InsightFaceのインストール前でも、インストール後でも変わりはありません。
ただ、システム要件としては事前にインストールしておきましょう。
pip install onnxruntime
上記のコマンドは、CPU版のONNX Runtimeとなります。
GPU版も存在しているので、そちらを使っても構いません。
しかし、GPU版だといろいろと面倒なことがあります。
CUDAのバージョン、cuDNNのバージョンが影響してきます。
それらをクリアできる方は、GPU版をインストールしましょう。
インストールは、次のコマンドを実行するだけです。
pip install onnxruntime-gpu
まずは、CPU版でのインストールからをおススメします。
そのあとに、GPU版に入れ替えることも可能です。
まとめ
とにかく、Cythonを事前にインストールしておきましょう。
このことが、公式でもなぜか載っていません。
見つけられていないないだけかもしれませんけどね。
そうだとしても、こんな重要なことはわかりやすく記載して欲しいです。
別に古いInsightFaceでも動くことは動きます。
ただ、モデルの自動ダウンロードができないなどの不便な点が存在します。
以上、InsightFaceのシステム要件を説明しました。
次は、InsightFaceをインストールします。
InsightFaceのインストール
検証は、次のバージョンのPythonで行います。
>python -V Python 3.9.7
まずは、現状のインストール済みパッケージを確認しておきます。
事前にCythonとONNX Runtime(onnxruntime)をインストール済みの状態です。
>pip list Package Version ----------- ------- Cython 0.29.24 flatbuffers 2.0 numpy 1.21.3 onnxruntime 1.9.0 pip 21.3.1 protobuf 3.19.0 setuptools 58.3.0
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、insightfaceのインストールです。
insightfaceのインストールは、以下のコマンドとなります。
pip install insightface
インストールには、そこそこ時間がかかります。
では、どんなパッケージがインストールされたのかを確認しましょう。
>pip list Package Version ---------------------- ---------- albumentations 1.1.0 certifi 2021.10.8 charset-normalizer 2.0.7 colorama 0.4.4 cycler 0.10.0 Cython 0.29.24 easydict 1.9 flatbuffers 2.0 idna 3.3 imageio 2.9.0 insightface 0.5 joblib 1.1.0 kiwisolver 1.3.2 matplotlib 3.4.3 networkx 2.6.3 numpy 1.21.3 onnx 1.10.1 onnxruntime 1.9.0 opencv-python-headless 4.5.4.58 Pillow 8.4.0 pip 21.3.1 prettytable 2.2.1 protobuf 3.19.0 pyparsing 2.4.7 python-dateutil 2.8.2 PyWavelets 1.1.1 PyYAML 6.0 qudida 0.0.4 requests 2.26.0 scikit-image 0.18.3 scikit-learn 1.0 scipy 1.7.1 setuptools 58.3.0 six 1.16.0 threadpoolctl 3.0.0 tifffile 2021.10.12 tqdm 4.62.3 typing-extensions 3.10.0.2 urllib3 1.26.7 wcwidth 0.2.5
依存するパッケージは、多いです。
そのため、Python仮想環境の利用をおススメします。
Windowsなら、IDEにPyCharmを使えば簡単に仮想環境を利用できます。
プロジェクト(今回ならinsightface専用)毎に仮想環境となります。
また、次の記事のようにコマンドでも簡単に仮想環境を利用できます。
GUIのない Linuxサーバーなら、こちらが一般的となるでしょう。
以上、 InsightFaceのインストールについて説明しました。
最後は、 InsightFaceの動作確認を行います。
InsightFaceの動作確認
InsightFaceの動作確認を行っていきます。
まずは、人が複数人いる画像を用意します。
今回は、次の画像を用意。
input.jpg
この画像を読み込んで処理を行うのが、次のコードです。
import numpy as np import cv2 from insightface.app import FaceAnalysis image_file = "input.jpg" img = cv2.imread(image_file) app = FaceAnalysis() app.prepare(ctx_id=0, det_size=(640, 640)) faces = app.get(np.asarray(img)) print("faces:" + str(len(faces))) rimg = app.draw_on(img, faces) cv2.imwrite("./output.jpg", rimg)
上記を実行すると、コンソールに何やら表示されて画像が作成されます。
作成された画像は、以下。
「InsightFaceとは?」において表示した画像と同じです。
output.jpg
なお、上記コードの初回実行時にはモデルがダウンロードされます。
そのため、初回実行時だけはその分だけ処理に時間がかかることになります。
ダウンロードされるのは、「buffalo_l」という名称のモデルパッケージとなります。
デフォルトは、「buffalo_l」ということです。
パッケージには、「検出」・「認識」などの処理ごとのモデルが含まれています。
保存場所は、~/.insightface/modelsになります。
Windowsなら、次の場所です。
C:\Users\ユーザー名\.insightface\models
~/.insightface/models/buffalo_lには、次のファイルが保存されています。
モデルを変更したい場合は、次のように設定します。
app = FaceAnalysis(name="antelopev2")
もちろん、初回実行時にはモデルのダウンロードが必要となります。
ちなみに、「antelopev2」をダウンロードした時点での~/.insightface/modelsの状況は以下。
要するに、モデルはここに設置するのです。
自分で作成したモデルがあれば、この場所にフォルダを適当に作成します。
そして、その作成したフォルダの中に「.onnx」を設置することになります。
フォルダ名が「my_model」だった場合、次のようにして呼び出します。
app = FaceAnalysis(name="my_model")
以上、InsightFaceの動作確認について説明しました。