通りすがりの人の顔をすべて検出できるアプリケーションを設計するプロジェクトに取り組んでいます...数人の既知の人で構成される非常に大規模なデータベースがあります...EigenObjectRecognizerを使用して画像を認識しましたウェブカメラによってキャプチャされたフレーム...しかし、問題は、一部の人を誤って認識することです....したがって、この顔の一致の信頼値を取得する場合...次に、条件付きループを記述して、75より大きい場合に%、それ以外の場合は検出しないでください。また、PCAベースの認識が基本であることも知っているので、他の新しいアルゴリズムに確実に移行します。しかし、プロジェクトの締め切りのため、すぐに提出する必要があります。このEigenObjectRecognizer顔認識の信頼値を取得する方法を教えてください。
1 に答える
正確な信頼値はありませんが、使用して大まかに解釈できる可変スケールがあります。これが固有距離です。
良好な一致として分類される値は、データの量とトレーニングパラメータに応じて変化するため、しきい値を計算するには、さまざまな面で値をテストする必要があります。
この値を取得するには、Eigenクラスに関数を追加する必要があります。まず、使用するEigenObjectRecognizerを上書きします。これは、ファイルEigenObjectRecognizer.csを検索するのは非常に簡単です。これは、\EMGUインストールディレクトリ\Emgu.CVにあります。ファイルを抽出した場所では、binフォルダと同じフォルダにあるため、すべてを含むファイルを配置できます。使用する.dll。
Visual Studionのソリューションエクスプローラーでプロジェクト名を右クリックし、[追加]> [既存のアイテム...]を選択して、ファイルをプロジェクトに追加します。ファイルに移動して追加します。プロジェクトでは、参照でEMGU.CV.dllに保持されているものではなく、これが自動的に使用されます。
プロジェクトでEigenObjectRecognizer.csを開きます。これが元のコピーであるため、変更を加えても元のソースに影響がないことを心配する必要はありません。まず、Ctrlキーを押しながらmキーを押し、次にoキーを押すと、すべてのメソッドフィールドが折りたたまれます。
まず、私がEmgu.Customと呼んだ名前空間を上書きする必要があります。
ここで、コードの先頭で、他の変数の下に次の変数を追加します
private float eigenDistance;
次のメソッドをクラスに追加します。
/// <summary>
/// Get the calculated Eignen Distance for the last proceessed frame
/// </summary>
public float GetEignenDistance
{
get { return eigenDistance; }
}
これはどこにでも配置できますが、明らかにクラス内およびメソッドの外部に配置できます。これが重要な部分です。eigenDistanceをグローバルにしましたが、.Recognize(Image image)メソッドを呼び出すと非公開で作成されます。
EigenObjectRecognizer.cs内でこのメソッドを見つけて、変更します
float eigenDistance;
に
eigenDistance = -1;
floateigenDistanceを削除できます。行ですが、認識が正しく適用されている場合は常に正である必要があるため、エラーを監視できる値で上書きされるようにします。コードの次のセクションに次のものが含まれていることに気付くでしょう。
FindMostSimilarObject(image, out index, out eigenDistance, out label);
- 索引
- eigenDistance
- ラベル
すべての出力は、少し余分なコーディングで使用できますか?
Eigenレコグナイザー変数を書き込み変数にポイントする必要はありません。
Emgu.Custom.EigenObjectRecognizer recognizer;
これで、次の関数呼び出しを使用してEigenDistanceを取得できます。
float EigenDistance = recognizer.GetEignenDistance;
これが物事をクリアすることを願っています、
乾杯、
クリス