Python을 사용하여 사진의 얼굴만 자르고 저장하기

사진을 다루는데 가장 중요한 작업 중 하나는 이미지에서 얼굴을 감지하고 자르는 것이다. 이 글에서는 Python을 사용하여 사진에서 얼굴만 자르고 저장하는 방법을 살펴보겠다. 이 작업을 수행하는 데 사용할 수 있는 라이브러리에는 OpenCV, dlib, Pillow 등 널리 사용되는 라이브러리가 많이 있다. 이 글에서는 가장 널리 사용되는 컴퓨터 비전 라이브러리 중 하나인 OpenCV를 사용하겠다.

OpenCV 설치하기

OpenCV를 사용하기 전에 먼저 설치해야 한다. 

pip install opencv-python

 

필요한 라이브러리 가져오기

이제 OpenCV를 설치했으므로 필요한 라이브러리를 가져오고 이미지를 로드할 수 있다.

import cv2
import numpy as np

# 사진에서 얼굴 인식을 위해 cascade classifier 로드
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

# 이미지 로드
img = cv2.imread("example.jpg")

얼굴 감지

이미지를 로드했으므로 이제 이미지에서 얼굴 감지를 시작할 수 있다. 이 작업은 CascadeClassifier 클래스의 detectMultiscale 메서드를 사용하여 수행된다. 이 메서드는 이미지를 받아 사각형 목록을 반환하며, 각 사각형은 얼굴을 나타낸다.

faces = face_cascade.detectMultiscale(img, scaleFactor=1.1, minNeighbors=5)

scaleFactor 매개변수는 감지 window의 크기를 제어하며, scaleFactor 값이 작을수록 감지 window가 커지고, 스케일팩터 값이 클수록 감지 window가 작아진다. 감지 window 크기를 줄이면 더 작은 얼굴을 감지할 수 있지만 얼굴 감지 프로세스가 느려진다.

minNeighbors 매개변수는 값이 높을수록 오탐지를 제거하는 데 도움이 되지만 일부 얼굴이 누락될 위험이 높아지는 반면 값이 낮을수록 얼굴 감지가 더 민감해지지만 오탐지 위험도 높아진다.

최상의 얼굴 인식 결과를 얻으려면 scaleFactor와 최소 minNeighbors의 적절한 균형을 찾는 것이 중요한다. 특정 사용 사례에 가장 적합한 조합을 찾으려면 다양한 값으로 실험해봐야 할 수도 있다.

 

얼굴 자르기 및 저장

얼굴을 감지했으면 사각형 목록을 반복하여 각 얼굴을 자를 수 있다. 이미지를 자르려면 자르기의 시작점과 끝점을 지정하기만 하면 된다. 이 경우 각 사각형의 왼쪽 상단과 오른쪽 하단을 사용한다.

for (x, y, w, h) in faces:
    face = img[y:y+h, x:x+w]
    cv2.imwrite("face.jpg", face)
© Copyright 2023 CLONE CODING