Favicon

Cascade classifier with face recognition

Peponi7/14/20253m

C#
NugetPackageOpenCvSharp4HarrLBP

1. Introduction

CascadeClassifier는 OpenCV에서 제공하는 검출 클래스로, 사전 훈련 데이터를 이용한 빠른 객체 검출에 이용된다. 사전 훈련 데이터는 일반적으로 XML 파일 형태로 제공되며, 검출하고자 하는 객체의 특징을 학습한 정보가 담겨 있다. CascadeClassifierHarr 또는 LBP 특징을 이용하여 객체를 검출하며 여러 단계의 분류기가 직렬로 적용되어 이미지에서 객체가 아닌 부분을 빠르게 걸러낼 수 있는 특징을 가지고 있다.

이 문서에서는 CascadeClassifier, 동영상을 이용하여 사람과 고양이의 얼굴을 인식하는 사례를 간략히 소개한다. CascadeClassifier 및 핵심 구성 요소인 AdaBoost algorithm에 대한 자세한 내용은 첨부된 링크를 참조한다.

실습에 사용할 학습 데이터는 다음과 같다.

사람 얼굴 인식 : harrcascade_frontalface_alt2.xml
고양이 얼굴 인식 : harrcascade_frontalcatface.xml

실습에 사용할 동영상은 다음과 같다.

Video by Сергей Новокрещенных from PixabayVideo by Luzivan De Jesus Moreno Vieira from Pixabay

2. Example

Human face recognitionCat face recognition
private void Perform(VideoCapture video, string trainFileName)
{
    // OpenCV 제공 window
    Window videoWindow = new("Viewer");
 
    // CascadeClassifier 초기화. Harr 또는 LBP 모델 로드
    using var classifier = new CascadeClassifier(trainFileName);
 
    while (true)
    {
        using var frame = new Mat();
        video.Read(frame);
 
        // 동영상이 끝나면 frame.Empty 가 true로 바뀜
        if (frame.Empty())
            break;
 
        // 전처리 (여기서는 간단히 grayscale만 적용)
        using var grayscale = frame.CvtColor(ColorConversionCodes.BGR2GRAY);
 
        // 객체 찾기
        // scaleFactor : 피라미드 각 단계의 스케일 지정. 값이 작을수록 더 많은 스케일 검사
        // minNeighbors : 객체 판정을 위한 이웃 수 지정. 값이 클수록 검출 정확도는 올라가지만 검출률 떨어짐
        // flags : 검색 방법 제어
        // minSize : 객체 판정 최소 크기
        // maxSize : 객체 판정 최대 크기
        var detected = classifier.DetectMultiScale(grayscale);
 
        // 찾은 객체 표시
        foreach (var rect in detected)
        {
            frame.Rectangle(rect, Scalar.Crimson, 2);
        }
 
        videoWindow.ShowImage(frame);
        Cv2.WaitKey(1);
    }
}

3. 참조 자료