2012-02-26 12 views
5

Pracuję nad projektem, w którym powinienem zaprojektować aplikację, która może wykryć wszystkie twarze osób przechodzących przez ... Mam bardzo dużą bazę danych składającą się z kilku znanych osób ... Użyłem EigenObjectRecognizer do rozpoznania ramka obrazu przechwytywana przez kamerę internetową ... Problem tkwi jednak w tym, że niektóre osoby błędnie rozpoznają ... Więc jeśli uzyskasz wartość zaufania tego dopasowania twarzy ... Wtedy mogę napisać pętlę warunkową, aby była większa niż 75%, a następnie wykrywa go inaczej. Ponadto wiem, że rozpoznawanie oparte na PCA jest podstawą, zdecydowanie przejdę do innych nowych algorytmów. Ale z uwagi na ostateczny termin projektu, powinienem go szybko przesłać ... .Tak, proszę mi powiedzieć, jak uzyskać wartość zaufania tego rozpoznawania twarzy EigenObjectRecognizer ....Jak zdobyć wartość Zaufania w rozpoznawaniu twarzy za pomocą EMGU CV?

Odpowiedz

7

Nie ma dokładnej wartości Jest to zmienna skala, którą można z grubsza zinterpretować jako taką, która jest odległością Eigen.

Wartość, która klasyfikuje się jako dobre dopasowanie, zmienia się w zależności od ilości posiadanych danych i parametrów treningu, dlatego konieczne będzie przetestowanie wartości z różnymi ścianami w celu obliczenia progu.

Będziesz musiał dodać funkcję do klasy Eigen, aby uzyskać tę wartość. Najpierw zastąpimy EigenObjectRecognizer, którego używamy. To jest naprawdę proste loacte, plik EigenObjectRecognizer.cs, znajduje się w katalogu instalacyjnym \ EMGU \ Emgu.CV lub gdziekolwiek wyodrębniłeś pliki, które powinieneś być w stanie splotować, ponieważ są w tym samym folderze co folder bin ze wszystkimi .dll, których używasz.

Dodaj plik do projektu klikając prawym przyciskiem myszy nazwę projektu w eksploratorze rozwiązań w studiu wizualnym i wybierając Dodaj> Istniejący element ... Przejdź do pliku i dodaj go. Twój projekt automatycznie skorzysta z tego, a nie z pliku EMGU.CV.dll w twoich referencjach.

Otwórz EigenObjectRecognizer.cs teraz w projekcie, nie martw się, że jest to kopia oryginału, więc wszelkie wprowadzone zmiany nie wpłyną na oryginalne źródło. Aby zacząć od ułatwienia, przytrzymując klawisz Ctrl, naciskając klawisz m, a następnie klawisz o, zwinie wszystkie pola metod.

Na początek musimy nadpisać przestrzeń nazw nazywaną moją Emgu.Custom.

Teraz w górnej części kodu dodać następujące zmienne pod innymi

private float eigenDistance; 

Dodaj następującą metodę do klasy,

/// <summary> 
    /// Get the calculated Eignen Distance for the last proceessed frame 
    /// </summary> 
    public float GetEignenDistance 
    { 
     get { return eigenDistance; } 
    } 

można umieszczać w dowolnym miejscu, ale oczywiście w klasie i poza metodą, teraz ważny kawałek. Zrobiliśmy eigenDistance globalnie, ale jest prywatnie tworzone, gdy nazywamy metodę .Recognize (Image image).

Znajdź tę metodę w EigenObjectRecognizer.cs i zmienić

float eigenDistance; 

do

eigenDistance = -1; 

można usunąć pływak eigenDistance; ale chciałbym upewnić się, że jest nadpisany wartością, którą mogę zaobserwować dla błędu, ponieważ zawsze powinno być pozytywne, jeśli rozpoznanie zostało poprawnie zastosowane.Można zauważyć, że następujący fragment kodu zawiera:

FindMostSimilarObject(image, out index, out eigenDistance, out label); 
  • Indeks
  • eigenDistance
  • etykieta

Czy wszystkie wyjścia dostępne do użytku z odrobiną dodatkowego kodowania.

Nie mamy potrzeby, aby podkreślić naszą zmienną Rozpoznawania EIGEN do napisać:

Emgu.Custom.EigenObjectRecognizer recognizer; 

Możemy teraz uzyskania EigenDistance z tego wywołania funkcji:

float EigenDistance = recognizer.GetEignenDistance; 

Nadzieja ta czyści rzeczy,

Pozdrowienia,

Chris

+0

Sir, w moim rozpoznawaczu kodów jest nazwa odwołania do EigenObjectRecognizer ... Próbowałem użyć rozpoznawania.Get_Eigen_Results. Ale nie mogłem znaleźć żadnego członka o nazwie "Get_Eigen_Results". Czy brakuje mi tutaj odniesienia? –

+0

Witam, przepraszam, Surya to funkcja, którą dodałem do klasy Eigen. Zaktualizuję odpowiednio odpowiedź. – Chris

+0

Cześć, myślisz, że to może zadziałać, jeśli chciałbym porównać obrazy z tą samą osobą - sprawdź odległość od bazy danych jeden, niż z innymi iw końcu porównać te odległości? Lub w jaki sposób porównać 2 zdjęcia osoby, która nie jest w bazie danych? –

Powiązane problemy