이번 포스트에서는 파이썬과 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 공식 문서: https://opencv.org/
- OpenCV GitHub 저장소: https://github.com/opencv/opencv
- 파이썬 공식 문서: https://www.python.org/
- 파이썬 OpenCV 패키지: https://pypi.org/project/opencv-python/
#파이썬 #OpenCV