[파이썬] Pillow 얼굴 탐지 및 인식하기

이번 포스트에서는 파이썬의 Pillow 라이브러리를 사용하여 이미지에서 얼굴을 탐지하고 인식하는 방법에 대해 알아보겠습니다. Pillow는 이미지 처리와 조작을 위한 많은 기능을 제공하는 라이브러리로, 여기서는 얼굴 탐지와 인식을 위해 OpenCV 라이브러리를 활용한 cv2 모듈과 함께 사용하겠습니다.

Pillow 설치하기

우선 Pillow를 설치해야 합니다. 다음 명령어를 사용하여 설치할 수 있습니다:

pip install Pillow

또한 OpenCV를 사용하기 위해 다음 명령어로 cv2 모듈도 설치합니다:

pip install opencv-python

얼굴 탐지하기

이제 얼굴 탐지를 위한 코드를 작성해보겠습니다. 다음은 얼굴 탐지 및 인식을 위한 코드입니다:

from PIL import Image
import cv2

def detect_faces(image_path):
    # 이미지 열기
    image = Image.open(image_path)

    # OpenCV를 이용한 얼굴 탐지
    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
    gray_image = cv2.cvtColor(cv2.imread(image_path), cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

    # 얼굴이 탐지된 경우 박스 그리기
    for (x, y, w, h) in faces:
        image = cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)

    # 얼굴이 탐지된 이미지 저장
    image.save("face_detected.jpg")

    # 탐지된 얼굴의 개수 반환
    return len(faces)

# 이미지 파일 경로 설정
image_path = "image.jpg"

# 얼굴 탐지 함수 호출
num_faces = detect_faces(image_path)
print("Detected", num_faces, "faces")

위 코드는 detect_faces 함수를 통해 이미지에서 얼굴을 탐지하고, 각 얼굴 주변에 박스를 그린 후 탐지된 얼굴의 개수를 반환합니다. 저장된 이미지 파일에는 얼굴이 탐지된 부분에 박스가 그려진 결과가 저장됩니다.

Pillow를 이용한 얼굴 인식하기

얼굴 탐지가 완료되면, 이제 각 얼굴에 대한 얼굴 인식을 진행할 수 있습니다. 다음은 얼굴 인식을 위한 코드입니다:

import face_recognition

def recognize_faces(image_path):
    # 이미지 로드
    image = face_recognition.load_image_file(image_path)

    # 얼굴 인식
    face_locations = face_recognition.face_locations(image)
    face_encodings = face_recognition.face_encodings(image, face_locations)

    # 인식된 얼굴 수 반환
    return len(face_encodings)

# 이미지 파일 경로 설정
image_path = "face_detected.jpg"

# 얼굴 인식 함수 호출
num_faces = recognize_faces(image_path)
print("Recognized", num_faces, "faces")

위 코드는 recognize_faces 함수를 통해 이미지에서 얼굴을 인식하고, 탐지된 얼굴의 개수를 반환합니다. face_recognition 모듈을 사용하였으며, 탐지된 얼굴의 위치와 그에 대한 얼굴 인코딩 정보를 얻을 수 있습니다.

이제 위 코드를 실행해보세요. 입력 이미지에서 얼굴이 탐지되고 인식된 결과를 확인할 수 있을 것입니다.

마무리

이번 포스트에서는 Pillow을 사용하여 이미지에서 얼굴을 탐지하고 인식하는 방법에 대해 알아보았습니다. Pillow 라이브러리는 이미지 처리와 조작에 다양한 기능을 제공하므로, 다양한 애플리케이션 및 프로젝트에서 유용하게 활용될 수 있습니다.

참고로, 얼굴 인식을 위한 face_recognition 모듈은 dlib 라이브러리의 기능을 사용하기 때문에 추가적인 설치가 필요할 수 있습니다. 자세한 내용은 해당 모듈의 공식 문서를 참고하세요.

Happy coding!