파이썬으로 OpenCV를 이용하여 동영상에서 손의 움직임 추적하기

이번 포스트에서는 파이썬과 OpenCV를 이용하여 동영상에서 손의 움직임을 추적하는 방법에 대해 알아보겠습니다.

1. OpenCV 설치하기

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

pip install opencv-python

2. 동영상 파일 로드하기

손의 움직임을 추적할 동영상 파일을 먼저 로드해야 합니다. 아래의 코드를 사용하여 동영상 파일을 로드할 수 있습니다.

import cv2

# 동영상 파일 로드
video = cv2.VideoCapture('동영상파일.mp4')

3. 손의 움직임 추적하기

손의 움직임을 추적하기 위해 다음과 같은 단계를 따릅니다.

3.1. 프레임 읽기

먼저, 동영상의 각 프레임을 읽어옵니다. 아래의 코드를 사용하여 프레임을 읽을 수 있습니다.

ret, frame = video.read()

3.2. 이미지 전처리

다음으로, 읽어온 프레임을 전처리합니다. 이미지를 그레이스케일로 변환하고, 필터링을 적용하여 손의 경계를 더 잘 검출할 수 있도록 합니다. 아래의 코드를 사용하여 전처리할 수 있습니다.

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5, 5), 0)

3.3. 경계 검출

전처리된 이미지에서 경계를 검출합니다. 아래의 코드를 사용하여 경계를 검출할 수 있습니다.

edges = cv2.Canny(blur, 50, 150)

3.4. 손의 경계 추출

경계 검출된 이미지에서 손의 경계를 추출합니다. 아래의 코드를 사용하여 손의 경계를 추출할 수 있습니다.

contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

3.5. 손의 움직임 추적

손의 경계를 기반으로 움직임을 추적합니다. 아래의 코드를 사용하여 손의 움직임을 추적할 수 있습니다.

if len(contours) > 0:
    # 손의 경계 중 가장 큰 경계 선택
    hand_contour = max(contours, key=cv2.contourArea)
    
    # 추적할 손의 중심 좌표 계산
    M = cv2.moments(hand_contour)
    if M["m00"] > 0:
        center_x = int(M["m10"] / M["m00"])
        center_y = int(M["m01"] / M["m00"])

위의 코드는 단순히 손의 경계 중 가장 큰 경계를 선택하고, 그 중심 좌표를 계산하는 예시입니다. 원하는 추적 방식에 따라 코드를 수정하십시오.

4. 결과 출력하기

손의 움직임을 추적한 결과를 출력하기 위해 동영상 파일을 화면에 보여줍니다. 아래의 코드를 사용하여 결과를 출력할 수 있습니다.

# 동영상 파일 재생을 위한 반복문
while True:
    ret, frame = video.read()
    
    if not ret:
        break
    
    # 결과 출력
    cv2.circle(frame, (center_x, center_y), 10, (0, 255, 0), -1)
    cv2.imshow('Tracking', frame)
    
    # 'q' 키를 누르면 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 사용한 자원 해제
video.release()
cv2.destroyAllWindows()

위의 코드는 동영상 파일을 읽어오고, 각 프레임에 추적 결과를 표시하여 화면에 보여주는 예시입니다. 원하는 방식에 따라 코드를 수정하십시오.

5. 실행하기

위의 코드를 전체적으로 합쳐서 실행하면 동영상에서 손의 움직임을 추적할 수 있습니다.

참고 자료

#파이썬 #OpenCV