OpenCV를 사용한 객체 추적

Manav Narula 2023년1월30일
  1. OpenCV의 개체 추적을 위한 추적기
  2. Python에서 OpenCV 개체 추적기 사용
  3. 결론
OpenCV를 사용한 객체 추적

개체 추적은 실제 응용 프로그램이 많이 있는 Computer Vision의 중요한 작업 중 하나입니다. 객체 추적에서 우리는 주어진 매개변수를 기반으로 다른 객체를 구별하고 움직임을 추적하려고 합니다.

물체 추적은 물체 감지와 다르다는 점을 기억하십시오. 이는 모든 프레임에서 객체를 감지하는 경향이 없기 때문에 객체 추적이 훨씬 빠르기 때문에 계산 부하가 증가합니다.

물체 추적의 가장 일반적인 실제 응용 프로그램은 도로에서 차량의 움직임을 추적하는 것입니다. 우리는 다른 차량을 식별하고 궤적을 추적하여 도로 규칙을 준수하는지 여부를 관찰할 수 있습니다.

opencv 라이브러리를 사용하여 Python의 객체 추적 문제를 해결할 수 있습니다. 이 튜토리얼에서는 객체 추적을 위해 opencv에서 사용할 수 있는 다양한 추적기에 대해 설명합니다.

OpenCV의 개체 추적을 위한 추적기

첫 번째 추적기는 기계 학습의 AdaBoost 알고리즘을 기반으로 하는 cv2.TrackerBoosting_create입니다. 런타임에 추적할 개체의 양수 및 음수 샘플을 사용하여 학습하고 최근에 좋은 실적이 없고 매우 느린 것으로 간주됩니다.

그런 다음 MIL 알고리즘을 기반으로 하는 cv2.TrackerMIL_create 추적기가 있습니다. BOOSTING 추적기를 개선하기 위해 제작되었으며 긍정적인 샘플 주변의 유사한 개념 및 요소를 기반으로 개체를 구별하여 전반적인 정확도를 향상시킵니다.

cv2.TrackerKCF_create 추적기는 MIL에서 여러 양성 일치 항목의 중첩 영역에 대한 수학적 접근 방식을 기반으로 합니다. KCF의 전체 형태는 Kernelized Correlation Filters이며 괜찮은 추적기로 간주되며 단일 개체를 추적하는 데 매우 잘 작동합니다.

cv2.TrackerCSRT_create 추적기는 채널 및 공간 신뢰성이 있는 Discriminative Correlation Filter를 기반으로 합니다. 필요한 개체를 선택하는 데 도움이 되는 공간 신뢰도 맵을 사용하여 프레임의 일부를 걸러내고 낮은 프레임 속도의 경우 높은 정확도를 제공합니다.

cv2.TrackerMedianFlow_create 추적기는 추적 실패를 최소화하고 가장 안정적인 경로를 선택하는 것을 목표로 하는 고급 추적기입니다. 실시간으로 물체를 감지하여 전후진 운동에 대한 변위를 계산하고 오차와 두 값의 차이 측정값을 비교하여 주어진 물체의 궤적을 추적합니다.

cv2.TrackerTLD_create 추적기도 있습니다. TLD는 추적, 학습 및 감지의 약자이며 프레임 단위로 개체의 궤적을 따릅니다. 이전 프레임의 위치를 ​​사용하여 추적을 수정하고 개선합니다.

감지기 부분은 이전 프레임을 사용하여 필요한 경우 추적기를 수정하는 데 사용됩니다. 객체 겹침을 매우 효율적으로 처리합니다.

cv2.TrackerMOSSE_create 추적기(여기서 MOSSE는 제곱 오차의 최소 출력 합계를 나타냄)는 푸리에 공간에서 적응형 상관 관계를 사용하여 개체를 추적합니다. 이러한 상관 값을 사용하고 실제 상관 관계와 예측 상관 관계 사이의 오차 제곱합을 최소화하려고 합니다.

이 추적기는 추적 속도가 매우 빠르며 빛과 물체 주변의 변화에 ​​잘 적응합니다.

Python에서 OpenCV 개체 추적기 사용

이 예제에서 cv2.TrackerKCF_create 추적기를 사용하여 개체를 추적합니다. capture() 함수를 사용하여 샘플 비디오를 읽는 것으로 시작하겠습니다.

그런 다음 객체를 추적하는 변수를 초기화합니다. 처음에는 없음으로 지정되고 이 비디오를 프레임별로 읽는 루프를 실행합니다.

처음에는 이전 프레임에서 추적이 수행되었는지 확인하고 초기화된 변수가 none이 아니면 추적을 계속합니다. 그렇지 않은 경우 selectROI 기능을 사용하여 추적하려는 개체를 선택합니다.

그런 다음 정의된 추적기 개체를 사용하여 모든 프레임에서 이 개체를 추적하고 추적 정보를 표시합니다.

코드 예:

import cv2
import imutils

vid = cv2.VideoCapture("sample1.mp4")
initial_box = None
tracker = cv2.TrackerKCF_create()
while True:
    fr = vid.read()
    if fr is None:
        break
    if initial_box is not None:
        (success, box) = tracker.update(fr)
        if success:
            (x, y, w, h) = [int(v) for v in box]
            cv2.rectangle(fr, (x, y), (x + w, y + h), (0, 255, 0), 2)
        fps.update()
        fps.stop()
        information = [
            ("Success", "Yes" if success else "No"),
            ("FPS", "{:.3f}".format(fps.fps())),
        ]
        for (i, (k, v)) in enumerate(information):
            text = "{}: {}".format(k, v)
            cv2.putText(
                fr,
                text,
                (10, H - ((i * 20) + 20)),
                cv2.FONT_HERSHEY_SIMPLEX,
                0.6,
                (0, 0, 255),
                2,
            )
        cv2.imshow("Output Frame", fr)
        key = cv2.waitKey(1) & 0xFF
    initial_box = cv2.selectROI("fr", fr, fromCenter=False, showCrosshair=True)
    tracker.init(fr, initial_box)
    fps = FPS().start()

cv2.destroyAllWindows()

결론

opencv 라이브러리에서 사용 가능한 객체 추적에 사용되는 다양한 알고리즘에 대해 논의했습니다. 먼저 객체 추적과 실생활에서의 사용에 대해 논의했습니다.

그런 다음 opencv 라이브러리에서 사용할 수 있는 8개의 추적기와 이러한 추적기를 사용하여 개체 추적을 처리하는 방법에 대한 샘플 코드에 대해 자세히 논의했습니다.

작가: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

관련 문장 - Python OpenCV