【Python】OpenCVを超えたInsightFaceによる顔認識

【Python】OpenCVを超えたInsightFaceによる顔認識 機械学習

「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の動作確認について説明しました。

タイトルとURLをコピーしました