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 |
---|
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-03-03
Autoren: glenn-jocher (2), RizwanMunawar (2), AyushExel (1)