Ultralytics YOLO26를 이용한 객체 추적 히트맵#
Ultralytics YOLO26의 Heatmap solution은 비디오 프레임 전체에서 객체를 추적하고 누적된 움직임 강도를 각 프레임 위에 오버레이하므로, 활발한 영역은 따뜻한 색상으로 빛나고 한적한 영역은 차갑게 유지됩니다. YOLO26 object tracking을 기반으로 구축되어 단 하나의 Python 호출 또는 CLI 명령으로 모든 비디오를 트래픽 흐름, 군중 움직임, 체류 구역을 드러내는 공간 활동 맵으로 변환합니다.
Watch: Heatmaps using Ultralytics YOLO26
비디오 분석에 히트맵을 사용하는 이유는 무엇입니까?#
- 활동 패턴을 한눈에 파악: 추적된 객체가 머무는 곳마다 강도가 축적되므로, 수동으로 프레임별 검토를 하지 않아도 교통량이 많은 차선, 인기 있는 선반 또는 군중 병목 현상을 쉽게 식별할 수 있습니다.
- 추적 기능 내장: 이 솔루션은 YOLO26 탐지 및 추적을 내부적으로 실행하므로 별도의 추적 파이프라인을 연결할 필요가 없습니다.
- 동일 패스에서의 카운팅:
region을 전달하여 히트맵이 빌드되는 동안 구역에 진입하고 나가는 객체를 카운트함으로써 두 가지 분석 작업을 한 번의 실행으로 결합합니다.
실제 세계에서의 활용 사례#
| 교통 | 소매 |
|---|---|
![]() | ![]() |
| Ultralytics YOLO 교통 히트맵 | Ultralytics YOLO 소매점 히트맵 |
Ultralytics YOLO로 히트맵을 생성하는 방법#
CLI 또는 Python을 사용하여 비디오 소스에서 히트맵 솔루션을 실행하십시오. 다음은 Python 예제이며 처리된 프레임을 출력 비디오 파일로 저장합니다:
# Run a heatmap example
yolo solutions heatmap show=True
# Pass a source video
yolo solutions heatmap source="path/to/video.mp4"
# Pass a custom colormap
yolo solutions heatmap colormap=cv2.COLORMAP_INFERNO
# Heatmaps + object counting
yolo solutions heatmap region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"Heatmap() 인수#
다음은 Heatmap 인수가 포함된 표입니다:
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 모델 파일 경로입니다. |
colormap | int | cv2.COLORMAP_DEEPGREEN | 히트맵에 사용할 컬러맵입니다. |
show_in | bool | True | 비디오 스트림에 유입(in) 카운트를 표시할지 여부를 제어하는 플래그입니다. |
show_out | bool | True | 비디오 스트림에 유출(out) 카운트를 표시할지 여부를 제어하는 플래그입니다. |
region | list 또는 dict | None | 관심 영역을 정의하는 포인트((x, y) 튜플 목록 또는 여러 영역에 대해 영역 이름을 포인트 목록에 매핑하는 사전(RegionCounter 전용)). None일 때, 영역이 필요한 솔루션은 미리 정의된 기본값으로 대체됩니다. |
Heatmap 솔루션에서 다양한 track 인수를 적용할 수도 있습니다.
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
tracker | str | 'tracktrack.yaml' | 사용할 추적 알고리즘을 지정합니다. 기본 제공 옵션: botsort.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml. |
conf | float | 0.1 | 탐지에 대한 신뢰도 임계값을 설정합니다. 값이 낮을수록 더 많은 객체가 추적되지만 잘못된 긍정 탐지(false positives)가 포함될 수 있습니다. |
iou | float | 0.7 | 겹치는 감지를 필터링하기 위한 Intersection over Union (IoU) 임계값을 설정합니다. |
classes | list | None | 클래스 인덱스로 결과를 필터링합니다. 예를 들어 classes=[0, 2, 3]은 지정된 클래스만 추적합니다. |
verbose | bool | True | 추적 결과 표시를 제어하여 추적된 객체의 시각적 출력을 제공합니다. |
device | str | None | 추론용 장치를 지정합니다(예: cpu, cuda:0 또는 0). 사용자가 모델 실행을 위해 CPU, 특정 GPU 또는 기타 컴퓨팅 장치 중에서 선택할 수 있도록 합니다. |
또한 지원되는 시각화 인수는 아래에 나열되어 있습니다:
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
show | bool | False | True인 경우, 주석이 달린 이미지나 비디오를 창에 표시합니다. 개발 또는 테스트 중 즉각적인 시각적 피드백에 유용합니다. |
line_width | int or None | None | 바우딩 박스의 선 두께를 지정합니다. None인 경우, 선 두께가 이미지 크기에 따라 자동으로 조정됩니다. 가독성을 위한 시각적 커스텀을 제공합니다. |
show_conf | bool | True | 각 탐지에 대한 신뢰도 점수를 레이블과 함께 표시합니다. 각 탐지에 대한 모델의 확신도를 파악할 수 있습니다. |
show_labels | bool | True | 시각적 출력에서 각 탐지에 대한 레이블을 표시합니다. 탐지된 객체를 즉시 이해할 수 있도록 합니다. |
히트맵 컬러맵#
colormap 인수는 모든 OpenCV colormap을 허용합니다. cv2 모듈에서 상수를 전달합니다(예: colormap=cv2.COLORMAP_INFERNO):
| 컬러맵 이름 | 설명 |
|---|---|
cv2.COLORMAP_AUTUMN | 가을 컬러맵 |
cv2.COLORMAP_BONE | 뼈 컬러맵 |
cv2.COLORMAP_JET | 제트 컬러맵 |
cv2.COLORMAP_WINTER | 겨울 컬러맵 |
cv2.COLORMAP_RAINBOW | 무지개 컬러맵 |
cv2.COLORMAP_OCEAN | 바다 컬러맵 |
cv2.COLORMAP_SUMMER | 여름 컬러맵 |
cv2.COLORMAP_SPRING | 봄 컬러맵 |
cv2.COLORMAP_COOL | 쿨 컬러맵 |
cv2.COLORMAP_HSV | HSV(색상, 채도, 명도) 컬러맵 |
cv2.COLORMAP_PINK | 분홍 컬러맵 |
cv2.COLORMAP_HOT | 핫 컬러맵 |
cv2.COLORMAP_PARULA | 파룰라 컬러맵 |
cv2.COLORMAP_MAGMA | 마그마 컬러맵 |
cv2.COLORMAP_INFERNO | 인페르노 컬러맵 |
cv2.COLORMAP_PLASMA | 플라즈마 컬러맵 |
cv2.COLORMAP_VIRIDIS | 비리디스 컬러맵 |
cv2.COLORMAP_CIVIDIS | 시비디스 컬러맵 |
cv2.COLORMAP_TWILIGHT | 트와일라잇 컬러맵 |
cv2.COLORMAP_TWILIGHT_SHIFTED | 쉬프트된 트와일라잇 컬러맵 |
cv2.COLORMAP_TURBO | 터보 컬러맵 |
cv2.COLORMAP_DEEPGREEN | 딥그린 컬러맵 |
히트맵 작동 원리#
Heatmap solution은 ObjectCounter 클래스를 확장합니다. 처리된 첫 번째 프레임에서 프레임 크기에 일치하는 빈 강도 레이어를 생성합니다. 그 후 각 프레임은 두 단계로 처리됩니다:
- YOLO26 추적은 프레임 내의 모든 객체를 탐지하고 추적합니다.
- 추적된 각 객체에 대해 히트맵 강도는 경계 상자(BBox) 중심의 원형 영역 내에서 증가합니다.
프레임당 한 번, 누적된 강도 레이어가 정규화되고 선택된 컬러맵으로 색상이 지정된 뒤 원본 프레임과 블렌딩됩니다. 오버레이는 객체가 하나 이상 추적되는 즉시 나타나며, 객체가 없는 프레임에는 히트맵 오버레이가 표시되지 않습니다.
그 결과 시간 지남에 따라 빌드되는 동적 시각화가 생성되어 비디오 데이터의 트래픽 패턴, 군중 이동 또는 기타 공간적 거동이 드러납니다. region이 설정되면, 이 솔루션은 히트맵이 빌드되는 동안 해당 영역에 진입하고 나가는 객체 카운트도 수행합니다.
결론#
Ultralytics YOLO26 Heatmap solution은 몇 줄의 코드로 객체 추적 결과를 직관적인 활동 오버레이로 변환합니다. 더 나아가려면 object counting과 결합하거나, 다른 Ultralytics Solutions를 탐색하거나, 기본 tracking mode에 대해 읽어보십시오.
FAQ#
Ultralytics YOLO26은 비디오에서 어떻게 히트맵을 생성합니까?#
Ultralytics YOLO26은 비디오 프레임 전반에서 객체를 추적하고 각 추적된 객체의 위치에서 강도 값을 누적한 다음 결과를 색상화하고 원본 프레임과 블렌딩하여 히트맵을 생성합니다. 객체가 자주 나타나거나 머무르는 영역은 더 높은 강도가 빌드되어 더 따뜻한 색상으로 렌더링됩니다. 구성 옵션은 Heatmap() Arguments 섹션을 참조하십시오.
히트맵 결과를 비디오 파일로 저장하려면 어떻게 해야 합니까?#
main example에 표시된 대로 OpenCV의 cv2.VideoWriter을 사용하고 처리된 모든 프레임에 대해 results.plot_im을 작성하십시오. plot_im 속성에는 히트맵 오버레이가 이미 적용된 프레임이 포함됩니다.
히트맵을 객체 카운팅과 결합할 수 있습니까?#
예. 선, 사각형 또는 다각형 포인트와 함께 region 인수를 Heatmap()에 전달하면, 솔루션이 히트맵을 빌드하는 동안 해당 영역에 진입하고 나가는 객체를 카운트합니다. 반환된 결과에는 in_count, out_count, 및 클래스별 카운트가 포함됩니다. 영역 구성 세부 정보는 object counting guide를 참조하십시오.
Ultralytics YOLO26을 사용하여 히트맵에서 특정 객체 클래스만 시각화하려면 어떻게 해야 합니까?#
유지하려는 클래스 인덱스와 함께 classes 인수를 Heatmap()에 전달하십시오. 예를 들어, classes=[0, 2]는 사람과 자동차(COCO 클래스 인덱스 0 및 2)에서만 히트맵을 빌드합니다:
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
heatmap = solutions.Heatmap(show=True, model="yolo26n.pt", classes=[0, 2])
while cap.isOpened():
success, im0 = cap.read()
if not success:
break
results = heatmap(im0)
cap.release()
cv2.destroyAllWindows()Ultralytics YOLO26 히트맵이 OpenCV나 Matplotlib 같은 다른 데이터 시각화 도구와 다른 점은 무엇입니까?#
Ultralytics YOLO26 히트맵은 object detection, 추적, 강도 누적, 오버레이 렌더링을 단일 호출로 통합하는 반면, OpenCV나 Matplotlib 같은 일반 도구는 해당 파이프라인을 직접 구축해야 합니다. 이 솔루션은 비디오 스트림을 실시간으로 처리하고 지속적인 추적 및 사용자 정의 가능한 컬러맵을 기본 지원합니다. 기본 모델에 대한 세부 정보는 YOLO26 model page를 참조하십시오.

