Salta para o conteúdo

Estimativa da velocidade utilizando Ultralytics YOLOv8 🚀

O que é a estimativa de velocidade?

A estimativa da velocidade é o processo de cálculo da taxa de movimento de um objeto num determinado contexto, frequentemente utilizado em aplicações de visão por computador. Utilizando o Ultralytics YOLOv8 pode agora calcular a velocidade de um objeto utilizando o seguimento de objectos juntamente com dados de distância e tempo, cruciais para tarefas como o tráfego e a vigilância. A precisão da estimativa de velocidade influencia diretamente a eficiência e a fiabilidade de várias aplicações, tornando-a um componente essencial para o avanço de sistemas inteligentes e processos de tomada de decisões em tempo real.

Vantagens da estimativa de velocidade?

  • Controlo eficiente do tráfego: A estimativa exacta da velocidade ajuda a gerir o fluxo de tráfego, a aumentar a segurança e a reduzir o congestionamento nas estradas.
  • Navegação autónoma precisa: Nos sistemas autónomos, como os automóveis autónomos, uma estimativa fiável da velocidade garante uma navegação segura e precisa do veículo.
  • Segurança de vigilância melhorada: A estimativa de velocidade na análise de vigilância ajuda a identificar comportamentos invulgares ou potenciais ameaças, melhorando a eficácia das medidas de segurança.

Aplicações no mundo real

Transporte Transporte
Estimativa da velocidade na estrada utilizando Ultralytics YOLOv8 Estimativa de velocidade em pontes utilizando Ultralytics YOLOv8
Estimativa da velocidade na estrada utilizando Ultralytics YOLOv8 Estimativa de velocidade em pontes utilizando Ultralytics YOLOv8

Estimativa de velocidade utilizando YOLOv8 Exemplo

from ultralytics import YOLO
from ultralytics.solutions import speed_estimation
import cv2

model = YOLO("yolov8n.pt")
names = model.model.names

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("speed_estimation.avi",
                               cv2.VideoWriter_fourcc(*'mp4v'),
                               fps,
                               (w, h))

line_pts = [(0, 360), (1280, 360)]

# Init speed-estimation obj
speed_obj = speed_estimation.SpeedEstimator()
speed_obj.set_args(reg_pts=line_pts,
                   names=names,
                   view_img=True)

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 = speed_obj.estimate_speed(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
A velocidade é estimada

A velocidade será uma estimativa e pode não ser totalmente exacta. Além disso, a estimativa pode variar dependendo da velocidade da GPU.

Argumentos opcionais set_args

Nome Tipo Predefinição Descrição
reg_pts list [(20, 400), (1260, 400)] Pontos que definem a área da região
names dict None Nomes de classes
view_img bool False Apresenta quadros com contagens
line_thickness int 2 Aumenta a espessura das caixas delimitadoras
region_thickness int 5 Espessura da região ou linha do contador de objectos
spdl_dist_thresh int 10 Limiar da distância euclidiana para a linha de controlo de velocidade

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]
verbose bool True Apresenta os resultados do rastreio de objectos


Criado em 2024-01-05, Atualizado em 2024-01-15
Autores: glenn-jocher (2), AyushExel (1), chr043416@gmail.com (1)

Comentários