Cascade classifier with face recognition
Peponi │ 7/14/2025 │ 3m
C#
NugetPackageOpenCvSharp4HarrLBP
Cascade classifier with face recognition
7/14/2025
3m
Peponi
C#
NugetPackageOpenCvSharp4HarrLBP
1. Introduction
CascadeClassifier
는 OpenCV에서 제공하는 검출 클래스로, 사전 훈련 데이터를 이용한 빠른 객체 검출에 이용된다. 사전 훈련 데이터는 일반적으로 XML 파일 형태로 제공되며, 검출하고자 하는 객체의 특징을 학습한 정보가 담겨 있다. CascadeClassifier
는 Harr
또는 LBP
특징을 이용하여 객체를 검출하며 여러 단계의 분류기가 직렬로 적용되어 이미지에서 객체가 아닌 부분을 빠르게 걸러낼 수 있는 특징을 가지고 있다.
이 문서에서는 CascadeClassifier
, 동영상을 이용하여 사람과 고양이의 얼굴을 인식하는 사례를 간략히 소개한다. CascadeClassifier
및 핵심 구성 요소인 AdaBoost algorithm에 대한 자세한 내용은 첨부된 링크를 참조한다.
실습에 사용할 학습 데이터는 다음과 같다.
사람 얼굴 인식 : harrcascade_frontalface_alt2.xml
고양이 얼굴 인식 : harrcascade_frontalcatface.xml
실습에 사용할 동영상은 다음과 같다.
2. Example


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);
}
}