LoginSignup
1
0

InsightFaceによる顔検出とランドマーク検出の為のサンプルコード

Posted at

世間話

 アイトラッキングを作ろうとしていたところ、とりあえず顔検出の速度が最も早いのはどれだろうか、、、という事でいろいろと試していました。

 結論から言ってしまうと、Dlibの方が様々な面で優れているように思います。情報量や使いやすさはあちらが優れています。
 しかし、このInsightFaceの大きなメリットとしては、追加で学習データなどをインストールする必要がないところ。
 定量的評価はしていませんが、こちらの方が検出精度が高いかもしれないところなどが挙げられます。

 そしてなにより、このライブラリは顔の特徴量などの検出とマッチングなどがメインのようで、それらが簡単に行えるそうです。
↓参考資料
https://nuco.co.jp/blog/article/TbUHF1lK#index_CwYeU8Jc

 とりあえず、ランドマーク検出という「InsightFaceOpenCVを使う場合のほぼ最小単位での実行の為のサンプルコード」としてお使いください。

インストール

 今回のInsightFaceを動かすための前提パッケージなどは以下の通り。

install
pip install cmake
pip install cython
pip install onnxruntime

pip install insightface

 なおcythononnxruntimeの前にインストールしてください。

 また、公式サイトに示されるバージョン要求などは以下の通り。
Cython>=0.29.28
cmake>=3.22.3
numpy>=1.22.3
動かなそうであればこのバージョンに指定してインストールしなおしてください。

 また、cmakeはVisual StudioやC言語のコンパイラがなければ動かない(インストールできない)場合があります。
 cmakeにはめちゃくちゃ気を付けてください。

サンプルコード

 コードは以下の通りです。
 なおこのInsightFaceは一回目の実行時は以降に比べて非常に時間がかかります。
 そもそもで実行に非常に時間がかかるため、不便でした。

InsightFace_sample.py
import cv2
import numpy as np
from insightface.app import FaceAnalysis
from insightface.data import get_image as ins_get_image


#モデルの読み込み
app = FaceAnalysis()
app.prepare(ctx_id=1, det_size=(640, 640))#ctx_id=0だとCPUを使用。1だとGPUを使用して処理。

capture = cv2.VideoCapture(0)


while True:
    ret, flame = capture.read()

    if(ret == False):
        break

    faces = app.get(flame)

    # 顔の境界ボックスとランドマークを描画
    for face in faces:

        # 顔の境界ボックスを描画
        if face.bbox is not None:
            bbox = face.bbox.astype(int)
            cv2.rectangle(flame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)

        # ランドマークを描画
        if face.landmark_2d_106 is not None:
            for landmark in face.landmark_2d_106.astype(int):
                cv2.circle(flame, tuple(landmark), 1, (0, 0, 255), -1)
    cv2.imshow('Face Detection', flame)
    if cv2.waitKey(1) & 0xFF == ord('q'):#qキーを押すと終了
        break
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0