딥러닝으로 실시간 웃는 표정 인식하기

본 자료와 코드는 DL4CV – adrian 을 참고했습니다.

실시간 웃는 표정 인식하기

이번에 만들어 볼 것은 실시간으로 노트북의 웹캠을 이용해 자신의 미소를 인식하는 코드이다. 실시간 인식이라 영상을 처리해야하고 또 얼굴을 탐지해야 하는데 알고보니 모두 opencv 라이브러리를 이용하면 가능하더라.

전체적인 과정은 다음과 같다.

  1. Gray scale인 표정 데이터를 CNN 모델을 이용하여 학습. 여기서는 lenet을 이용하였다.
  2. 얼굴을실시간으로탐지
  3. 탐지된얼굴을모델에맞춰변환예측
  4. 결과를화면에띄우기.

먼저 데이터는 이렇다. 흑백의 안 웃는 얼굴과 웃는 얼굴. 흑백이라 차원도 적고 딱 얼굴만 꽉찬 데이터라 학습하기에 매우 좋다. 문제는 데이터의 양이 불균형하다는 것. 안 웃는 얼굴의 데이터가 약 10000개, 웃는 얼굴이 약 4000개이다.

불균형 문제를 해결하기 위해 weight를 주고 학습을 하였다. 랩탑으로 코드를 실행하는 거라 epoch은 3번만 하였고 validation accuracy는 그래도 0.9051이라는 좋은 값을 보인다. 값으로만 봐서는 epoch을 늘리면 아주 좋을 거 같은 느낌.

이후 실시간으로 얼굴을 탐지하고 변환하여 딥러닝 모델에 집어넣는 과정을 진행했다. 얼굴을 탐지하는데는 또 딥러닝 모델을 만들기엔 배보다 배꼽이 더 큰 상황이라 haarcascade face recognition을 사용했다. 개발된 지 꽤 된 알고리즘이고 이미 학습된 기계학습 모델의 얼굴 feature를 이용해 탐지하는 방식이다. 작동은 정면인 경우에 얼굴을 놓치는 일 없이 아주 잘 된다. 사실 지금 대부분의 얼굴 인식 기능이 있는 기기는 이런 방식을 사용하고 있지 않을까. haarcascade는 Opencv로 사용이 가능하다.

얼굴을 인식하고 변환하여 모델에 집어넣어 결과가 나오면 이렇게 결과를 보여준다. 이 모든 과정은 cpu만 사용하였는데 반응속도도 빠르고 충분히 사용 가능하다.

코드