-
Python - 안면인식(OpenCV)프로젝트 2021. 10. 15. 20:19
- Harr Feature
- Haar Cascade Classifier
- opencv 에서는 haar feature를 이용한 얼굴인식 코드를 제공합니다.
- haar cascade classifier는 영상을 windowing 하면서 haar feature들을 순차적으로 여러 stage로 검사하여 face가 아니면 이후는 보지도 않고 버려 버린다. 모든 feature를 연산할 필요가 없으므로 연산량이 대폭 줄어든다
학습하기
OpenCV는 인텔이 개발한 이미지 프로세싱에 중점을 둔 라이브러리 입니다.
OpenCV에서 제공하는 harr cascade를 통해 손쉽게 코드로 구현할 수 있습니다.
라이브러리 내에 xml파일이 있기 때문에 따로 다운받지 않아도 된다는 장점이 있습니다.
OpenCV로 할 수 있는 것
- 윤곽선 검출
- 노이즈 제거
- 이미지 스티칭을 이용한 파노라믹 사진 제작
- 안면인식
- 영상속 안면 인식
이 이외에도 많은 프로세싱을 지원한다.
이제 안면인식을 위한 소스코드를 분석해보자!
import cv2 face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_alt.xml') image = cv2.imread('image/1.jpg') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: cv2.rectangle(image, (x,y), (x+w, y+h), (225, 0 ,0), 3) cv2.imshow('img', image) cv2.waitKey(0) cv2.destroyAllWindows()위 소스코드의 작동원리를 알아보자.
- OpneCV 선언
- Face 검출 알고리즘인 haarcascade를 face_cascade라는 변수에 넣기
- 준비해놓은 image 불러오기 -> grayScale로 변경
- 위에서 했던 모든 속성(Scale변경, 알고리즘 적용) --> faces라는 변수에 할당
- 얼굴을 검출하기 위해 x,y,w,h를 haarcascde에서 찾기 --> 찾으면 cv2.rectangle로 사각형 그리기
- 이미지 출력
발생할 수 있는 오류
우리가 사용한 검출 알고리즘은 frontalface 알고리즘이기 때문에 이미지 속에 사람얼굴이
정면을 보고있지 않으면 검출이 안되는 단점이 있다.
frontalface 이외에도 eye, lefteye, fullbody, smile, upperbody 등등 굉장히 많은 검출 알고리즘이 있기 때문에
얼굴인식, 몸인식, 눈인식, 웃음인식 등등이 가능하다.
haar cascade 알고리즘에 대해선 밑에 있는 링크를 통해 확인해보자.
https://github.com/opencv/opencv/tree/master/data/haarcascades