파이썬으로 OpenCV를 이용하여 동영상에서 사람 저장하기

이번 포스트에서는 OpenCV와 Python을 사용하여 동영상에서 사람을 감지하고 저장하는 방법에 대해 알아보겠습니다.

OpenCV 설치하기

먼저, OpenCV를 설치해야 합니다. 다음 명령어를 사용하여 OpenCV를 설치할 수 있습니다.

pip install opencv-python

동영상에서 사람 감지하기

다음으로, 동영상에서 사람을 감지하는 코드를 작성해보겠습니다. 아래 코드를 사용하여 동영상 파일을 열고 사람을 감지할 수 있습니다.

import cv2

# 동영상 파일 열기
video = cv2.VideoCapture('동영상 파일 경로')

# 사람 감지 모델 불러오기
cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_fullbody.xml')

while True:
    # 한 프레임씩 읽기
    ret, frame = video.read()

    # 사람 감지하기
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    bodies = cascade.detectMultiScale(gray, 1.1, 4)

    # 감지된 사람에 사각형 그리기
    for (x, y, w, h) in bodies:
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

    # 화면에 출력하기
    cv2.imshow('Video', frame)

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

# 종료하기
video.release()
cv2.destroyAllWindows()

사람 저장하기

감지된 사람을 저장하기 위해 각각의 프레임을 이미지로 저장하는 코드를 추가해보겠습니다.

import cv2
import os

video = cv2.VideoCapture('동영상 파일 경로')
cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_fullbody.xml')

# 저장할 디렉토리 생성
if not os.path.exists('images'):
    os.makedirs('images')

frame_count = 0

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

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    bodies = cascade.detectMultiScale(gray, 1.1, 4)

    for (x, y, w, h) in bodies:
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
        cropped_image = frame[y:y + h, x:x + w]
        cv2.imwrite(f'images/frame_{frame_count}.jpg', cropped_image)
        frame_count += 1

    cv2.imshow('Video', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

video.release()
cv2.destroyAllWindows()

위 코드에서는 images라는 이름의 새로운 디렉토리를 생성하고, 각 프레임을 저장할 때마다 이미지로 저장합니다. 저장되는 이미지는 frame_프레임 번호.jpg 형식으로 저장됩니다.

이제 동영상에서 사람을 감지하고 저장하는 코드를 사용할 수 있습니다.

결론

위에서 작성한 코드를 사용하여 OpenCV를 이용하여 동영상에서 사람을 감지하고 저장하는 방법을 알아보았습니다. 이를 통해 동영상 처리 및 객체 감지에 관심이 있는 개발자들은 유용한 정보를 얻을 수 있을 것입니다.

참고 자료: