Vai al contenuto

Stima della velocità utilizzando Ultralytics YOLOv8 🚀

Che cos'è la stima della velocità?

La stima della velocità è il processo di calcolo della velocità di movimento di un oggetto all'interno di un determinato contesto, spesso utilizzato nelle applicazioni di computer vision. Utilizzando Ultralytics YOLOv8 è ora possibile calcolare la velocità di un oggetto utilizzando il tracciamento dell'oggetto insieme ai dati relativi alla distanza e al tempo, fondamentali per attività come il traffico e la sorveglianza. L'accuratezza della stima della velocità influenza direttamente l'efficienza e l'affidabilità di varie applicazioni, rendendola una componente fondamentale per il progresso dei sistemi intelligenti e dei processi decisionali in tempo reale.

Vantaggi della stima della velocità?

  • Controllo del traffico efficiente: Una stima accurata della velocità aiuta a gestire il flusso del traffico, a migliorare la sicurezza e a ridurre la congestione stradale.
  • Navigazione autonoma precisa: Nei sistemi autonomi come le auto a guida autonoma, una stima affidabile della velocità garantisce una navigazione sicura e precisa del veicolo.
  • Maggiore sicurezza della sorveglianza: La stima della velocità nell'analisi della sorveglianza aiuta a identificare comportamenti insoliti o potenziali minacce, migliorando l'efficacia delle misure di sicurezza.

Applicazioni nel mondo reale

Trasporto Trasporto
Stima della velocità su strada utilizzando Ultralytics YOLOv8 Stima della velocità su un ponte utilizzando Ultralytics YOLOv8
Stima della velocità su strada utilizzando Ultralytics YOLOv8 Stima della velocità su un ponte utilizzando Ultralytics YOLOv8

Esempio di stima della velocità con YOLOv8

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()
La velocità è una stima

La velocità sarà una stima e potrebbe non essere completamente accurata. Inoltre, la stima può variare a seconda della velocità della GPU.

Argomenti opzionali set_args

Nome Tipo Predefinito Descrizione
reg_pts list [(20, 400), (1260, 400)] Punti che definiscono l'area della regione
names dict None Nomi delle classi
view_img bool False Visualizza i fotogrammi con i conteggi
line_thickness int 2 Aumenta lo spessore dei riquadri di delimitazione
region_thickness int 5 Spessore per la regione o la linea del contatore dell'oggetto
spdl_dist_thresh int 10 Soglia di distanza euclidea per la linea di controllo della velocità

Argomenti model.track

Nome Tipo Predefinito Descrizione
source im0 None directory di origine per le immagini o i video
persist bool False persistenza dei brani tra i fotogrammi
tracker str botsort.yaml Metodo di tracciamento 'bytetrack' o 'botsort'
conf float 0.3 Soglia di fiducia
iou float 0.5 Soglia IOU
classes list None filtrare i risultati per classe, ad esempio classi=0 o classi=[0,2,3].
verbose bool True Visualizza i risultati del tracciamento dell'oggetto


Creato 2024-01-05, Aggiornato 2024-01-15
Autori: glenn-jocher (2), AyushExel (1), chr043416@gmail.com (1)

Commenti