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: Klassenweise 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 |
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,
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,
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,
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,
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 |
---|---|---|---|
names |
dict |
None |
Wörterbuch der Klassennamen. |
reg_pts |
list |
[(20, 400), (1260, 400)] |
Liste der Punkte, die die ZĂ€hlregion definieren. |
line_thickness |
int |
2 |
LinienstĂ€rke fĂŒr Begrenzungsrahmen. |
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. |
Argumente model.track
Argument | Typ | Standard | Beschreibung |
---|---|---|---|
source |
str |
None |
Specifies the source directory for images or videos. Supports file paths and URLs. |
persist |
bool |
False |
Enables persistent tracking of objects between frames, maintaining IDs across video sequences. |
tracker |
str |
botsort.yaml |
Specifies the tracking algorithm to use, e.g., bytetrack.yaml oder botsort.yaml . |
conf |
float |
0.3 |
Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives. |
iou |
float |
0.5 |
Sets the Intersection over Union (IoU) threshold for filtering overlapping detections. |
classes |
list |
None |
Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes. |
verbose |
bool |
True |
Controls the display of tracking results, providing a visual output of tracked objects. |
FAQ
Wie zÀhle ich Objekte in einem Video mit Ultralytics YOLOv8 ?
Um Objekte in einem Video mit Ultralytics YOLOv8 zu zĂ€hlen, kannst du die folgenden Schritte ausfĂŒhren:
- Importiere die notwendigen Bibliotheken (
cv2
,ultralytics
). - Lade ein vortrainiertes YOLOv8 Modell.
- Definiere den ZĂ€hlbereich (z. B. ein Polygon, eine Linie usw.).
- Richte die Videoaufnahme ein und initialisiere den ObjektzÀhler.
- Verarbeite jedes Bild, um Objekte zu verfolgen und sie innerhalb der festgelegten Region zu zÀhlen.
Hier ist ein einfaches Beispiel fĂŒr das ZĂ€hlen in einer Region:
import cv2
from ultralytics import YOLO, solutions
def count_objects_in_region(video_path, output_video_path, model_path):
"""Count objects in a specific region within a video."""
model = YOLO(model_path)
cap = cv2.VideoCapture(video_path)
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))
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
counter = solutions.ObjectCounter(
view_img=True, reg_pts=region_points, 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()
count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolov8n.pt")
Weitere Konfigurationen und Optionen findest du im Abschnitt " ObjektzÀhlung ".
Welche Vorteile hat die Verwendung von Ultralytics YOLOv8 fĂŒr die ObjektzĂ€hlung?
Die Verwendung von Ultralytics YOLOv8 fĂŒr die ObjektzĂ€hlung bietet mehrere Vorteile:
- Ressourcen-Optimierung: Es erleichtert ein effizientes Ressourcenmanagement, indem es genaue ZĂ€hlungen liefert und so die Ressourcenzuweisung in Branchen wie der Lagerverwaltung optimiert.
- Erhöhte Sicherheit: Es erhöht die Sicherheit und Ăberwachung, indem es Personen genau verfolgt und zĂ€hlt und so hilft, Bedrohungen proaktiv zu erkennen.
- Informierte Entscheidungsfindung: Sie bietet wertvolle Erkenntnisse fĂŒr die Entscheidungsfindung und optimiert Prozesse in Bereichen wie Einzelhandel, Verkehrsmanagement und mehr.
Praktische Anwendungen und Codebeispiele findest du im Abschnitt Vorteile der ObjektzÀhlung.
Wie kann ich mit Ultralytics YOLOv8 bestimmte Klassen von Objekten zÀhlen?
Um bestimmte Klassen von Objekten mit Ultralytics YOLOv8 zu zÀhlen, musst du wÀhrend der Tracking-Phase die Klassen angeben, an denen du interessiert bist. Im Folgenden findest du ein Python Beispiel:
import cv2
from ultralytics import YOLO, solutions
def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
"""Count specific classes of objects in a video."""
model = YOLO(model_path)
cap = cv2.VideoCapture(video_path)
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)]
video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
counter = solutions.ObjectCounter(
view_img=True, reg_pts=line_points, 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()
count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolov8n.pt", [0, 2])
In diesem Beispiel, classes_to_count=[0, 2]
was bedeutet, dass es Objekte der Klasse 0
und 2
(z. B. Person und Auto).
Warum sollte ich YOLOv8 gegenĂŒber anderen Objekterkennungsmodellen fĂŒr Echtzeitanwendungen verwenden?
Ultralytics YOLOv8 bietet mehrere Vorteile gegenĂŒber anderen Objekterkennungsmodellen wie Faster R-CNN, SSD und frĂŒheren Versionen von YOLO :
- Geschwindigkeit und Effizienz: YOLOv8 bietet Echtzeitverarbeitungsfunktionen und ist damit ideal fĂŒr Anwendungen, die Hochgeschwindigkeitsinferenzen erfordern, wie z. B. Ăberwachung und autonomes Fahren.
- Genauigkeit: Sie bietet eine hochmoderne Genauigkeit bei der Objekterkennung und -verfolgung, reduziert die Anzahl der Fehlalarme und verbessert die ZuverlÀssigkeit des Systems.
- Einfache Integration: YOLOv8 bietet eine nahtlose Integration mit verschiedenen Plattformen und GerĂ€ten, einschlieĂlich Mobil- und Edge-GerĂ€ten, was fĂŒr moderne KI-Anwendungen entscheidend ist.
- FlexibilitĂ€t: UnterstĂŒtzt verschiedene Aufgaben wie Objekterkennung, -segmentierung und -verfolgung mit konfigurierbaren Modellen, um spezifische AnwendungsfĂ€lle zu erfĂŒllen.
Unter Ultralytics YOLOv8 findest du eine ausfĂŒhrlicheDokumentation ĂŒber die Funktionen und Leistungsvergleiche.
Kann ich YOLOv8 fĂŒr fortgeschrittene Anwendungen wie Crowd-Analyse und Verkehrsmanagement nutzen?
Ja, Ultralytics YOLOv8 eignet sich aufgrund seiner Echtzeit-Erkennungsfunktionen, seiner Skalierbarkeit und seiner IntegrationsflexibilitĂ€t perfekt fĂŒr fortschrittliche Anwendungen wie die Analyse von Menschenmengen und das Verkehrsmanagement. Seine fortschrittlichen Funktionen ermöglichen eine hochprĂ€zise Objektverfolgung, ZĂ€hlung und Klassifizierung in dynamischen Umgebungen. Beispiele fĂŒr AnwendungsfĂ€lle sind:
- Menschenmengenanalyse: Ăberwache und verwalte groĂe Versammlungen, um die Sicherheit zu gewĂ€hrleisten und den Menschenstrom zu optimieren.
- Verkehrsmanagement: Verfolge und zÀhle Fahrzeuge, analysiere Verkehrsmuster und manage Staus in Echtzeit.
Weitere Informationen und Details zur Implementierung findest du im Leitfaden Real World Applications of object counting with YOLOv8.