Ultralytics YOLO26을 사용한 TrackZone#
TrackZone이란 무엇인가요?#
TrackZone은 프레임 전체가 아닌 지정된 프레임 영역 내의 객체를 모니터링하는 데 특화되어 있습니다. Ultralytics YOLO26을 기반으로 하며, 비디오와 실시간 카메라 피드에서 영역 내 객체 감지와 추적을 통합합니다. YOLO26의 고급 알고리즘과 딥러닝 기술은 실시간 사용 사례에 적합하며, 군중 모니터링 및 감시와 같은 애플리케이션에서 정밀하고 효율적인 객체 추적을 제공합니다.
시청: Ultralytics YOLO26으로 영역 내 객체를 추적하는 방법 | TrackZone 🚀
영역 내 객체 추적(TrackZone)의 장점#
- 집중 분석: 특정 영역 내에서 객체를 추적하면 출입구나 제한 구역과 같은 관심 영역을 정밀하게 모니터링하고 분석할 수 있어 더욱 집중적인 인사이트를 얻을 수 있습니다.
- 후속 작업 부담 감소: TrackZone은 영역 밖의 객체를 무시하여 관련 없는 감지 결과를 제외하므로, 그 위에 구축하는 로직에서 카운트하거나 기록하거나 알림을 보낼 객체 수가 줄어듭니다. 감지는 영역을 촘촘하게 자른 이미지가 아니라 마스크를 적용한 전체 크기 프레임에서 계속 실행되므로, 이점은 모델 추론 속도 향상이 아니라 더 깔끔하고 집중된 결과를 얻는 것입니다.
- 보안 강화: 영역별 추적은 중요 구역을 모니터링하여 감시 기능을 개선하고 비정상적인 활동이나 보안 침해를 조기에 감지하는 데 도움이 됩니다.
- 확장 가능한 솔루션: 특정 영역에 집중할 수 있는 TrackZone은 소매 공간부터 산업 현장까지 다양한 시나리오에 적용할 수 있어 원활한 통합과 확장성을 보장합니다.
실제 적용 사례#
| 농업 | 교통 |
|---|---|
![]() | ![]() |
| Ultralytics YOLO26을 사용한 밭의 식물 추적 | Ultralytics YOLO26을 사용한 도로 위 차량 추적 |
# Run a trackzone example
yolo solutions trackzone show=True
# Pass a source video
yolo solutions trackzone source="path/to/video.mp4" show=True
# Pass region coordinates
yolo solutions trackzone show=True region="[(150, 150), (1130, 150), (1130, 570), (150, 570)]"TrackZone은 모니터링할 프레임 영역을 지정하기 위해 region 목록을 사용합니다. 관심 있는 물리적 영역(문, 게이트 등)에 맞게 다각형을 정의하고, 오버레이가 비디오 피드와 일치하는지 확인할 수 있도록 설정 중에 show=True을 활성화된 상태로 유지하세요.
region의 각 항목은 비디오 프레임에서(x, y)픽셀 좌표입니다. 모니터링하려는 영역의 둘레를 따라 연결할 순서대로 포인트를 나열하세요.- 좌표는 프레임 해상도에 따라 달라지므로 1280×720 피드에 맞춘 영역은 640×480 피드에 맞지 않습니다. 오버레이가 피드와 일치하는지 확인할 수 있도록 설정 중에는
show=True을 유지하세요. TrackZone은 포인트를 볼록 껍질로 줄이므로, 오목한 모양은 모든 포인트를 포함하는 가장 작은 볼록 다각형으로 단순화됩니다. 볼록하지 않은 모양이나 여러 개의 분리된 영역에는 대신 RegionCounter 솔루션을 사용하세요.region을 생략하면 기본 영역인[(75, 75), (565, 75), (565, 285), (75, 285)]이 사용됩니다.
TrackZone 인수#
다음은 TrackZone 인수 표입니다:
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 모델 파일의 경로입니다. |
region | list 또는 dict | None | 관심 영역을 정의하는 점입니다. (x, y) 튜플 목록 또는 여러 영역에 대해 영역 이름을 점 목록에 매핑하는 사전(RegionCounter만 해당)으로 지정할 수 있습니다. None이면 영역이 필요한 Solutions는 사전 정의된 기본값을 사용합니다. |
line_width | int | 2 | Solution에서 그리는 상자, 키포인트 및 개수 표시의 선 두께입니다. |
verbose | bool | True | 프레임별 입력 형태, 클래스 개수 및 처리 속도 로그를 활성화합니다. 추적 호출 자체는 항상 로그를 출력하지 않습니다. |
TrackZone 솔루션은 track 매개변수를 지원합니다:
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
tracker | str | 'tracktrack.yaml' | 사용할 추적 알고리즘을 지정합니다. 기본 제공 옵션: botsort.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml. |
conf | float | 0.25 | 탐지에 대한 신뢰도 임계값을 설정합니다. 값을 낮추면 추적할 수 있는 객체가 늘어나지만 오탐이 포함될 수 있습니다. |
iou | float | 0.7 | 중복 탐지를 필터링하기 위한 교집합 대비 합집합 (IoU) 임계값을 설정합니다. |
classes | list | None | 클래스 인덱스로 결과를 필터링합니다. 예를 들어 classes=[0, 2, 3]은 지정된 클래스만 추적합니다. |
device | str | None | 추론에 사용할 장치를 지정합니다(예: cpu, cuda:0 또는 0). 사용자는 모델 실행에 사용할 CPU, 특정 GPU 또는 기타 연산 장치를 선택할 수 있습니다. |
imgsz | int or tuple | 640 | 추론 대상 이미지 크기입니다. 정사각형을 나타내는 정수 또는 (height, width) 쌍을 지정합니다. 모델 stride에 맞춰 형태가 조정됩니다. |
max_det | int | 300 | 추적 전에 프레임별로 유지할 최대 탐지 수를 지정하여 밀집된 장면에서 솔루션이 처리하는 객체 수를 제한합니다. |
quantize | int or str | None | 추론 정밀도: CPU 이외의 환경에서 PyTorch 및 TorchScript 모델은 16(FP16) 또는 32/unset(FP32)을 사용하며, 다른 형식은 아티팩트와 런타임이 선택하는 정밀도를 사용합니다. 더 이상 사용되지 않는 half 인수를 대체합니다. |
또한 다음 시각화 옵션을 사용할 수 있습니다:
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
show | bool | False | True이면 주석이 추가된 이미지나 비디오를 창에 표시합니다. 개발 또는 테스트 중 즉각적인 시각적 피드백을 얻는 데 유용합니다. |
show_conf | bool | True | 각 감지 결과의 레이블 옆에 신뢰도 점수를 표시합니다. 각 감지 결과에 대한 모델의 확신도를 파악할 수 있습니다. |
show_labels | bool | True | 시각화 출력에 각 감지 결과의 레이블을 표시합니다. 감지된 객체를 즉시 파악할 수 있습니다. |
영역 내 객체 수 세기#
추적기를 호출할 때마다 SolutionResults 객체가 반환되며, 이 객체의 total_tracks 속성에는 현재 영역 내에서 추적 중인 객체 수가 저장됩니다. 각 프레임에서 이 값을 읽어 실시간 점유 상태를 모니터링할 수 있습니다. 예를 들어 출입구나 제한 구역의 혼잡도를 기록할 수 있습니다:
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
region_points = [(150, 150), (1130, 150), (1130, 570), (150, 570)]
trackzone = solutions.TrackZone(show=False, region=region_points, model="yolo26n.pt")
while cap.isOpened():
success, im0 = cap.read()
if not success:
break
results = trackzone(im0)
print(f"Objects currently in zone: {results.total_tracks}") # live zone occupancy
cap.release()자주 묻는 질문#
Ultralytics YOLO26을 사용하면 비디오 프레임에서 정의된 영역이나 구역의 객체를 간단하게 추적할 수 있습니다. 아래에 제공된 명령을 사용해 추적을 시작하면 됩니다. 이 방법은 효율적인 분석과 정확한 결과를 보장하므로 감시, 군중 관리 또는 영역별 추적이 필요한 모든 시나리오에 적합합니다.
yolo solutions trackzone source="path/to/video.mp4" show=True몇 줄의 코드만으로 특정 영역의 객체 추적을 설정할 수 있어 프로젝트에 쉽게 통합할 수 있습니다.
import cv2 from ultralytics import solutions cap = cv2.VideoCapture("path/to/video.mp4") assert cap.isOpened(), "Error reading video file" w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS)) video_writer = cv2.VideoWriter("trackzone_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h)) trackzone = solutions.TrackZone( show=True, region=[(150, 150), (1130, 150), (1130, 570), (150, 570)], model="yolo26n.pt" ) while cap.isOpened(): success, im0 = cap.read() if not success: break results = trackzone(im0) video_writer.write(results.plot_im) cap.release() video_writer.release() cv2.destroyAllWindows()Ultralytics TrackZone을 사용한 비디오 처리의 영역 포인트는 간단하게 구성하고 사용자 지정할 수 있습니다. Python 스크립트에서 영역을 직접 정의하고 조정하여 모니터링하려는 영역을 정밀하게 제어할 수 있습니다.
from ultralytics import solutions # 영역 포인트 정의 region_points = [(150, 150), (1130, 150), (1130, 570), (150, 570)] # trackzone 초기화 trackzone = solutions.TrackZone( show=True, # 출력을 표시합니다. region=region_points, # 영역 포인트를 전달합니다. )TrackZone은 포인트를 볼록 껍질로 줄이므로, 오목한 윤곽은 모든 포인트를 포함하는 가장 작은 볼록 다각형으로 단순화됩니다.세 솔루션 모두 영역을 다루지만, 각각 답하는 질문은 다릅니다:
솔루션 사용 목적 일반적인 출력 TrackZone 하나의 볼록 영역 내에서 객체를 추적하고 실시간 점유 상태를 모니터링합니다 추적된 ID와 해당 영역의 total_tracksObjectCounter 선을 통과하거나 영역에 들어오고 나가는 객체의 수를 셉니다 누적 유입 및 유출 수 RegionCounter 하나 이상의 임의 영역(볼록하지 않은 영역 포함) 내 객체 수를 셉니다 영역별 객체 수 한 영역 내에서 지속적인 추적이 필요하면 TrackZone을 선택하고, 여러 영역이나 볼록하지 않은 모양이 필요하면 RegionCounter를 선택하세요.

