OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
DNNベースの顔検出と顔認識

前のチュートリアル: 高レベルAPI: TextDetectionModelとTextRecognitionModel
次のチュートリアル: PyTorch分類モデルの変換とOpenCV Pythonでの実行

原著者Chengrui Wang, Yuantao Feng
互換性OpenCV >= 4.5.4

はじめに

この節では、顔検出のための cv::FaceDetectorYN クラスと、顔認識のための cv::FaceRecognizerSF クラスを紹介する。

モデル

このモジュールには、事前学習済みで必要となる2つのモデル(ONNX形式)がある:

  • Face Detection:
    • サイズ: 338KB
    • WIDER Face Val セットでの結果: 0.830(easy)、0.824(medium)、0.708(hard)
  • Face Recognition
    • サイズ: 36.9MB
    • 結果:
データベース精度しきい値 (normL2)しきい値 (cosine)
LFW99.60% 1.128 0.363
CALFW93.95% 1.149 0.340
CPLFW91.05% 1.204 0.275
AgeDB-3094.90% 1.202 0.277
CFP-FP94.80% 1.253 0.212

コード

解説

検出結果 faces は型 CV_32F の2次元配列であり、各行が検出された顔のインスタンス、各列が顔の位置と5つの顔ランドマークを表す。各行の形式は以下のとおりである:

x1, y1, w, h, x_re, y_re, x_le, y_le, x_nt, y_nt, x_rcm, y_rcm, x_lcm, y_lcm

ここで、x1, y1, w, h は顔のバウンディングボックスの左上座標、幅、高さであり、{x, y}_{re, le, nt, rcm, lcm} はそれぞれ右目、左目、鼻先、口の右端、口の左端の座標を表す。

顔認識

顔検出に続いて、以下のコードを実行し、顔画像から顔特徴を抽出する。

2枚の顔画像の顔特徴 feature1feature2 を取得した後、以下のコードを実行して2つの顔の同一性の差異を計算する。

例えば、コサイン距離が0.363以上、またはnormL2距離が1.128以下であれば、2つの顔は同一人物であるとみなす。

参考文献:

謝辞

顔検出モデルの学習と提供をしてくださった Shiqi Yu 教授Yuantao Feng 氏に感謝する。

顔認識モデルの学習と提供をしてくださった Deng 教授博士課程の Zhong 氏、および 修士課程の Wang 氏に感謝する。