2012-02-26 2 views
5

내가 지나가고있는 사람의 얼굴을 모두 감지 할 수있는 응용 프로그램을 디자인해야하는 프로젝트를 진행 중입니다 ... 여러 명의 알려진 사람들로 구성된 매우 큰 데이터베이스가 있습니다 ... EigenObjectRecognizer를 사용하여 웹캠에 의해 캡쳐 된 이미지 프레임 ... 그러나 문제는 때때로 어떤 사람들을 잘못 인식합니다 .... 그래서이 얼굴 일치의 신뢰도 값을 얻는다면 ... 조건부 루프를 작성하여 더 크면 75 % 이상을 발견 한 경우에만 그렇지 않으면 감지 할 수 없습니다. 또한 PCA 기반 인식이 기본이므로 다른 새로운 알고리즘으로 넘어갈 것입니다. 프로젝트의 마감 기한으로 인해 신속하게 제출해야합니다 ... 그렇다면이 EigenObjectRecognizer 얼굴 인식의 신뢰도를 얻는 방법을 알려주십시오 ....EMGU CV를 사용하여 안면 인식에 대한 신뢰도를 얻는 방법?

답변

7

그러나 정확한 신뢰 값은 없습니다. ere는 사용할 수 있고 대략적으로 Eigen Distance 인 것으로 해석되는 가변 스케일입니다.

좋은 일치로 분류되는 값은 보유하고있는 데이터의 양과 학습 매개 변수에 따라 달라 지므로 임계 값을 계산하기 위해 다른 얼굴로 값을 테스트해야합니다.

이 값을 얻으려면 Eigen 클래스에 함수를 추가해야합니다. 먼저 우리가 사용하는 EigenObjectRecognizer를 덮어 씁니다. 이 파일은 EigenObjectRecognizer.cs라는 파일에 아주 간단합니다. \ EMGU 설치 디렉토리 \ Emgu.CV에 있습니다. 또는 파일을 압축 해제 한 위치에서 bin 폴더와 동일한 폴더에있는 모든 파일을 추출 할 수 있어야합니다. .dll을 사용합니다.

visual studion의 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 추가> 기존 항목 ...을 선택하여 프로젝트에 파일을 추가하십시오. 파일로 이동하여 추가하십시오. 프로젝트에서 참조에 EMGU.CV.dll이 포함 된 것이 아니라 자동으로이 파일이 사용됩니다.

프로젝트에서 EigenObjectRecognizer.cs를 엽니 다. 원본의 사본이므로 걱정하지 마십시오. 변경하면 원본 소스에 영향을 미치지 않습니다. Ctrl 키를 누른 상태에서 m 키를 누른 다음 o 키를 누르면 모든 메소드 필드가 축소됩니다.

필자는 Emine.Custom이라는 네임 스페이스를 덮어 써야합니다. 당신은 클래스 내에서 분명이 어디서나하지만를 배치 할 수 있습니다

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

다른

private float eigenDistance; 

아래에 다음과 같은 변수가 클래스에 다음과 같은 방법을 추가 코드의 상단에 지금

, 메소드 밖에서 중요한 비트가되었습니다. 우리는 eigenDistance를 전역 적으로 만들었지 만 .Recognize (이미지 이미지) 메서드를 호출 할 때 개인적으로 생성됩니다.

것은 EigenObjectRecognizer.cs 내에서이 방법을 찾아

float eigenDistance; 

eigenDistance = -1; 

당신이 플로트를 eigenDistance 삭제할 수 변경; 라인을 인식하고 있지만 인식이 올바르게 적용되면 항상 긍정적이어야하므로 오류를 관찰 할 수있는 값으로 덮어 쓰도록하고 싶습니다.당신은 코드의 다음 섹션이 포함되어 있음을 알 수 있습니다 :

FindMostSimilarObject(image, out index, out eigenDistance, out label); 
  • 인덱스
  • eigenDistance
  • 라벨

은 약간의 추가 코드와 함께 사용할 수있는 모든 출력된다.

우리

쓰기 하나에 우리의 아이겐 인식 변수를 지적 할 필요 :

Emgu.Custom.EigenObjectRecognizer recognizer; 

우리는 지금이 함수 호출로 EigenDistance을 얻을 수 있습니다

float EigenDistance = recognizer.GetEignenDistance; 

희망이 물건을 지우고,

건배,

Chris

+0

선생님, 내 코드 인식기에서 EigenObjectRecognizer에 대한 참조 이름입니다 ... 나는 recognizer.Get_Eigen_Results를 사용하여 시도했습니다. 그러나 "Get_Eigen_Results"라는 이름을 가진 멤버를 찾을 수 없습니다. 여기에 참조를 추가하지 않으셨습니까? –

+0

안녕하세요, 죄송합니다. Surya님께 서 Eigen 클래스에 추가 한 기능입니다. 따라서 내 대답을 업데이트 할 예정입니다. – Chris

+0

안녕하세요, 동일한 인물이 있다면 이미지와 비교하고 싶습니다. 데이터베이스와의 거리를 확인하십시오. 하나, 다른 사람과보다 마침내이 거리를 비교? 또는 데이터베이스에없는 사람의 사진 2 장을 비교하는 방법은 무엇입니까? –