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.

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

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

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

Name Typ Standard Beschreibung
source str 'ultralytics/assets' Quellverzeichnis fĂŒr Bilder oder Videos
conf float 0.25 Objektkonfidenzschwelle fĂŒr die Erkennung
iou float 0.7 intersection over union (IoU) Schwelle fĂŒr NMS
imgsz int or tuple 640 BildgrĂ¶ĂŸe als Skalar oder (h, w) Liste, z.B. (640, 480)
half bool False halbe Genauigkeit verwenden (FP16)
device None or str None GerÀt, auf dem es laufen soll, d.h. cuda device=0/1/2/3 oder device=cpu
max_det int 300 maximale Anzahl von Erkennungen pro Bild
vid_stride bool False Video-Frame-Rate-Schritt
stream_buffer bool False alle Streaming-Frames puffern (True) oder den letzten Frame zurĂŒckgeben (False)
visualize bool False Modelleigenschaften visualisieren
augment bool False BildvergrĂ¶ĂŸerung auf Vorhersagequellen anwenden
agnostic_nms bool False klassenunabhÀngige NMS
classes list[int] None Ergebnisse nach Klassen filtern, d.h. classes=0, oder classes=[0,2,3]
retina_masks bool False hochauflösende Segmentierungsmasken verwenden
embed list[int] None Feature-Vektoren/Embeddings aus den gegebenen Schichten zurĂŒckgeben


Erstellt am 2024-01-09, Aktualisiert am 2024-01-29
Autoren: chr043416@gmail.com (2), glenn-jocher (1), AyushExel (1)

Kommentare