Overslaan naar inhoud

Objecten bijsnijden met Ultralytics YOLOv8 🚀

Wat is object bijsnijden?

Objecten bijsnijden met Ultralytics YOLOv8 Het isoleren en extraheren van specifieke gedetecteerde objecten uit een afbeelding of video. De mogelijkheden van het YOLOv8 model worden gebruikt om objecten nauwkeurig te identificeren en af te bakenen, zodat ze nauwkeurig kunnen worden bijgesneden voor verdere analyse of manipulatie.

Voordelen van object bijsnijden?

  • Gerichte analyse: YOLOv8 vergemakkelijkt het gericht uitsnijden van objecten, waardoor afzonderlijke items in een scène diepgaand kunnen worden onderzocht of bewerkt.
  • Gereduceerd gegevensvolume: Door alleen relevante objecten te extraheren, helpt het bijsnijden van objecten bij het minimaliseren van de datagrootte, waardoor het efficiënt is voor opslag, verzending of volgende rekentaken.
  • Verbeterde precisie: YOLOv8's objectdetectie nauwkeurigheid zorgt ervoor dat de bijgesneden objecten hun ruimtelijke relaties behouden, waardoor de integriteit van de visuele informatie behouden blijft voor gedetailleerde analyse.

Beeldmateriaal

Luchthaven Bagage
Transportband op vliegveld Koffers knippen met behulp van Ultralytics YOLOv8
Koffers op de lopende band van luchthaven met behulp van Ultralytics YOLOv8

Object bijsnijden met YOLOv8 Voorbeeld

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

Argumenten model.predict

Naam Type Standaard Beschrijving
source str 'ultralytics/assets' bronmap voor afbeeldingen of video's
conf float 0.25 objectbetrouwbaarheidsdrempel voor detectie
iou float 0.7 intersectie over unie (IoU) drempel voor NMS
imgsz int or tuple 640 afbeeldingsgrootte als scalair of (h, w) lijst, bijv. (640, 480)
half bool False gebruik halve precisie (FP16)
device None or str None apparaat om op te draaien, bijvoorbeeld cuda device=0/1/2/3 of device=cpu
max_det int 300 maximum aantal detecties per afbeelding
vid_stride bool False video frame-rate stap
stream_buffer bool False buffer alle streaming frames (True) of retourneer het meest recente frame (False)
visualize bool False modeleigenschappen visualiseren
augment bool False beeldvergroting toepassen op voorspellingsbronnen
agnostic_nms bool False klassennagnostische NMS
classes list[int] None filter resultaten op klasse, d.w.z. classes=0, of classes=[0,2,3]
retina_masks bool False segmentatiemaskers met hoge resolutie gebruiken
embed list[int] None retourneer kenmerkvectoren/embeddingen van gegeven lagen


Gemaakt op 2024-01-09, Bijgewerkt op 2024-03-03
Auteurs: glenn-jocher (2), RizwanMunawar (2), AyushExel (1)

Reacties