python-cv2 를 사용 하여 Harr+Adaboost 얼굴 인식 을 실현 하 는 예제
하 울 특징 은 검 측 창 에서 지정 한 위치의 인접 사각형 을 사용 하여 각 사각형 의 픽 셀 과 그 차 이 를 계산 합 니 다.그리고 이 차이 점 으로 그림 의 하위 영역 을 분류 합 니 다.
haar 특징 템 플 릿 은 다음 과 같은 몇 가지 가 있 습 니 다.
첫 번 째 haar 특징 템 플 릿 을 예 로 들 면
계산 방식
1.특징=흰색-검은색(흰색 구역 의 픽 셀 과 검은색 구역 의 상징 을 뺀 합)
2.특징=전체 구역*가중치+검은색*가중치
haar 템 플 릿 으로 그림 처리 하기
그림 의 시작 부분 부터 haar 템 플 릿 을 이용 하여 왼쪽 에서 오른쪽으로 옮 겨 다 니 며 위 에서 아래로 옮 겨 다 니 며 보폭 을 설정 하고 그림 크기 와 템 플 릿 크기 의 정 보 를 고려 합 니 다.
만약 에 우리 가 지금
1080 * 720
크기 의 그림 이 있다 면10*10
haar 템 플 릿 이 있 고 걸음 길이 가 2 이다.그러면 우리 가 필요 로 하 는 계 산 량 은(1080/2*720/2)*100*템 플 릿 수량*크기 는 약 50-100 억 과 같 고 계 산 량 이 너무 많다.적분 도
적분 도 를 사용 하면 연산 시간 을 대량으로 줄 일 수 있 는데,실제로는 접두사 와 원 리 를 운용 한 것 이다
Adaboost 분류 기
Adaboost 는 일종 의 교체 알고리즘 으로 그 핵심 사상 은 같은 훈련 집 을 대상 으로 서로 다른 분류 기(약 분류 기)를 훈련 한 다음 에 이런 약 분류 기 를 집합 시 켜 더욱 강 한 최종 분류 기(강 분류 기)를 구성 하 는 것 이다.
알고리즘 흐름
이 알고리즘 은 간단 한 약 한 분류 알고리즘 향상 과정 으로 이 과정 은 끊 임 없 는 훈련 을 통 해 데이터 에 대한 분류 능력 을 향상 시 킬 수 있다.전체 과정 은 다음 과 같다.
1.먼저 N 개의 훈련 견본 에 대한 학습 을 통 해 첫 번 째 약 분류 기 를 얻는다.
2.잘못된 샘플 을 다른 새로운 데이터 와 함께 새로운 N 개의 훈련 샘플 을 구성 하고 이 샘플 에 대한 학습 을 통 해 두 번 째 약 분류 기 를 얻 을 수 있 습 니 다.
3.1 과 2 를 모두 잘못 나 눈 견본 에 다른 새로운 견본 을 더 해 다른 새로운 N 개의 훈련 견본 을 구성 하고 이 견본 에 대한 학습 을 통 해 세 번 째 약 분류 기 를 얻 을 수 있다.
4.최종 적 으로 향 상 된 강 분류 기.즉,어떤 데이터 가 어떤 종류 로 나 뉘 는 지 는 각 분류 기의 가중치 에 의 해 결정 된다.
홈 페이지 에서 Adaboost 분류 기 파일 두 개 를 다운로드 해 야 합 니 다.각각 얼굴 과 눈의 분류 기 입 니 다.
다운로드 주소:https://github.com/opencv/opencv/tree/master/data/haarcascades
코드 구현
얼굴 인식 을 실현 하 는 기본 절차:
1.파일 과 그림 불 러 오기
2.그 레이스 케 일 처리
3.haar 특징 얻 기
4.얼굴 검사
5.표시 하기
우 리 는 다운로드 한 분류 기 를 불 러 오기 위해 서 4.567914 를 사용 합 니 다.
그리고 우 리 는
cv2.CascadeClassifier()
방법 으로 식별 결 과 를 얻 었 다.
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 1. 2. 3. haar 4. 5.
face_xml = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_xml = cv2.CascadeClassifier('haarcascade_eye.xml')
img = cv2.imread('img.png')
cv2.imshow('img', img)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 1. 2. 3.
faces = face_xml.detectMultiScale(gray, 1.3, 5)
print('face = ',len(faces))
print(faces)
# ,
for (x,y,w,h) in faces:
cv2.rectangle(img, (x,y), (x + w, y + h), (255,0,0), 2)
roi_face = gray[y:y+h,x:x+w]
roi_color = img[y:y+h,x:x+w]
eyes = eye_xml.detectMultiScale(roi_face)
print('eyes = ',len(eyes))
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color, (ex,ey),(ex + ew, ey + eh), (0,255,0), 2)
cv2.imshow('dat', img)
cv2.waitKey(0)
face = 1
[[133 82 94 94]]
eyes = 2
python-cv2 를 사용 하여 Harr+Adaboost 얼굴 인식 을 실현 하 는 예제 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 python cv2 얼굴 인식 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.