파이썬과 OpenCV를 사용하여 동영상에서 얼굴 속도 측정하기

이 포스트에서는 파이썬과 OpenCV를 사용하여 동영상에서 얼굴 속도를 측정하는 방법을 알아보겠습니다. 얼굴 속도 측정은 컴퓨터 비전 분야에서 많은 응용이 가능하며, 이를 통해 보안, 감시, 게임 등 다양한 분야에서 활용할 수 있습니다.

필요한 패키지 설치

먼저, 해당 프로젝트를 위해 필요한 패키지를 설치해야 합니다. 파이썬 환경에서 다음 명령어를 사용하여 필요한 패키지를 설치합니다.

python -m pip install opencv-python
python -m pip install opencv-contrib-python

얼굴 감지하기

동영상에서 얼굴 속도를 측정하기 위해서는 먼저 얼굴을 정확하게 감지하는 기능이 필요합니다. 이를 위해 OpenCV의 얼굴 감지 기능을 사용합니다. OpenCV에는 Haar Cascade 분류기를 사용하여 얼굴을 감지할 수 있는 기능이 포함되어 있습니다.

import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

def detect_faces(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    
    return faces

위 코드는 haarcascade_frontalface_default.xml 파일을 사용하여 얼굴을 감지하는 detect_faces 함수를 정의한 예입니다.

얼굴 속도 측정하기

얼굴을 감지하는 기능이 준비되었으므로 이제 얼굴 속도를 측정하는 기능을 추가해보겠습니다. 동영상에서 각 프레임마다 얼굴을 감지하고, 얼굴이 이동한 거리를 측정하여 속도를 계산합니다.

import math

def calculate_speed(previous_faces, current_faces, frame_rate):
    total_distance = 0
    
    for prev_face, curr_face in zip(previous_faces, current_faces):
        prev_x, prev_y, prev_w, prev_h = prev_face
        curr_x, curr_y, curr_w, curr_h = curr_face
        
        prev_center_x = prev_x + prev_w // 2
        prev_center_y = prev_y + prev_h // 2
        curr_center_x = curr_x + curr_w // 2
        curr_center_y = curr_y + curr_h // 2
        
        distance = math.sqrt((curr_center_x - prev_center_x)**2 + (curr_center_y - prev_center_y)**2)
        total_distance += distance
    
    speed = total_distance / len(current_faces) * frame_rate
    
    return speed

위 코드는 previous_facescurrent_faces라는 두 개의 얼굴 감지 결과를 비교하여 얼굴의 이동 거리를 측정하고, 프레임 속도 frame_rate로 나누어 얼굴 속도를 계산하는 calculate_speed 함수 예시입니다.

동영상에서 얼굴 속도 측정하기

이제 이전에 작성한 함수를 사용하여 동영상에서 얼굴 속도를 측정하는 코드를 작성해보겠습니다.

import cv2

capture = cv2.VideoCapture('video.mp4')
frame_rate = capture.get(cv2.CAP_PROP_FPS)

previous_faces = []

while True:
    ret, frame = capture.read()
    if not ret:
        break
        
    faces = detect_faces(frame)
    
    if previous_faces:
        speed = calculate_speed(previous_faces, faces, frame_rate)
        print("Face speed:", speed) # 얼굴 속도 출력
    
    previous_faces = faces

capture.release()

위 코드는 video.mp4 파일로부터 동영상을 읽고, 각 프레임에 대해 얼굴을 감지하여 이전 얼굴과 비교하여 속도를 계산하고 출력하는 예시입니다.

결론

이렇게 파이썬과 OpenCV를 사용하여 동영상에서 얼굴 속도를 측정하는 방법을 알아보았습니다. 이를 활용하여 보안이나 감시 시스템에서 이동하는 얼굴을 감지하고 속도를 측정하는 등의 다양한 응용이 가능합니다. OpenCV의 다양한 기능을 활용하여 여러분만의 신기한 프로젝트를 만들어보세요!

참고 자료