高度なデータ視覚化:Ultralytics YOLOv8 🚀を使ったヒートマップ
ヒートマップ入門
ヒートマップ Ultralytics YOLOv8で生成されたヒートマップは、複雑なデータを色分けされた鮮やかなマトリックスに変換します。この視覚的なツールは、様々なデータ値を表現するために色のスペクトルを使用し、より暖かい色調はより高い強度を、より低い色調はより低い値を示します。ヒートマップは、複雑なデータパターン、相関関係、異常値を視覚化することに優れており、多様な領域にわたるデータ解釈に、アクセスしやすく魅力的なアプローチを提供します。
見るんだ: ヒートマップUltralytics YOLOv8
データ分析にヒートマップを選ぶ理由
- 直感的なデータ分布の視覚化:ヒートマップは、データの集中と分布の理解を単純化し、複雑なデータセットを理解しやすいビジュアル形式に変換します。
- 効率的なパターン検出:データをヒートマップ形式で可視化することで、トレンド、クラスター、異常値を見つけやすくなり、迅速な分析と洞察が容易になります。
- 空間分析と意思決定の強化:ヒートマップは空間的な関係を図示するのに役立ち、ビジネスインテリジェンス、環境調査、都市計画などの分野における意思決定プロセスを支援する。
実世界での応用
交通 | 小売 |
---|---|
Ultralytics YOLOv8 輸送ヒートマップ | Ultralytics YOLOv8 小売ヒートマップ |
ヒートマップ設定
heatmap_alpha
:この値が範囲内(0.0~1.0)であることを確認する。decay_factor
:オブジェクトがフレームから消えた後、ヒートマップを削除するために使用され、その値も範囲(0.0 - 1.0)でなければならない。
Ultralytics YOLOv8 例を用いたヒートマップ
from ultralytics import YOLO
from ultralytics.solutions import heatmap
import cv2
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 = heatmap.Heatmap()
heatmap_obj.set_args(colormap=cv2.COLORMAP_PARULA,
imw=w,
imh=h,
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()
from ultralytics import YOLO
from ultralytics.solutions import heatmap
import cv2
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 = heatmap.Heatmap()
heatmap_obj.set_args(colormap=cv2.COLORMAP_PARULA,
imw=w,
imh=h,
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()
from ultralytics import YOLO
import heatmap
import cv2
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 = heatmap.Heatmap()
heatmap_obj.set_args(colormap=cv2.COLORMAP_PARULA,
imw=w,
imh=h,
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()
from ultralytics import YOLO
from ultralytics.solutions import heatmap
import cv2
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 = heatmap.Heatmap()
heatmap_obj.set_args(colormap=cv2.COLORMAP_PARULA,
imw=w,
imh=h,
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()
from ultralytics import YOLO
from ultralytics.solutions import heatmap
import cv2
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 = heatmap.Heatmap()
heatmap_obj.set_args(colormap=cv2.COLORMAP_PARULA,
imw=w,
imh=h,
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)
from ultralytics import YOLO
from ultralytics.solutions import heatmap
import cv2
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 = heatmap.Heatmap()
heatmap_obj.set_args(colormap=cv2.COLORMAP_PARULA,
imw=w,
imh=h,
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()
論争 set_args
名称 | タイプ | デフォルト | 説明 |
---|---|---|---|
view_img |
bool |
False |
ヒートマップでフレームを表示 |
colormap |
cv2.COLORMAP |
None |
ヒートマップ用の cv2.COLORMAP |
imw |
int |
None |
ヒートマップの幅 |
imh |
int |
None |
ヒートマップの高さ |
line_thickness |
int |
2 |
バウンディングボックスを増やし、テキストの太さを数える |
view_in_counts |
bool |
True |
ビデオフレームにのみインカウントを表示 |
view_out_counts |
bool |
True |
ビデオフレームにのみアウトカウントを表示 |
classes_names |
dict |
model.model.names |
クラス名辞書 |
heatmap_alpha |
float |
0.5 |
ヒートマップのアルファ値 |
count_reg_pts |
list |
None |
オブジェクトのカウント領域ポイント |
count_txt_color |
RGB Color |
(0, 0, 0) |
オブジェクト・カウント・テキストの前景色 |
count_reg_color |
RGB Color |
(255, 0, 255) |
カウント領域の色 |
region_thickness |
int |
5 |
カウント領域厚さ値 |
decay_factor |
float |
0.99 |
特定時間後のヒートマップ領域除去の減衰係数 |
shape |
str |
circle |
ヒートマップの表示形状「rect」または「circle」をサポート |
line_dist_thresh |
int |
15 |
ラインカウンターのユークリッド距離のしきい値 |
count_bg_color |
RGB Color |
(255, 255, 255) |
蛍光ペンの色を数える |
cls_txtdisplay_gap |
int |
50 |
各クラス数のギャップを表示 |
論争 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 |
ディープグリーンのカラーマップ |
このようなカラーマップは、異なる色表現でデータを視覚化するためによく使われる。