InsightFaceを使った大量写真からの顔認識
ALL models are available for non-commercial research purposes only.
InsightFaceの使い方 import cv2 import numpy as np import insightface from insightface.app import FaceAnalysis from insightface.data import get_image as ins_get_image app = FaceAnalysis(providers=['CUDAExecutionProvider', 'CPUExecutionProvider']) app.prepare(ctx_id=0, det_size=(640, 640)) img = ins_get_image('t1') faces = app.get(img) rimg = app.draw_on(img, faces) cv2.imwrite("./t1_output.jpg", rimg)この例では、用意されたサンプル画像での顔検出ですが img = ins_get_image('t1') を img = cv2.imread(image_path) に置き換えれば任意の画像で顔検出できます。
一応、上記のQuick Exampleの注意点として、 app.draw_on(img, faces) の実行時に AttributeError: module 'numpy' has no attribute 'int' というエラーが出るので以下のワークアラウンドが必要です。
import numpy as np np.int = int # エイリアスを作る pip install onnxruntime pip install insightface 運用開始してみてInsightFaceのデフォルトでは buffalo_l というモデルパックが使われるようです。
上記のページに人種ごとの認識率のデータが記載されていますが、 East Asian は Accuracy が 74.96 ということで他の人種(African、 Caucasian、South Asian)より抜けて低く、その影響もあるかもしれません。
AWS が Amazon Rekognition の最新バージョンを使用して実行したテストで、12,000 以上の画像で性別分類を実行するために顔分析を実行しました。6 種類の民族 (南アジア、ヒスパニック、東アジア、白人、アフリカ系アメリカ人、中東) にわたる 1,000 人の男性と 1,000 人の女性をランダムに選択しました。すべての民族で、性別分類の精度に有意差は見られませんでした。
また、デフォルトの buffalo_l(ResNet50、326M) ではなくそれより大きいモデルパックの antelopev2 (ResNet100、407M) を使うと改善されるかもしれません。いずれ試してみたいと思います。