コンテンツへスキップ

高度なデータ視覚化:Ultralytics YOLOv8 🚀を使ったヒートマップ

ヒートマップ入門

ヒートマップ Ultralytics YOLOv8で生成されたヒートマップは、複雑なデータを色分けされた鮮やかなマトリックスに変換します。この視覚的なツールは、様々なデータ値を表現するために色のスペクトルを使用し、より暖かい色調はより高い強度を、より低い色調はより低い値を示します。ヒートマップは、複雑なデータパターン、相関関係、異常値を視覚化することに優れており、多様な領域にわたるデータ解釈に、アクセスしやすく魅力的なアプローチを提供します。



見るんだ: ヒートマップUltralytics YOLOv8

データ分析にヒートマップを選ぶ理由

  • 直感的なデータ分布の視覚化:ヒートマップは、データの集中と分布の理解を単純化し、複雑なデータセットを理解しやすいビジュアル形式に変換します。
  • 効率的なパターン検出:データをヒートマップ形式で可視化することで、トレンド、クラスター、異常値を見つけやすくなり、迅速な分析と洞察が容易になります。
  • 空間分析と意思決定の強化:ヒートマップは空間的な関係を図示するのに役立ち、ビジネスインテリジェンス、環境調査、都市計画などの分野における意思決定プロセスを支援する。

実世界での応用

交通 小売
Ultralytics YOLOv8 輸送ヒートマップ Ultralytics YOLOv8 小売ヒートマップ
Ultralytics YOLOv8 輸送ヒートマップ Ultralytics YOLOv8 小売ヒートマップ

ヒートマップ設定

  • heatmap_alpha:この値が範囲内(0.0~1.0)であることを確認する。
  • decay_factor:オブジェクトがフレームから消えた後、ヒートマップを削除するために使用され、その値も範囲(0.0 - 1.0)でなければならない。

Ultralytics YOLOv8 例を用いたヒートマップ

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.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
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    classes_names=model.names,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.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
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

line_points = [(20, 400), (1080, 404)]  # line for object counting

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    count_reg_pts=line_points,
    classes_names=model.names,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    tracks = model.track(im0, persist=True, show=False)
    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.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
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Define polygon points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    count_reg_pts=region_points,
    classes_names=model.names,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    tracks = model.track(im0, persist=True, show=False)
    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.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
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Define region points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    count_reg_pts=region_points,
    classes_names=model.names,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    tracks = model.track(im0, persist=True, show=False)
    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8s.pt")  # YOLOv8 custom/pretrained model

im0 = cv2.imread("path/to/image.png")  # path to image file
h, w = im0.shape[:2]  # image height and width

# Heatmap Init
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    classes_names=model.names,
)

results = model.track(im0, persist=True)
im0 = heatmap_obj.generate_heatmap(im0, tracks=results)
cv2.imwrite("ultralytics_output.png", im0)
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.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
video_writer = cv2.VideoWriter("heatmap_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

classes_for_heatmap = [0, 2]  # classes for heatmap

# Init heatmap
heatmap_obj = solutions.Heatmap(
    colormap=cv2.COLORMAP_PARULA,
    view_img=True,
    shape="circle",
    classes_names=model.names,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False, classes=classes_for_heatmap)

    im0 = heatmap_obj.generate_heatmap(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()

論争 Heatmap()

名称 タイプ デフォルト 説明
classes_names dict None クラス名の辞書。
imw int 0 画像の幅。
imh int 0 画像の高さ。
colormap int cv2.COLORMAP_JET ヒートマップに使用するカラーマップ。
heatmap_alpha float 0.5 ヒートマップオーバーレイのアルファブレンド値。
view_img bool False 画像をヒートマップオーバーレイで表示するかどうか。
view_in_counts bool True リージョンに入るオブジェクトの数を表示するかどうか。
view_out_counts bool True リージョンから出ていくオブジェクトの数を表示するかどうか。
count_reg_pts list または None None 計数領域を定義する点(線または多角形)。
count_txt_color tuple (0, 0, 0) カウントを表示するテキストの色。
count_bg_color tuple (255, 255, 255) カウント表示の背景色。
count_reg_color tuple (255, 0, 255) カウント領域の色。
region_thickness int 5 領域線の太さ。
line_dist_thresh int 15 ラインベースのカウントのための距離のしきい値。
line_thickness int 2 描画に使用する線の太さ。
decay_factor float 0.99 ヒートマップの減衰係数。
shape str "circle" ヒートマップ・ブロブの形状(「円」または「矩形」)。

論争 model.track

名称 タイプ デフォルト 説明
source im0 None 画像またはビデオのソース・ディレクトリ
persist bool False フレーム間のトラックの持続
tracker str botsort.yaml トラッキングメソッド「bytetrack」または「botsort
conf float 0.3 信頼閾値
iou float 0.5 借用書のしきい値
classes list None つまり、class=0、またはclass=[0,2,3]。

ヒートマップ COLORMAPs

カラーマップ名 説明
cv::COLORMAP_AUTUMN 紅葉マップ
cv::COLORMAP_BONE 骨カラーマップ
cv::COLORMAP_JET ジェットカラー・マップ
cv::COLORMAP_WINTER 冬のカラーマップ
cv::COLORMAP_RAINBOW 虹色マップ
cv::COLORMAP_OCEAN 海の色マップ
cv::COLORMAP_SUMMER 夏色マップ
cv::COLORMAP_SPRING 春のカラーマップ
cv::COLORMAP_COOL クールなカラーマップ
cv::COLORMAP_HSV HSV(色相・彩度・明度)カラーマップ
cv::COLORMAP_PINK ピンクのカラーマップ
cv::COLORMAP_HOT ホットカラーマップ
cv::COLORMAP_PARULA パルーラ カラーマップ
cv::COLORMAP_MAGMA マグマ・カラーマップ
cv::COLORMAP_INFERNO インフェルノ カラーマップ
cv::COLORMAP_PLASMA プラズマカラーマップ
cv::COLORMAP_VIRIDIS ヴィリディス カラーマップ
cv::COLORMAP_CIVIDIS チヴィディス カラーマップ
cv::COLORMAP_TWILIGHT トワイライト・カラー・マップ
cv::COLORMAP_TWILIGHT_SHIFTED シフトトワイライトカラーマップ
cv::COLORMAP_TURBO ターボカラーマップ
cv::COLORMAP_DEEPGREEN ディープグリーンのカラーマップ

このようなカラーマップは、異なる色表現でデータを視覚化するためによく使われる。



Created 2023-12-07, Updated 2024-06-10
Authors: glenn-jocher (11), IvorZhu331 (1), RizwanMunawar (8), AyushExel (1), 1579093407@qq.com (1)

コメント