Zum Inhalt springen

Objektbeschneidung mit Ultralytics YOLOv8

Was ist Object Cropping?

Das Zuschneiden von Objekten mit Ultralytics YOLOv8 bedeutet, bestimmte erkannte Objekte aus einem Bild oder Video zu isolieren und zu extrahieren. Die Modellfunktionen von YOLOv8 werden genutzt, um Objekte genau zu identifizieren und abzugrenzen, damit sie für weitere Analysen oder Bearbeitungen präzise zugeschnitten werden können.



Pass auf: Objektbeschneidung mit Ultralytics YOLOv8

Vorteile von Object Cropping?

  • Fokussierte Analyse: YOLOv8 erleichtert das gezielte Zuschneiden von Objekten und ermöglicht so die eingehende Untersuchung oder Bearbeitung einzelner Objekte innerhalb einer Szene.
  • Reduzierte Datenmenge: Indem nur relevante Objekte extrahiert werden, hilft das Zuschneiden von Objekten dabei, die Datengröße zu minimieren, so dass die Daten effizient gespeichert, übertragen oder weiterverarbeitet werden können.
  • Verbesserte Präzision: Die Genauigkeit der Objekterkennung von YOLOv8 stellt sicher, dass die abgeschnittenen Objekte ihre räumlichen Beziehungen beibehalten und die visuellen Informationen für eine detaillierte Analyse erhalten bleiben.

Bildmaterial

Flughafen-Gepäck
Förderband am Flughafen Koffer kupieren mit Ultralytics YOLOv8
Kofferknacken am Flughafen-Förderband mit Ultralytics YOLOv8

Objektbeschneidung mit YOLOv8 Beispiel

import os

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

model = YOLO("yolov8n.pt")
names = 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))

crop_dir_name = "ultralytics_crop"
if not os.path.exists(crop_dir_name):
    os.mkdir(crop_dir_name)

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

idx = 0
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    results = model.predict(im0, show=False)
    boxes = results[0].boxes.xyxy.cpu().tolist()
    clss = results[0].boxes.cls.cpu().tolist()
    annotator = Annotator(im0, line_width=2, example=names)

    if boxes is not None:
        for box, cls in zip(boxes, clss):
            idx += 1
            annotator.box_label(box, color=colors(int(cls), True), label=names[int(cls)])

            crop_obj = im0[int(box[1]) : int(box[3]), int(box[0]) : int(box[2])]

            cv2.imwrite(os.path.join(crop_dir_name, str(idx) + ".png"), crop_obj)

    cv2.imshow("ultralytics", im0)
    video_writer.write(im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
video_writer.release()
cv2.destroyAllWindows()

Argumente model.predict

Argument Typ Standard Beschreibung
source str 'ultralytics/assets' Gibt die Datenquelle für die Inferenz an. Das kann ein Bildpfad, eine Videodatei, ein Verzeichnis, eine URL oder eine Geräte-ID für Live-Feeds sein. Unterstützt eine breite Palette von Formaten und Quellen und ermöglicht so eine flexible Anwendung für verschiedene Arten von Eingaben.
conf float 0.25 Legt die minimale Vertrauensschwelle für Erkennungen fest. Objekte, die mit einer geringeren Konfidenz als dieser Schwelle erkannt werden, werden nicht berücksichtigt. Die Anpassung dieses Wertes kann dazu beitragen, Falschmeldungen zu reduzieren.
iou float 0.7 Intersection Over Union (IoU) Schwellenwert für Non-Maximum Suppression (NMS). Niedrigere Werte führen zu weniger Erkennungen, da überlappende Kästchen eliminiert werden, was nützlich ist, um Duplikate zu reduzieren.
imgsz int or tuple 640 Legt die Bildgröße für die Inferenz fest. Kann eine einzelne ganze Zahl sein 640 für quadratische Größenänderungen oder ein (Höhe, Breite) Tupel. Die richtige Größenbestimmung kann die Erkennungsgenauigkeit und die Verarbeitungsgeschwindigkeit verbessern.
half bool False Ermöglicht die Inferenz mit halber Genauigkeit (FP16), was die Modellinferenz auf unterstützten GPUs mit minimalen Auswirkungen auf die Genauigkeit beschleunigen kann.
device str None Gibt das Gerät für die Inferenz an (z.B., cpu, cuda:0 oder 0). Ermöglicht die Auswahl zwischen CPU, einem bestimmten GPU oder anderen Rechengeräten für die Modellausführung.
max_det int 300 Maximal zulässige Anzahl von Erkennungen pro Bild. Begrenzt die Gesamtzahl der Objekte, die das Modell in einer einzigen Schlussfolgerung erkennen kann, um übermäßige Ausgaben in dichten Szenen zu verhindern.
vid_stride int 1 Frame Stride für Videoeingänge. Ermöglicht das Überspringen von Bildern in Videos, um die Verarbeitung auf Kosten der zeitlichen Auflösung zu beschleunigen. Bei einem Wert von 1 wird jedes Bild verarbeitet, bei höheren Werten werden Bilder übersprungen.
stream_buffer bool False Legt fest, ob bei der Verarbeitung von Videostreams alle Bilder gepuffert werden sollen (True), oder ob das Modell den letzten Frame zurückgeben soll (False). Nützlich für Echtzeitanwendungen.
visualize bool False Aktiviert die Visualisierung von Modellmerkmalen während der Inferenz und gibt Einblicke in das, was das Modell "sieht". Nützlich für die Fehlersuche und Modellinterpretation.
augment bool False Ermöglicht die Test-Time-Augmentation (TTA) für Vorhersagen, was die Robustheit der Erkennung auf Kosten der Schlussfolgerungsgeschwindigkeit verbessern kann.
agnostic_nms bool False Ermöglicht die klassenunabhängige Non-Maximum Suppression (NMS), die überlappende Boxen verschiedener Klassen zusammenführt. Nützlich in Szenarien mit mehreren Klassen, in denen sich die Klassen häufig überschneiden.
classes list[int] None Filtert Vorhersagen auf eine Reihe von Klassen-IDs. Nur Erkennungen, die zu den angegebenen Klassen gehören, werden zurückgegeben. Nützlich, um sich bei Erkennungsaufgaben mit mehreren Klassen auf relevante Objekte zu konzentrieren.
retina_masks bool False Verwendet hochauflösende Segmentierungsmasken, falls im Modell vorhanden. Dies kann die Qualität der Masken für Segmentierungsaufgaben verbessern, da sie feinere Details liefern.
embed list[int] None Legt die Ebenen fest, aus denen Merkmalsvektoren oder Einbettungen extrahiert werden sollen. Nützlich für nachgelagerte Aufgaben wie Clustering oder Ähnlichkeitssuche.

FAQ

Was ist Objektbeschneidung in Ultralytics YOLOv8 und wie funktioniert sie?

Das Zuschneiden von Objekten mit Ultralytics YOLOv8 bedeutet, dass bestimmte Objekte auf der Grundlage der Erkennungsfunktionen von YOLOv8 aus einem Bild oder Video isoliert und extrahiert werden. Dieses Verfahren ermöglicht eine gezielte Analyse, eine Verringerung des Datenvolumens und eine höhere Präzision, indem YOLOv8 die Objekte mit hoher Genauigkeit identifiziert und sie entsprechend zuschneidet. Eine ausführliche Anleitung findest du im Beispiel zum Zuschneiden von Objekten.

Warum sollte ich Ultralytics YOLOv8 für das Zuschneiden von Objekten verwenden und nicht andere Lösungen?

Ultralytics YOLOv8 zeichnet sich durch seine Präzision, Geschwindigkeit und Benutzerfreundlichkeit aus. Sie ermöglicht eine detaillierte und genaue Objekterkennung und -beschneidung, was für gezielte Analysen und Anwendungen, die eine hohe Datenintegrität erfordern, unerlässlich ist. Außerdem lässt sich YOLOv8 nahtlos in Tools wie OpenVINO und TensorRT integrieren, wenn Echtzeitfunktionen und Optimierung auf unterschiedlicher Hardware erforderlich sind. Erfahre mehr über die Vorteile im Leitfaden zum Modellexport.

Wie kann ich das Datenvolumen meines Datensatzes mithilfe von Objektbeschneidung reduzieren?

Wenn du Ultralytics YOLOv8 verwendest, um nur relevante Objekte aus deinen Bildern oder Videos auszuschneiden, kannst du die Datengröße erheblich reduzieren und sie so effizienter speichern und verarbeiten. Dabei wird das Modell darauf trainiert, bestimmte Objekte zu erkennen, und die Ergebnisse werden dann genutzt, um nur diese Teile auszuschneiden und zu speichern. Weitere Informationen zur Nutzung der Funktionen von Ultralytics YOLOv8 findest du in unserer Schnellstartanleitung.

Kann ich Ultralytics YOLOv8 für die Echtzeit-Videoanalyse und das Zuschneiden von Objekten verwenden?

Ja, Ultralytics YOLOv8 kann Echtzeit-Videobilder verarbeiten, um Objekte dynamisch zu erkennen und zuzuschneiden. Die Hochgeschwindigkeits-Inferenzfähigkeiten des Modells machen es ideal für Echtzeitanwendungen wie Überwachung, Sportanalyse und automatische Inspektionssysteme. Schau dir die Modi für Verfolgung und Vorhersage an, um zu verstehen, wie du die Echtzeitverarbeitung implementieren kannst.

Was sind die Hardwareanforderungen, um YOLOv8 für das Zuschneiden von Objekten effizient zu nutzen?

Ultralytics YOLOv8 ist sowohl für CPU als auch für GPU Umgebungen optimiert. Um jedoch eine optimale Leistung zu erzielen, insbesondere für Echtzeit- oder Masseninferenzen, wird ein spezielles GPU (z. B. NVIDIA Tesla, RTX-Serie) empfohlen. Für den Einsatz auf leichtgewichtigen Geräten solltest du CoreML für iOS oder TFLite für Android verwenden. Weitere Einzelheiten zu den unterstützten Geräten und Formaten findest du in unseren Optionen für die Modellbereitstellung.



Erstellt 2024-01-09, Aktualisiert 2024-07-05
Autoren: glenn-jocher (8), RizwanMunawar (2), IvorZhu331 (1), AyushExel (1)

Kommentare