OpenCV 얼굴 인식 실현
1.얼굴 검사
2.얼굴 전처리
3.수 집 된 사람의 얼굴 훈련 기계 에서 알고리즘 배우 기
4.얼굴 인식
5.마무리 작업
얼굴 검출 알고리즘:
Haar 의 얼굴 감지 기 기본 사상 에 따 르 면 얼굴 정면 대부분 에 눈 이 있 는 곳 은 이마 와 볼 보다 어 두 워 야 하고 입 이 볼 보다 어 두 워 야 한 다 는 등의 상황 이 있다.이 는 보통 20 개의 비 교 를 통 해 검 측 된 대상 이 얼굴 인지 아 닌 지 를 결정 하 는데 실제로 수천 번 을 하 는 경우 가 많다.
LBP 기반 얼굴 감지 기의 기본 사상 은 Haar 기반 얼굴 감지 기와 유사 하지만 픽 셀 밝기 직사 도,예 를 들 어 가장자리,구석,평탄 한 지역 의 직사 도 를 비교 합 니 다.
이 두 가지 얼굴 감지 기 는 훈련 된 이미지 세트 를 통 해 얼굴 을 찾 을 수 있 으 며,이 이미지 세트 는 opencv 에 XML 파일 이 존재 하여 나중에 사용 할 수 있 습 니 다.
이러한 등급 별 분류 검 측 기 는 보통 적어도 1000 개의 독특한 얼굴 이미지 와 10000 개의 비 얼굴 이미 지 를 훈련 으로 사용 해 야 하 며,훈련 시간 은 보통 LBP 가 몇 시간 걸 립 니까?
Haar 일주일 걸 려 요.
프로젝트 의 핵심 코드 는 다음 과 같 습 니 다.
initDetectors
faceCascade.load(faceCascadeFilename);
eyeCascade1.load(eyeCascadeFilename1);
eyeCascade2.load(eyeCascadeFilename2);
initWebcam
videoCapture.open(cameraNumber);
cvtColor(img, gray, CV_BGR2GRAY);
// ,
resize(gray, inputImg, Size(scaledWidth, scaledHeight));
equalizeHist(inputImg, equalizedImg);
cascade.detectMultiScale(equalizedImg......);
얼굴 전처리:실제 훈련(이미지 수집)과 테스트(카메라 이미지 에서 온)의 이미지 가 크게 다 를 수 있 습 니 다.(예 를 들 어 빛,사람의 얼굴 방위,표정 등)
결과 가 나 빠 지기 때문에 훈련 용 데이터 세트 가 중요 하 다.
얼굴 예 처 리 는 이런 문 제 를 줄 이 고 전체 얼굴 인식 시스템 의 신뢰성 을 높이 는 데 도움 이 된다.
사람의 얼굴 을 미리 처리 하 는 가장 간단 한 형식 은 equalizeHist()함수 로 직사 도 균형 을 잡 는 것 이다.이것 은 사람의 얼굴 이 그 단 계 를 검사 하 는 것 과 같다.
실제 검출 알고리즘 을 더욱 신뢰 할 수 있 도록 얼굴 특징 검출(예 를 들 어 눈,코,입,눈썹 검출)을 사용 하고 본 프로젝트 는 눈 검출 만 사용한다.
OpenCV 자체 훈련 된 눈 탐지 기 를 사용 합 니 다.예 를 들 어 정면 안면 검 사 를 마 친 후 한 사람의 얼굴 을 얻어 눈 검 측 기 를 이용 해 얼굴의 왼쪽 눈 구역 과 오른쪽 눈 구역 을 추출 하고 각 눈 구역 에 대해 직사 도 균형 을 맞춘다.
이 단계 에 관련 된 조작 은 다음 과 같은 내용 이 있다.
1.기하학 적 변환 과 재단
사람의 얼굴 을 맞 추 는 것 은 매우 중요 하 다.사람의 얼굴 을 회전 시 켜 눈 을 수평 으로 유지 하고 사람의 얼굴 을 확대 하여 눈 사이 의 거 리 를 똑 같이 한다.사람의 얼굴 을 평평 하 게 이동 시 켜 눈 을 항상 필요 한 높이 에서 수평 으로 가운데 로 한다.
얼굴 외곽 을 재단 하 다.
2.사람의 얼굴 왼쪽 과 오른쪽 에 각각 직사 도 를 사용 하여 균형 을 맞춘다.
3.매끈매끈 하 다
쌍무 필터 로 영상 소음 을 줄이다.
4.타원 마스크
남 은 머리 와 얼굴 이미지 배경 제거
프로젝트 의 핵심 코드 는 다음 과 같 습 니 다.
detectBothEyes(const Mat &face, CascadeClassifier &eyeCascade1, CascadeClassifier &eyeCascade2,
Point &leftEye, Point &rightEye, Rect *searchedLeftEye, Rect *searchedRightEye);
topLeftOfFace = face(Rect(leftX, topY, widthX, heightY));
//
detectLargestObject(topLeftOfFace, eyeCascade1, leftEyeRect, topLeftOfFace.cols);
// ,
leftEye = Point(leftEyeRect.x + leftEyeRect.width/2, leftEyeRect.y + leftEyeRect.height/2);
// ,
Point2f eyesCenter = Point2f( (leftEye.x + rightEye.x) * 0.5f, (leftEye.y + rightEye.y) * 0.5f );
// (Affine Warping)
rot_mat = getRotationMatrix2D(eyesCenter, angle, scale);
//
warpAffine(gray, warped, rot_mat, warped.size());
//
equalizeHist(leftSide, leftSide);
equalizeHist(rightSide, rightSide);
// , 1/4 1/4 , 2/4 。
//
bilateralFilter(warped, filtered, 0, 20.0, 2.0);
//
filtered.copyTo(dstImg, mask);
사람의 얼굴 수집 및 훈련:좋 은 데이터 세트 는 사람의 얼굴 이 바 뀌 는 여러 가지 상황 을 포함해 야 하 며,이러한 변 화 는 훈련 집중 에 나타 날 수 있다.정면 얼굴 만 테스트 하면,완전히 정면 얼굴 이 있 는 이미 지 를 훈련 시 키 면 된다.
따라서 좋 은 훈련 집 에는 많은 실제 상황 이 담 겨 있어 야 한다.
이 항목 에서 수집 한 이미지 사이 에는 최소 1 초 간격 이 있 으 며,L2 범 수 를 기반 으로 한 상대 적 인 오류 평가 기준 을 사용 하여 두 픽 셀 간 의 유사 성 을 비교 합 니 다.
errorL2 = norm(A, B, CV_L2);
similarity = errorL2 / (double)(A.rows * A.cols);
신인 얼굴의 한도 값 을 수집 하 는 것 보다 이번 그림 을 수집 할 지 여 부 를 결정 한다.많은 기술 로 더 많은 훈련 데 이 터 를 얻 을 수 있다.예 를 들 어 미 러 얼굴 을 사용 하고 무 작위 소음 을 넣 으 며 얼굴 이미 지 를 바 꾸 는 픽 셀,회전 등 이다.
//
flip(preprocessedFace, mirroredFace, 1);
모든 사람 에 게 충분 한 얼굴 이미 지 를 수집 한 후,그 다음 에는 얼굴 인식 에 적합 한 기계 학습 알고리즘 을 선택 하여,이 를 통 해 수집 한 데 이 터 를 학습 하여 한 사람의 얼굴 인식 시스템 을 훈련 시 켜 야 한다.얼굴 인식 알고리즘:
1.얼굴 특징,PCA 라 고도 함(주성 분 분석)
2.Fisher 얼굴,LDA 라 고도 함(선형 판별 분석)
3.부분 2 값 모드 직사 도(Local Binary Pattern Histograms,LBPH)
다른 얼굴 인식 알고리즘:www.face-rec.org/algorithms/
OpenCV 는 CV::Algorithm 류 를 제공 합 니 다.이 종 류 는 몇 가지 서로 다른 알고리즘 이 있 는데 그 중의 한 가지 알고리즘 으로 간단 하고 통용 되 는 얼굴 인식 을 완성 할 수 있 습 니 다.
OpenCV 의 contrib 템 플 릿 에는 위의 얼굴 인식 알고리즘 을 실현 하 는 FaceRecognizer 클래스 가 있 습 니 다.
initModule_contrib();
model = Algorithm::create<FaceRecognizer>(facerecAlgorithm);
model->train(preprocessedFaces, faceLabels);
이 코드 는 선택 한 얼굴 인식 훈련 알고리즘 전 체 를 실행 할 것 이다.얼굴 인식:
1.얼굴 인식:얼굴 을 통 해 이 사람 을 인식 한다.
FaceRecognizer::predict()함 수 를 간단하게 호출 하여 사진 속 사람 을 식별 할 수 있 습 니 다.
int identity = model->predict(preprocessedFace);
문 제 는 주어진 사람 을 항상 예측 하 는 것 이다.이 문 제 를 해결 하 는 방법 은 신뢰 도 기준 을 제정 하 는 것 이 고,신뢰 도가 너무 낮 으 면 판독 할 수 있 는 것 은 모 르 는 사람 이다.
2.얼굴 검증:이미지 에서 찾 고 싶 은 사람 이 있 는 지 검증
믿 을 만 한 지,아니면 시스템 이 모 르 는 사람 을 정확하게 식별 할 수 있 는 지 검증 하기 위해 서 는 얼굴 검증 이 필요 하 다.
여기 서 신뢰 도 를 계산 하 는 방법 은:
특징 벡터 와 특징 치 를 사용 하여 얼굴 그림 을 재 구성 한 다음 에 입력 한 이미지 와 재 구성 도 를 비교 합 니 다.한 사람 이 훈련 에 여러 장의 얼굴 그림 을 집중 시 키 면 특징 벡터 와 특징 을 사용한다.
값 을 재 구성 한 후에 아주 좋 은 효과 가 있어 야 한다.없 으 면 차이 가 매우 크 고 알 수 없 는 얼굴 일 수 있다 는 것 을 나타 낸다.
subspaceProject()함수 가 얼굴 이미 지 를 특징 공간 에 비 추고 subspaceReconstruct()함수 로 특징 공간 에서 이미 지 를 재 구성 합 니 다.
마무리:대화 식 GUI
OpenCV 함 수 를 이용 하면 일부 구성 요소,마우스 클릭 등 을 쉽게 그 릴 수 있다.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ip camera android에 액세스하고 java를 사용하여 모니터에 표시그런 다음 PC에서 다운로드 폴더를 추출해야 합니다 그런 다음 프로젝트 폴더에 다운로드한 javacv 라이브러리를 추가해야 합니다. 먼저 라이브러리 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 jar/폴더 추가를 선택...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.