티스토리 뷰

반응형
[Python] cvlib로 얼굴인식(성별, 나이) 예측하기

cvlib 란?

파이썬에서 얼굴, 객체 인식을 위한 사용하기 쉬운 라이브러리이다. opencv와 tensorflow를 사용하고 있기 때문에, 이 라이브러리를 사용하려면 위 2개를 설치해야 한다.

$ pip install opencv-python tensorflow

소스코드

얼굴인식

얼굴인식은 opencv의 dnn 모듈을 사용하여 사전에 학습된 모델로 inference해준다. 별다른 것 없이 cv.detect_face()함수면 쉽게 사용할 수 있다. 이 함수로 반환되는 결과는 얼굴의 좌표들과 예측된 얼굴 각각의 confidence이다.

예측된 얼굴 좌표는 (xmin, ymin, xmax, ymax) 순으로 반환된다. confidence는 0~1사이의 float값이다. 이 두개를 이용하여 얼굴위치와 정확도를 출력하는 코드이다.

import cv2
import cvlib as cv

img = cv2.imread('sample.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 얼굴 찾기
faces, confidences = cv.detect_face(img)

for (x, y, x2, y2), conf in zip(faces, confidences):
		# 확률 출력하기
    cv2.putText(img, str(conf), (x,y-10), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0), 1)
		# 얼굴위치 bbox 그리기
    cv2.rectangle(img, (x, y), (x2, y2), (0, 255, 0), 2)

# 영상 출력
cv2.imshow('image', img)

key = cv2.waitKey(0)
cv2.destroyAllWindows()

결과영상

5명 남자들의 얼굴 위치를 정확하게 맞추었고, confidence도 매우 높다.

성별 예측하기

위 얼굴인식에 이어 성별을 예측해주는 함수도 있다. 이것도 사전에 학습된 것으로 예측해주는 것으로 cv.detect_gender()함수로 쉽게 사용할 수 있다.

입력 영상으로 위에서 인식한 얼굴을 roi로 지정하여 해당 부분의 이미지를 입력하면 된다. 그럼 성별 label과 confidence가 반환된다. label은 ['male', female']로 되어있고, confidence도 [0.1, 0.9] 와 같은 식으로 confidence가 더 높은 것으로 결정하면 된다.

confidence 값이 높은 것의 index를 가져오기 위해 np.argmax()를 사용했고, 이 index로 label과 confidence를 각각 원본 영상에 출력한다.

import cv2
import cvlib as cv
import numpy as np

img = cv2.imread('sample3.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 얼굴 찾기
faces, confidences = cv.detect_face(img)

for (x, y, x2, y2)in faces:

    # 얼굴 roi 지정
    face_img = img[y:y2, x:x2]

    # 성별 예측하기
    label, confidence = cv.detect_gender(face_img)

    cv2.rectangle(img, (x, y), (x2, y2), (0, 255, 0), 2)

    gender = np.argmax(confidence)
    text = f'{label[gender]}:{confidence[gender]:.1%}'
    cv2.putText(img, text, (x,y-10), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0), 1)

# 영상 출력
cv2.imshow('image', img)

key = cv2.waitKey(0)
cv2.destroyAllWindows()

결과영상

얼굴인식은 당연히 잘 되었고, 성별또한 잘 인식되어 출력된 것을 확인할 수 있다.

참고자료

  1. cvlib 공식 github [링크]

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday