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

Pass auf: Class-wise Object Counting using 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

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

# 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 = solutions.ObjectCounter(
    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()
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))

# 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 = solutions.ObjectCounter(
    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()
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))

# 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 = solutions.ObjectCounter(
    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()
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))

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 = solutions.ObjectCounter(
    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

Argument ObjectCounter

Hier ist eine Tabelle mit den ObjectCounter Argumente:

Name Typ Standard Beschreibung
classes_names dict None Wörterbuch der Klassennamen.
reg_pts list [(20, 400), (1260, 400)] Liste der Punkte, die die ZĂ€hlregion definieren.
count_reg_color tuple (255, 0, 255) RGB-Farbe der ZĂ€hlregion.
count_txt_color tuple (0, 0, 0) RGB-Farbe des ZĂ€hltextes.
count_bg_color tuple (255, 255, 255) RGB-Farbe des Hintergrunds des ZĂ€hltextes.
line_thickness int 2 LinienstĂ€rke fĂŒr Begrenzungsrahmen.
track_thickness int 2 Dicke der Spurlinien.
view_img bool False Flagge zur Steuerung, ob der Videostream angezeigt werden soll.
view_in_counts bool True Flagge, um festzulegen, ob die ZĂ€hlungen im Video-Stream angezeigt werden sollen.
view_out_counts bool True Flagge, um festzulegen, ob die Anzahl der AusgÀnge im Video-Stream angezeigt werden soll.
draw_tracks bool False Flagge, um festzulegen, ob die Objektspuren gezeichnet werden sollen.
track_color tuple None RGB-Farbe der Spuren.
region_thickness int 5 Dicke der ZĂ€hlregion des Objekts.
line_dist_thresh int 15 Euklidischer Abstandsschwellenwert fĂŒr den ZeilenzĂ€hler.
cls_txtdisplay_gap int 50 Zeigt den Abstand zwischen den einzelnen Klassen an.

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


Created 2023-12-02, Updated 2024-06-10
Authors: glenn-jocher (14), IvorZhu331 (1), RizwanMunawar (6), AyushExel (1)

Kommentare