이미지 파일에서 얼굴 영역 추출 실습(1)

Yk Lee·2022년 5월 22일
0

AI영상인식실습

목록 보기
8/16

OpenCV 기반 실습

Haar cascade classification을 활용한 얼굴인식 기법

Haar feature는 목적에 따라 크게 3종류로 나눠지며 총 14개의 패턴으로 이루어진다.

이미지에 6000개 이상의 haar feature를 활용한 결과값을 계산하여 얼굴 이미지 여부를 판단함.
이때의 분류기는 cascade classification이며 모든 이미지 영역에 6천개의 feature를 전부 계산하는 것이 아니라 feature의 조건이 하나라도 만족하지 않으면 not face로 판단하는 방법으로 연산량 간소화

OpenCV에는 주로 정면 얼굴인식기를 제공하며 눈, 상반신, 하반신, 전신 인식기를 추가로 제공한다.

  • 얼굴 영역 인식에 칼라 이미지가 아닌 Gray 이미지로 진행하여 알고리즘을 간소화 한 특징 있음
  • 성능으르 높이기 위하여 적절한 파라메터를 업데이트 하며 결과 확인 작업 진행이 필요
  • 실험 결과 이미지가 바뀌고 얼굴 크기가 달라질 경우 이를 위한 최적의 파라메터가 달라디는 점이 단점이다.

예제

import cv2

# 적절한 cascade xml file 선택
cascade_file = "haarcascade_frontalface_default.xml"

# 이미지 읽고 gray scale 로 변환
img = cv2.imread("football1.jpg")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# cascade classifier 읽고 얼굴 이미지 인식
cascade = cv2.CascadeClassifier(cascade_file)
face_list = cascade.detectMultiScale(img_gray, scaleFactor=1.14, minNeighbors=1)

# 인식한 얼굴에 사각형 표시
color = (255, 0, 0)
for face in face_list:
	x, y, w, h = face
	cv2.rectangle(img, (x, y), (x+w, y+h), color, thickness=2)

    
cv2.imshow('Face Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

결과

왜 한명이 잡히지 않았을까?
cascade.detectMultiScale(img_gray, scaleFactor=1.14, minNeighbors=1)
파라메터 값이 적용되지 않았다.
scaleFactor: 사진을 점점 축소하면서 얼굴을 찾는다. 그렇게 사진을 몇 프로를 줄일 것인지에 대한 파라메터, 너무 작으면 연산이 오래 걸리고 너무 크면 이미지가 빠질 수 있기에 적당히 고른다.
ScaleFacotr=1.10 인 경우

minNeighbors: 얼굴을 인식하는 퀄리티로 얼굴들이 얼마나 붙어있는지에 대한 파라메터로 높은 값일 수록 인식률이 떨어질 수 있지만 높은 퀄리티를 보여주고 낮을면 인식률일 높아질 수 있지만 낮은 퀄리티를 보여준다.
minNeighbors=5인경우

이미지별로 값들은 다다르다.

profile
AR개발자지망생

0개의 댓글