[ubuntu+python] 얼굴 검출 후 성별 인식

코딩/python|2020. 1. 15. 01:07

지난 번에 얼굴 검출에 대한 글을 작성한 것에 이어, 오늘은 얼굴을 검출한 후에 성별까지 인식하는 파이썬 코드를 소개해드리도록 하겠습니다. 

 

역시 opencv-python과 cvlib 라이브러리가 필요합니다. 각자 운영체제에 맞게 설치하시면 됩니다. 

 

cvlib에서 제공하는 성별 검출 함수인 detect_gender는 AlexNet과 유사한 CNN 모델이 Adience dataset에서 훈련된 모델을 제공합니다.

 

파이썬 코드는 다음과 같습니다. 코딩에 익숙하시지 않은 분들은 주석을 참고해서 흐름을 살펴보시길 권해드립니다. 

 

# import libraries
import cv2
import cvlib as cv
import numpy as np

image_path = 'test1.JPG'
im = cv2.imread(image_path) # 이미지 읽기


# detect faces (얼굴 검출)
faces, confidences = cv.detect_face(im)

for face in faces:
    (startX,startY) = face[0],face[1]
    (endX,endY) = face[2],face[3]
    # draw rectangle over face
    cv2.rectangle(im, (startX,startY), (endX,endY), (0,255,0), 2) # 검출된 얼굴 위에 박스 그리기
    face_crop = np.copy(im[startY:endY, startX:endX])
    
    # gender detection (성별 검출)
    (label, confidence) = cv.detect_gender(face_crop)
    
    print(confidence)
    print(label)
    
    idx = np.argmax(confidence)
    label = label[idx]

    label = "{}: {:.2f}%".format(label, confidence[idx] * 100)

    Y = startY - 10 if startY - 10 > 10 else startY + 10

    cv2.putText(im, label, (startX, Y),  cv2.FONT_HERSHEY_SIMPLEX,
                0.7, (0, 255, 0), 2) # 박스 위에 남자인지 여자인지 라벨과 확률 쓰기
    

cv2.imwrite('result.jpg', im) # 이미지 쓰기

 

저와 제 아내가 함께 찍은 사진으로 테스트해봤습니다. 과연 결과는 어떨까요?

 

 

우선 얼굴은 잘 검출해냈습니다만, 성별 예측이 정확하진 않네요.ㅋㅋ (여보 미안. 이 성별 검출기는 98.57%의 확신을 가지고 여보를 남자라고... 예측해버렸네...ㅋㅋ)

 

다른 이미지로 한 번 더 테스트해보겠습니다. 부디... 

 

 

Female!! 다행히도 제대로 검출해냈죠? ㅋㅋ 아무튼 cvlib 라이브러리는 이런 기능을 가진 detect_gender 함수를 제공해줍니다. 

 

언제든 질문과 지적은 환영합니다. 댓글로 남겨주세요.^^ 

  1. 임영규 2020.03.14 16:57 댓글주소  수정/삭제  댓글쓰기

    error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\dnn\src\caffe\caffe_io.cpp:1121: error: (-2:Unspecified error) FAILED: fs.is_open(). Can't open "C:\Users\임영규\AppData\Roaming\SPB_Data\.cvlib\pre-trained\gender_deploy.prototxt" in function 'cv::dnn::ReadProtoFromTextFile'

    안녕하세요 개발자님
    이런식으로 오류가 나오는데 왜 그런건가요...?ㅠㅠ

    • BlogIcon 비스카이비전 2020.03.17 14:07 신고 댓글주소  수정/삭제

      가상환경을 설정하시고 다시 해보시기 바랍니다. 아니면 파이썬 버전을 다른 버전으로 설치해서 해보는 것도 추천드립니다. 버전 충돌일 가능성도 있어서..

  2. Hoon 2020.05.27 02:49 댓글주소  수정/삭제  댓글쓰기

    안녕하세요 개발자님
    혹시 얼굴인식 후 박스위에 라벨을 읽어 오디오로 출력해보고싶은데 어떤 코드를 쓰면 좋을까요?