객체 추적은 컴퓨터 비전 분야에서 매우 중요한 기술 중 하나입니다. 이번 글에서는 Python과 OpenCV를 사용하여 실시간 객체 추적을 구현하는 방법을 소개하겠습니다. 이번 포스트는 초보자분들도 쉽게 따라하실 수 있도록 구성하였으니 천천히 따라해 보세요~

준비 작업

Python과 OpenCV 설치하기

우선 Python과 OpenCV 라이브러리를 설치해야 합니다. 다음 명령어를 사용하여 필요한 패키지를 설치할 수 있습니다:

pip install numpy opencv-python

객체 추적을 위한 동영상 스트림 설정

객체 추적을 위해 웹캠을 사용하여 실시간 동영상 스트림을 설정합니다:

import cv2

cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("Error: Could not open video stream.")
    exit()

객체 추적기 초기화

OpenCV에서는 다양한 객체 추적 알고리즘을 제공합니다. 여기서는 CSRT 추적기를 사용하겠습니다:

tracker = cv2.TrackerCSRT_create()

객체 선택 및 추적 시작

사용자가 추적할 객체를 선택하고 추적을 시작합니다:

ret, frame = cap.read()
bbox = cv2.selectROI("Tracking", frame, False)
tracker.init(frame, bbox)

실시간 객체 추적

실시간으로 동영상을 읽어와서 객체를 추적합니다:

while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    success, bbox = tracker.update(frame)
    
    if success:
        (x, y, w, h) = [int(v) for v in bbox]
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
        cv2.putText(frame, "Tracking", (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
    else:
        cv2.putText(frame, "Lost", (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
    
    cv2.imshow("Tracking", frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

전체 코드 예제

아래는 위의 모든 단계를 포함한 전체 코드 예제입니다:

import cv2

# 웹캠 동영상 스트림 설정
cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("Error: Could not open video stream.")
    exit()

# 객체 추적기 초기화
tracker = cv2.TrackerCSRT_create()

# 첫 프레임 읽기
ret, frame = cap.read()
bbox = cv2.selectROI("Tracking", frame, False)
tracker.init(frame, bbox)

# 실시간 객체 추적
while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    success, bbox = tracker.update(frame)
    
    if success:
        (x, y, w, h) = [int(v) for v in bbox]
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
        cv2.putText(frame, "Tracking", (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
    else:
        cv2.putText(frame, "Lost", (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
    
    cv2.imshow("Tracking", frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

이 코드는 간단한 실시간 객체 추적의 기본적인 구조를 제공합니다. 실제 기능의 성능을 높이기 위해서는 다양한 데이터 전처리 기법과 모델을 적용할 수 있습니다.

마무리

이번 글에서는 Python과 OpenCV를 사용하여 간단한 실시간 객체 추적을 구현하는 방법을 소개했습니다. 객체 추적은 다양한 애플리케이션에서 유용하게 사용될 수 있습니다. 다음 포스트에서는 강화학습으로 게임 캐릭터의 행동 패턴을 만들어 보도록 하겠습니다.