파이썬과 OpenCV를 사용한 동영상에서 인체 포즈 추정하기

이번 포스트에서는 파이썬과 OpenCV를 사용하여 동영상에서 인체 포즈를 추정하는 방법에 대해 알아보겠습니다.

1. OpenCV 설치하기

동영상에서 인체 포즈를 추정하기 위해서는 우선 OpenCV를 설치해야 합니다. 아래의 명령어를 사용하여 OpenCV를 설치할 수 있습니다.

pip install opencv-python

2. 동영상 불러오기

동영상을 불러오기 위해서는 cv2.VideoCapture() 함수를 사용합니다. 아래의 예제 코드를 참고해보세요.

import cv2

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

# 프레임 수 확인
fps = cap.get(cv2.CAP_PROP_FPS)
print("FPS:", fps)

while True:
    # 프레임 읽어오기
    ret, frame = cap.read()
    
    # 동영상 끝까지 재생하면 종료
    if not ret:
        break
        
    # 프레임 처리
    # ...
    
    # 결과 출력
    cv2.imshow('Frame', frame)
    
    # 키 입력 대기
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 자원 해제
cap.release()
cv2.destroyAllWindows()

3. 인체 포즈 추정하기

인체 포즈를 추정하기 위해서는 동영상의 각 프레임에서 인체를 검출하는 작업이 필요합니다. OpenCV에서는 cv2.dnn 모듈을 사용하여 딥러닝 기반의 객체 검출을 수행할 수 있습니다. 아래의 예제 코드를 참고해보세요.

import cv2

# 모델 경로 설정
model_path = 'pose_iter_440000.caffemodel'
config_path = 'pose_deploy_linevec.prototxt'

# 네트워크 불러오기
net = cv2.dnn.readNetFromCaffe(config_path, model_path)

while True:
    # 프레임 읽어오기
    ret, frame = cap.read()
    
    # 동영상 끝까지 재생하면 종료
    if not ret:
        break
        
    # 이미지 크기 설정
    aspect_ratio = frame.shape[1] / frame.shape[0]
    in_height = 368
    in_width = int(((aspect_ratio * in_height) * 8) // 8)
    
    # 이미지 전처리
    blob = cv2.dnn.blobFromImage(frame, 1.0, (in_width, in_height),
                                 (127.5, 127.5, 127.5), swapRB=True, crop=False)
    
    # 네트워크에 입력
    net.setInput(blob)
    
    # 예측 수행
    output = net.forward()

    # 결과 처리
    # ...
    
    # 결과 출력
    cv2.imshow('Frame', frame)
    
    # 키 입력 대기
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 자원 해제
cap.release()
cv2.destroyAllWindows()

4. 추가적인 작업

인체 포즈 추정을 위해서는 예측 결과를 좌표로 변환하고, 적절한 시각화를 수행해야 합니다. 이 과정은 예제 코드에 주석 처리되어 있으므로, 필요에 따라 추가 작업을 수행해보세요.

마무리

이번 포스트에서는 파이썬과 OpenCV를 사용하여 동영상에서 인체 포즈를 추정하는 방법에 대해 알아보았습니다. OpenCV의 다양한 기능을 활용해서 더 다양한 작업을 수행할 수 있으니 참고해보세요.

#python #opencv