[파이썬] opencv-python 얼굴 표정 인식

OpenCV-Python은 컴퓨터 비전과 이미지 처리를 위한 강력한 라이브러리입니다. 이 포스트에서는 OpenCV-Python을 사용하여 얼굴 표정을 인식하는 방법에 대해 알아보겠습니다.

얼굴 표정 인식을 위해 필요한 패키지

얼굴 표정 인식을 위해 다음과 같은 패키지를 설치해야 합니다:

아래 명령을 사용하여 필요한 패키지를 설치할 수 있습니다:

pip install opencv-python
pip install numpy

얼굴 표정 인식 코드 예제

다음은 OpenCV-Python을 사용하여 얼굴 표정을 인식하는 코드의 예제입니다.

import cv2
import numpy as np

# 얼굴 감지를 위한 Haar Cascade 분류기 로드
face_cascade = cv2.CascadeClassifier('path/to/haar_cascade.xml')

# 얼굴 표정 분류를 위한 모델 로드
model = cv2.dnn.readNetFromCaffe('path/to/model.prototxt', 'path/to/model.caffemodel')

# 웹캠에서 영상을 읽어옴
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()

    # 회색조 이미지로 변환
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 얼굴 감지
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    for (x, y, w, h) in faces:
        # 얼굴 이미지 추출
        face_img = frame[y:y+h, x:x+w].copy()

        # 얼굴 이미지 크기 조정
        resized_face = cv2.resize(face_img, (48, 48))

        # 인풋 이미지 전처리
        blob = cv2.dnn.blobFromImage(resized_face, 1.0, (48, 48), (0, 0, 0), swapRB=True, crop=False)
        blob = np.transpose(blob, (0, 3, 1, 2))
        blob = np.expand_dims(blob, axis=0)

        # 모델을 통해 얼굴 감정 분류
        model.setInput(blob)
        emotions = model.forward()

        # 가장 높은 확률의 감정 인덱스 가져오기
        emotion_idx = np.argmax(emotions)

        # 얼굴에 표정 텍스트 표시
        text = ['Angry', 'Disgust', 'Fear', 'Happy', 'Sad', 'Surprise', 'Neutral']
        emotion_text = text[emotion_idx]
        cv2.putText(frame, emotion_text, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2, cv2.LINE_AA)

    # 화면에 프레임 표시
    cv2.imshow('Facial Expression Recognition', frame)

    # 'q' 키를 누르면 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 종료 후 리소스 해제
cap.release()
cv2.destroyAllWindows()

위의 코드는 웹캠에서 비디오를 읽어오고, 얼굴을 감지하여 얼굴 이미지를 추출한 후, 추출된 얼굴 이미지를 모델에 입력으로 전달하여 감정을 분류합니다. 분류된 감정은 웹캠 비디오 프레임 위에 텍스트로 표시됩니다.

마치며

이렇게 OpenCV-Python을 사용하여 얼굴 표정을 인식할 수 있습니다. 실제로는 더 복잡한 모델과 데이터셋을 사용하여 정확한 얼굴 표정 인식을 구현할 수 있습니다. 기존 코드를 기반으로 자신만의 얼굴 표정 인식 시스템을 개발해 보세요!

References: