Zum Inhalt springen

ObjektzĂ€hlung mit Ultralytics YOLOv8 🚀

Was ist ObjektzÀhlung?

ObjektzĂ€hlung mit Ultralytics YOLOv8 Bei der ObjektzĂ€hlung geht es um die genaue Identifizierung und ZĂ€hlung bestimmter Objekte in Videos und Kamerastreams. YOLOv8 eignet sich hervorragend fĂŒr Echtzeitanwendungen und bietet dank modernster Algorithmen und Deep Learning-FĂ€higkeiten eine effiziente und prĂ€zise ObjektzĂ€hlung fĂŒr verschiedene Szenarien wie die Analyse von Menschenmengen und die Überwachung.



Pass auf: ObjektzÀhlung mit Ultralytics YOLOv8

Vorteile des ObjektzÀhlens?

  • Ressourcen-Optimierung: Das ZĂ€hlen von Objekten erleichtert eine effiziente Ressourcenverwaltung, indem es genaue ZĂ€hlungen liefert und die Ressourcenzuweisung in Anwendungen wie der Bestandsverwaltung optimiert.
  • Erhöhte Sicherheit: Die ObjektzĂ€hlung verbessert die Sicherheit und Überwachung, indem sie Objekte genau verfolgt und zĂ€hlt und so zur proaktiven Erkennung von Bedrohungen beitrĂ€gt.
  • Informierte Entscheidungsfindung: Die ObjektzĂ€hlung bietet wertvolle Erkenntnisse fĂŒr die Entscheidungsfindung und die Optimierung von Prozessen im Einzelhandel, im Verkehrsmanagement und in vielen anderen Bereichen.

Anwendungen in der realen Welt

Logistik Aquakultur
Förderband Pakete zÀhlen mit Ultralytics YOLOv8 FischzÀhlung im Meer mit Ultralytics YOLOv8
Förderband Pakete zÀhlen mit Ultralytics YOLOv8 FischzÀhlung im Meer mit Ultralytics YOLOv8

ObjektzÀhlung mit YOLOv8 Beispiel

from ultralytics import YOLO
from ultralytics.solutions import object_counter
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))

# Define region points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi",
                       cv2.VideoWriter_fourcc(*'mp4v'),
                       fps,
                       (w, h))

# Init Object Counter
counter = object_counter.ObjectCounter()
counter.set_args(view_img=True,
                 reg_pts=region_points,
                 classes_names=model.names,
                 draw_tracks=True,
                 line_thickness=2)

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

cap.release()
video_writer.release()
cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
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))

# Define region points as a polygon with 5 points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi",
                       cv2.VideoWriter_fourcc(*'mp4v'),
                       fps,
                       (w, h))

# Init Object Counter
counter = object_counter.ObjectCounter()
counter.set_args(view_img=True,
                 reg_pts=region_points,
                 classes_names=model.names,
                 draw_tracks=True,
                 line_thickness=2)

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

cap.release()
video_writer.release()
cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
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))

# Define line points
line_points = [(20, 400), (1080, 400)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi",
                       cv2.VideoWriter_fourcc(*'mp4v'),
                       fps,
                       (w, h))

# Init Object Counter
counter = object_counter.ObjectCounter()
counter.set_args(view_img=True,
                 reg_pts=line_points,
                 classes_names=model.names,
                 draw_tracks=True,
                 line_thickness=2)

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

cap.release()
video_writer.release()
cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
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))

line_points = [(20, 400), (1080, 400)]  # line or region points
classes_to_count = [0, 2]  # person and car classes for count

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi",
                       cv2.VideoWriter_fourcc(*'mp4v'),
                       fps,
                       (w, h))

# Init Object Counter
counter = object_counter.ObjectCounter()
counter.set_args(view_img=True,
                 reg_pts=line_points,
                 classes_names=model.names,
                 draw_tracks=True,
                 line_thickness=2)

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_to_count)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
Region ist beweglich

Du kannst die Region an eine beliebige Stelle im Rahmen verschieben, indem du auf ihre Kanten klickst

Optionale Argumente set_args

Name Typ Standard Beschreibung
view_img bool False Rahmen mit ZĂ€hlungen anzeigen
view_in_counts bool True Incounts nur auf dem Videobild anzeigen
view_out_counts bool True Out-Counts nur auf dem Videobild anzeigen
line_thickness int 2 Begrenzungsrahmen vergrĂ¶ĂŸern und Textdicke zĂ€hlen
reg_pts list [(20, 400), (1260, 400)] Punkte, die das Gebiet der Region definieren
classes_names dict model.model.names Wörterbuch der Klassennamen
count_reg_color RGB Color (255, 0, 255) Farbe des Objekts ZĂ€hlregion oder Linie
track_thickness int 2 Dicke der NachfĂŒhrlinien
draw_tracks bool False Aktivieren des Zeichnens von Spurlinien
track_color RGB Color (0, 255, 0) Farbe fĂŒr jede Spurlinie
line_dist_thresh int 15 Euklidischer Abstand Schwellenwert fĂŒr ZeilenzĂ€hler
count_txt_color RGB Color (255, 255, 255) Vordergrundfarbe fĂŒr Objekt zĂ€hlt Text
region_thickness int 5 Dicke fĂŒr Objektgegenbereich oder Linie
count_bg_color RGB Color (255, 255, 255) Textmarkerfarbe zÀhlen

Argumente model.track

Name Typ Standard Beschreibung
source im0 None Quellverzeichnis fĂŒr Bilder oder Videos
persist bool False Spuren zwischen Frames beibehalten
tracker str botsort.yaml Tracking-Methode 'bytetrack' oder 'botsort'
conf float 0.3 Konfidenzschwelle
iou float 0.5 IOU-Schwelle
classes list None Ergebnisse nach Klassen filtern, d.h. classes=0, oder classes=[0,2,3]
verbose bool True Anzeige der Ergebnisse der Objektverfolgung


Erstellt am 2023-12-02, Aktualisiert am 2024-04-18
Autoren: glenn-jocher (9), RizwanMunawar (1), AyushExel (1)

Kommentare