【Python】RetinaFace(retina-face)による顔認識

【Python】RetinaFace(retina-face)による顔認識 機械学習

「RetinaFaceによる顔認識をPythonで試したい」
「ディープラーニングによる顔認識を実行したい」
「InsightFaceのインストールに失敗する」

このような場合には、RetinaFace(retina-face)がおススメです。
この記事では、RetinaFace(retina-face)について解説しています。

本記事の内容

  • RetinaFace(retina-face)とは?
  • RetinaFace(retina-face)のシステム要件
  • RetinaFace(retina-face)のインストール
  • RetinaFace(retina-face)の動作確認

それでは、上記に沿って解説していきます。

RetinaFace(retina-face)とは?

RetinaFace(retina-face)は、深層学習をベースにしたPython用の最先端の顔検出器です。
つまり、ディープラーニングによる顔認識ライブラリということです。

まずは、その精度をご覧ください。

RetinaFace(retina-face)を用いて、認識できた顔の数は210個になります。
実は、これよりもさらに多く顔を認識できる方法があります。

InsightFaceを用いれば、1個だけ多い211個の顔を認識可能です。
結果の画像は、以下。

結果を見れば、RetinaFace(retina-face)よりもInsightFaceの方を利用したくなります。
ただ、RetinaFaceはInsightFaceの一部でもあるのです。

このややこしい部分を説明します。
InsightFaceには、顔認識のための技術・理論が3つ用意されています。

  • RetinaFace (CVPR’2020)
  • SCRFD (Arxiv’2021)
  • blazeface_paddle

RetinaFaceとは、顔認識のための理論の名前にあたります。
だから、InsightFaceにおいてもRetinaFaceを用いて顔認識を行うことが可能です。

ただ、現状ではSCRFDがInsightFaceのデフォルト扱いです。
実際、InsightFaceで用意してくれているモデルにはSCRFDしか存在していません。

「buffalo_l」が、標準のモデルパッケージとなります。
そのため、RetinaFaceの利用は難しい状況と言えます。

ここで、整理しておきます。
RetinaFace(retina-face)は、RetinaFaceの理論に基づいた顔認識に特化したPythonライブラリです。

そして、RetinaFace(retina-face)はインストールが簡単です。
Tensorflowさえ動く環境があれば、簡単にインストールできます。

それに対して、InsightFaceは決して簡単とは言えません。
どちらかと言うと、インストールが難しい部類です。
それでも、わかりやすいように記事で解説をしていますけどね。

だから、InsightFaceがインストールできたらそれでOKです。
でも、その場合はSCRFDで十分に事足ります。
むしろ、RetinaFace以上の結果も出ています。

しかし、InsightFaceをインストールできないことがあるでしょう。
そのような場合、RetinaFace(retina-face)の利用がおススメとなります。

以上、RetinaFace(retina-face)について説明しました。
次は、RetinaFace(retina-face)のシステム要件を確認します。

RetinaFace(retina-face)のシステム要件

現時点(2021年10月末)でのRetinaFace(retina-face)の最新バージョンは、0.0.5となります。
この最新バージョンは、2021年8月2日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

また、サポート対象となるPythonのバージョンはPythom 3.5.5以降となります。
あとは、TensorFlowのバージョンが要注意です。

TensorFlow 1.9.0以降が、必要となります。
TensorFlow 2でも問題ありません。

なお、RetinaFace(retina-face)のインストールの際に、TensorFlowも自動的にインストールされます。
つまり、事前にTensorFlowをインストールする必要はないということです。

以上、RetinaFace(retina-face)のシステム要件を説明しました。
次は、RetinaFace(retina-face)をインストールします。

RetinaFace(retina-face)のインストール

検証は、次のバージョンのPythonで行います。

>python -V    
Python 3.9.7

まずは、現状のインストール済みパッケージを確認しておきます。

>pip list 
Package    Version 
---------- ------- 
pip        21.3.1 
setuptools 58.3.0

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、RetinaFace(retina-face)のインストールです。
RetinaFace(retina-face)のインストールは、以下のコマンドとなります。

pip install retina-face

インストールは、しばらく時間がかかります。
では、どんなパッケージがインストールされたのかを確認しましょう。

>pip list 
Package                 Version 
----------------------- --------- 
absl-py                 0.15.0 
astunparse              1.6.3 
beautifulsoup4          4.10.0 
cachetools              4.2.4 
certifi                 2021.10.8 
charset-normalizer      2.0.7 
clang                   5.0 
colorama                0.4.4 
filelock                3.3.1 
flatbuffers             1.12 
gast                    0.4.0 
gdown                   4.2.0 
google-auth             2.3.2 
google-auth-oauthlib    0.4.6 
google-pasta            0.2.0 
grpcio                  1.41.1 
h5py                    3.1.0 
idna                    3.3 
keras                   2.6.0 
Keras-Preprocessing     1.1.2 
Markdown                3.3.4 
numpy                   1.19.5 
oauthlib                3.1.1 
opencv-python           4.5.4.58 
opt-einsum              3.3.0 
Pillow                  8.4.0 
pip                     21.3.1 
protobuf                3.19.0 
pyasn1                  0.4.8 
pyasn1-modules          0.2.8 
PySocks                 1.7.1 
requests                2.26.0 
requests-oauthlib       1.3.0 
retina-face             0.0.5 
rsa                     4.7.2 
setuptools              58.3.0 
six                     1.15.0 
soupsieve               2.2.1 
tensorboard             2.7.0 
tensorboard-data-server 0.6.1 
tensorboard-plugin-wit  1.8.0 
tensorflow              2.6.0 
tensorflow-estimator    2.6.0 
termcolor               1.1.0 
tqdm                    4.62.3 
typing-extensions       3.7.4.3 
urllib3                 1.26.7 
Werkzeug                2.0.2 
wheel                   0.37.0 
wrapt                   1.12.1

依存するパッケージは、かなり多いです。
そのため、Python仮想環境の利用が必須でしょう。

Windowsなら、IDEにPyCharmを使えば簡単に仮想環境を利用できます。
プロジェクト(今回ならTikTokApi専用)毎に仮想環境となります。

また、次の記事のようにコマンドでも簡単に仮想環境を利用できます。
GUIのない Linuxサーバーなら、こちらが一般的となるでしょう。

以上、 RetinaFace(retina-face)のインストールについて説明しました。
最後は、 RetinaFace(retina-face)の動作確認を行います。

RetinaFace(retina-face)の動作確認

まず、顔認識を行いたい画像を用意します。
今回は、次の画像をtest.jpgとして用意しています。

test.jpg

この画像を顔認識するサンプルコードは、以下。

from retinaface import RetinaFace
import cv2

img_path = "test.jpg"
img = cv2.imread(img_path)

resp = RetinaFace.detect_faces(img_path, threshold = 0.5)
print("faces:" + str(len(resp)))

def int_tuple(t):
    return tuple(int(x) for x in t)

for key in resp:
    identity = resp[key]

    #---------------------

    landmarks = identity["landmarks"]
    diameter = 1
    cv2.circle(img, int_tuple(landmarks["left_eye"]), diameter, (0, 0, 255), -1)
    cv2.circle(img, int_tuple(landmarks["right_eye"]), diameter, (0, 0, 255), -1)
    cv2.circle(img, int_tuple(landmarks["nose"]), diameter, (0, 0, 255), -1)
    cv2.circle(img, int_tuple(landmarks["mouth_left"]), diameter, (0, 0, 255), -1)
    cv2.circle(img, int_tuple(landmarks["mouth_right"]), diameter, (0, 0, 255), -1)

    facial_area = identity["facial_area"]
    cv2.rectangle(img, (facial_area[2], facial_area[3]), (facial_area[0], facial_area[1]), (255, 255, 255), 1)
    #facial_img = img[facial_area[1]: facial_area[3], facial_area[0]: facial_area[2]]
    #plt.imshow(facial_img[:, :, ::-1])

cv2.imwrite('output.'+img_path.split(".")[1], img)

#------------------------------
#alignment
"""
img_path = "dataset/img11.jpg"

resp = RetinaFace.extract_faces(img_path = img_path, align = True)

for img in resp:
    plt.imshow(img[:, :, ::-1])
    plt.axis('off')
    plt.show()
    cv2.imwrite('outputs/'+img_path.split("/")[1], img)

上記を実行すると、スクリプトと同じディレクトリ上にoutput.jpgが作成されます。

output.jpg

コンソールには、以下が表示されます。

faces:30

30人分の顔を認識できたということです。
次の顔が認識できているのは、なかなかスゴイと思います。

以上、RetinaFace(retina-face)の動作確認の説明でした。

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