Visualização avançada de dados: Heatmaps usando Ultralytics YOLOv8 🚀
Introdução aos mapas de calor
Um mapa de calor gerado com Ultralytics YOLOv8 transforma dados complexos numa matriz vibrante e codificada por cores. Esta ferramenta visual utiliza um espetro de cores para representar valores de dados variáveis, em que os tons mais quentes indicam intensidades mais elevadas e os tons mais frios significam valores mais baixos. Os mapas de calor são excelentes na visualização de padrões de dados intrincados, correlações e anomalias, oferecendo uma abordagem acessível e envolvente à interpretação de dados em diversos domínios.
Observa: Mapas de calor utilizando Ultralytics YOLOv8
Porquê escolher os mapas de calor para a análise de dados?
- Visualização intuitiva da distribuição de dados: Os mapas de calor simplificam a compreensão da concentração e distribuição de dados, convertendo conjuntos de dados complexos em formatos visuais fáceis de entender.
- Deteção eficiente de padrões: Ao visualizar os dados em formato de mapa de calor, torna-se mais fácil detetar tendências, clusters e outliers, facilitando uma análise mais rápida e insights.
- Melhoria da análise espacial e da tomada de decisões: Os mapas de calor são fundamentais para ilustrar as relações espaciais, ajudando nos processos de tomada de decisões em sectores como a inteligência empresarial, os estudos ambientais e o planeamento urbano.
Aplicações no mundo real
Transporte | Retalho |
---|---|
Ultralytics YOLOv8 Mapa de calor dos transportes | Ultralytics YOLOv8 Mapa de calor do retalho |
Configuração do mapa de calor
heatmap_alpha
: Certifica-te de que este valor se encontra no intervalo (0,0 - 1,0).decay_factor
: Usado para remover o mapa de calor depois de um objeto já não estar no quadro, o seu valor também deve estar no intervalo (0,0 - 1,0).
Mapas de calor utilizando Ultralytics YOLOv8 Exemplo
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",
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,
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,
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,
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",
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",
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()
Argumentos Heatmap()
Nome | Tipo | Predefinição | Descrição |
---|---|---|---|
names |
list |
None |
Dicionário de nomes de classes. |
imw |
int |
0 |
Largura da imagem. |
imh |
int |
0 |
Altura da imagem. |
colormap |
int |
cv2.COLORMAP_JET |
Mapa de cores a utilizar para o mapa de calor. |
heatmap_alpha |
float |
0.5 |
Valor de mistura alfa para a sobreposição do mapa de calor. |
view_img |
bool |
False |
Mostra ou não a imagem com a sobreposição do mapa de calor. |
view_in_counts |
bool |
True |
Mostra ou não a contagem de objectos que entram na região. |
view_out_counts |
bool |
True |
Mostra ou não a contagem de objectos que saem da região. |
count_reg_pts |
list ou None |
None |
Pontos que definem a região de contagem (uma linha ou um polígono). |
count_txt_color |
tuple |
(0, 0, 0) |
Cor do texto para a apresentação das contagens. |
count_bg_color |
tuple |
(255, 255, 255) |
Cor de fundo para a apresentação das contagens. |
count_reg_color |
tuple |
(255, 0, 255) |
Cor para a região de contagem. |
region_thickness |
int |
5 |
Espessura da linha da região. |
line_dist_thresh |
int |
15 |
Limiar de distância para contagem baseada em linhas. |
line_thickness |
int |
2 |
Espessura das linhas utilizadas no desenho. |
decay_factor |
float |
0.99 |
Fator de decaimento para o mapa de calor para reduzir a intensidade ao longo do tempo. |
shape |
str |
"circle" |
Forma das manchas do mapa térmico ("círculo" ou "rect"). |
Argumentos model.track
Nome | Tipo | Predefinição | Descrição |
---|---|---|---|
source |
im0 |
None |
diretório de origem para imagens ou vídeos |
persist |
bool |
False |
persistência de faixas entre fotogramas |
tracker |
str |
botsort.yaml |
Método de rastreio 'bytetrack' ou 'botsort' |
conf |
float |
0.3 |
Limiar de confiança |
iou |
float |
0.5 |
Limiar IOU |
classes |
list |
None |
filtra os resultados por classe, ou seja, classes=0, ou classes=[0,2,3] |
Mapa térmico COLORMAPs
Nome do mapa de cores | Descrição |
---|---|
cv::COLORMAP_AUTUMN |
Mapa das cores do outono |
cv::COLORMAP_BONE |
Mapa de cores dos ossos |
cv::COLORMAP_JET |
Mapa de cores do jato |
cv::COLORMAP_WINTER |
Mapa de cores de inverno |
cv::COLORMAP_RAINBOW |
Mapa de cores do arco-íris |
cv::COLORMAP_OCEAN |
Mapa de cores dos oceanos |
cv::COLORMAP_SUMMER |
Mapa de cores do verão |
cv::COLORMAP_SPRING |
Mapa de cores da primavera |
cv::COLORMAP_COOL |
Mapa de cores fixe |
cv::COLORMAP_HSV |
Mapa de cores HSV (Matiz, Saturação, Valor) |
cv::COLORMAP_PINK |
Mapa cor-de-rosa |
cv::COLORMAP_HOT |
Mapa de cores quentes |
cv::COLORMAP_PARULA |
Mapa de cores de Parula |
cv::COLORMAP_MAGMA |
Mapa de cores do magma |
cv::COLORMAP_INFERNO |
Mapa de cores do Inferno |
cv::COLORMAP_PLASMA |
Mapa de cores do plasma |
cv::COLORMAP_VIRIDIS |
Mapa de cores de Viridis |
cv::COLORMAP_CIVIDIS |
Mapa de cores de Cividis |
cv::COLORMAP_TWILIGHT |
Mapa de cores do crepúsculo |
cv::COLORMAP_TWILIGHT_SHIFTED |
Mapa de cores do crepúsculo deslocado |
cv::COLORMAP_TURBO |
Mapa de cores do turbo |
cv::COLORMAP_DEEPGREEN |
Mapa de cores verde profundo |
Estes mapas de cores são normalmente utilizados para visualizar dados com diferentes representações de cores.
FAQ
Como é que Ultralytics YOLOv8 gera mapas de calor e quais são as suas vantagens?
Ultralytics YOLOv8 gera mapas de calor transformando dados complexos numa matriz codificada por cores em que diferentes tonalidades representam intensidades de dados. Os mapas de calor facilitam a visualização de padrões, correlações e anomalias nos dados. Os tons mais quentes indicam valores mais elevados, enquanto os tons mais frios representam valores mais baixos. As principais vantagens incluem a visualização intuitiva da distribuição de dados, a deteção eficiente de padrões e a análise espacial melhorada para a tomada de decisões. Para obter mais detalhes e opções de configuração, consulta a secção Configuração de mapas de calor.
Posso utilizar Ultralytics YOLOv8 para efetuar o rastreio de objectos e gerar um mapa de calor em simultâneo?
Sim, Ultralytics YOLOv8 suporta o rastreio de objectos e a geração de mapas de calor em simultâneo. Isto pode ser conseguido através do seu Heatmap
integrada com modelos de seguimento de objectos. Para tal, tens de inicializar o objeto heatmap e utilizar as capacidades de seguimento do YOLOv8. Segue um exemplo simples:
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
heatmap_obj = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, view_img=True, shape="circle", names=model.names)
while cap.isOpened():
success, im0 = cap.read()
if not success:
break
tracks = model.track(im0, persist=True, show=False)
im0 = heatmap_obj.generate_heatmap(im0, tracks)
cv2.imshow("Heatmap", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
Para mais informações, consulta a página Modo de seguimento.
O que torna os mapas de calor Ultralytics YOLOv8 diferentes de outras ferramentas de visualização de dados, como as do OpenCV ou do Matplotlib?
Ultralytics YOLOv8 Os mapas de calor do são especificamente concebidos para integração com os seus modelos de deteção e seguimento de objectos, fornecendo uma solução completa para análise de dados em tempo real. Ao contrário das ferramentas de visualização genéricas, como o OpenCV ou o Matplotlib, os mapas de calor do YOLOv8 são optimizados para desempenho e processamento automatizado, suportando funcionalidades como o seguimento persistente, o ajuste do fator de decaimento e a sobreposição de vídeo em tempo real. Para mais informações sobre as características únicas do YOLOv8, visita a Ultralytics YOLOv8 Introduction.
Como posso visualizar apenas classes de objectos específicas em mapas de calor utilizando Ultralytics YOLOv8 ?
Podes visualizar classes de objectos específicas, especificando as classes desejadas no track()
do modelo YOLO . Por exemplo, se só quiseres visualizar carros e pessoas (assumindo que os seus índices de classe são 0 e 2), podes definir o método classes
em conformidade.
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
heatmap_obj = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, view_img=True, shape="circle", names=model.names)
classes_for_heatmap = [0, 2] # Classes to visualize
while cap.isOpened():
success, im0 = cap.read()
if not success:
break
tracks = model.track(im0, persist=True, show=False, classes=classes_for_heatmap)
im0 = heatmap_obj.generate_heatmap(im0, tracks)
cv2.imshow("Heatmap", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
Porque é que as empresas devem escolher Ultralytics YOLOv8 para a geração de mapas de calor na análise de dados?
Ultralytics YOLOv8 oferece uma integração perfeita de deteção avançada de objectos e geração de mapas de calor em tempo real, tornando-o a escolha ideal para empresas que procuram visualizar dados de forma mais eficaz. As principais vantagens incluem a visualização intuitiva da distribuição de dados, a deteção eficiente de padrões e a análise espacial melhorada para uma melhor tomada de decisões. Além disso, as funcionalidades de ponta do YOLOv8, como o acompanhamento persistente, mapas de cores personalizáveis e suporte para vários formatos de exportação, tornam-no superior a outras ferramentas como o TensorFlow e o OpenCV para uma análise de dados abrangente. Sabe mais sobre aplicações empresariais em Ultralytics Plans.
Criado em 2023-12-07, Atualizado em 2024-07-14
Autores: RizwanMunawar (8), glenn-jocher (13), IvorZhu331 (1), AyushExel (1), 1579093407@qq.com (1)