Skip to content

Estimation de la vitesse à l'aide de Ultralytics YOLOv8 🚀

Qu'est-ce que l'estimation de la vitesse ?

L'estimation de la vitesse est le processus de calcul de la vitesse de déplacement d'un objet dans un contexte donné, souvent utilisé dans les applications de vision par ordinateur. En utilisant Ultralytics YOLOv8 tu peux maintenant calculer la vitesse d'un objet en utilisant le suivi d'objet en même temps que les données de distance et de temps, ce qui est crucial pour des tâches telles que la circulation et la surveillance. La précision de l'estimation de la vitesse influence directement l'efficacité et la fiabilité de diverses applications, ce qui en fait un élément clé dans l'avancement des systèmes intelligents et des processus de prise de décision en temps réel.



Regarde : Estimation de la vitesse Ă  l'aide de Ultralytics YOLOv8

Avantages de l'estimation de la vitesse ?

  • ContrĂ´le efficace du trafic : Une estimation prĂ©cise de la vitesse permet de gĂ©rer le flux de circulation, d'amĂ©liorer la sĂ©curitĂ© et de rĂ©duire les embouteillages sur les routes.
  • Navigation autonome prĂ©cise : Dans les systèmes autonomes comme les voitures auto-conduites, une estimation fiable de la vitesse garantit une navigation sĂ»re et prĂ©cise du vĂ©hicule.
  • AmĂ©lioration de la sĂ©curitĂ© de la surveillance : L'estimation de la vitesse dans l'analyse de la surveillance permet d'identifier les comportements inhabituels ou les menaces potentielles, ce qui amĂ©liore l'efficacitĂ© des mesures de sĂ©curitĂ©.

Applications dans le monde réel

Transport Transport
Estimation de la vitesse sur route Ă  l'aide de Ultralytics YOLOv8 Estimation de la vitesse sur un pont Ă  l'aide de Ultralytics YOLOv8
Estimation de la vitesse sur route Ă  l'aide de Ultralytics YOLOv8 Estimation de la vitesse sur un pont Ă  l'aide de Ultralytics YOLOv8

Estimation de la vitesse Ă  l'aide de YOLOv8 Exemple

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 vitesse est une estimation

La vitesse sera une estimation et peut ne pas être complètement exacte. De plus, l'estimation peut varier en fonction de la vitesse du GPU.

Arguments facultatifs set_args

Nom Type DĂ©faut Description
reg_pts list [(20, 400), (1260, 400)] Points définissant la zone de la région
names dict None Noms des classes
view_img bool False Afficher les cadres avec les décomptes
line_thickness int 2 Augmente l'épaisseur des boîtes de délimitation
region_thickness int 5 Épaisseur de la contre-région ou de la ligne de l'objet
spdl_dist_thresh int 10 Seuil de distance euclidienne pour la ligne de contrĂ´le de vitesse.

Arguments model.track

Nom Type DĂ©faut Description
source im0 None répertoire source pour les images ou les vidéos
persist bool False persistance des pistes entre les images
tracker str botsort.yaml MĂ©thode de suivi 'bytetrack' ou 'botsort'
conf float 0.3 Seuil de confiance
iou float 0.5 Seuil de reconnaissance de dette
classes list None filtre les résultats par classe, c'est-à-dire classes=0, ou classes=[0,2,3]
verbose bool True Affiche les résultats du suivi des objets


Créé le 2024-01-05, Mis à jour le 2024-03-02
Auteurs : chr043416@gmail.com (2), glenn-jocher (2), AyushExel (1)

Commentaires