Overslaan naar inhoud

Object 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.



Kijken: Object bijsnijden met Ultralytics YOLOv8

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

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

Argumenten model.predict

Argument Type Standaard Beschrijving
source str 'ultralytics/assets' Specificeert de gegevensbron voor inferentie. Kan een afbeeldingspad, videobestand, map, URL of apparaat-ID voor live feeds zijn. Ondersteunt een breed scala aan formaten en bronnen, zodat het flexibel kan worden toegepast op verschillende soorten invoer.
conf float 0.25 Stelt de minimale betrouwbaarheidsdrempel voor detecties in. Objecten die worden gedetecteerd met een betrouwbaarheid onder deze drempel worden genegeerd. Het aanpassen van deze waarde kan helpen bij het verminderen van vals-positieven.
iou float 0.7 Intersection Over Union (IoU) drempelwaarde voor niet-maximale onderdrukking (NMS). Lagere waarden resulteren in minder detecties door overlappende vakjes te elimineren, handig om duplicaten te verminderen.
imgsz int or tuple 640 Definieert de afbeeldingsgrootte voor inferentie. Kan een geheel getal zijn 640 voor vierkant formaat of een (hoogte, breedte) tupel. De juiste grootte kan de detectienauwkeurigheid en verwerkingssnelheid verbeteren.
half bool False Maakt inferentie met halve precisie (FP16) mogelijk, wat modelinferentie op ondersteunde GPU's kan versnellen met minimale invloed op nauwkeurigheid.
device str None Specificeert het apparaat voor inferentie (bijv, cpu, cuda:0 of 0). Hiermee kunnen gebruikers kiezen tussen CPU, een specifieke GPU of andere rekenapparaten voor het uitvoeren van modellen.
max_det int 300 Maximum aantal toegestane detecties per afbeelding. Beperkt het totale aantal objecten dat het model kan detecteren in een enkele inferentie, waardoor buitensporige uitvoer in dichte scènes wordt voorkomen.
vid_stride int 1 Frame stride voor video-ingangen. Hiermee kunnen frames in video's worden overgeslagen om de verwerking te versnellen ten koste van de temporele resolutie. Een waarde van 1 verwerkt elk frame, hogere waarden slaan frames over.
stream_buffer bool False Bepaalt of alle frames gebufferd moeten worden bij het verwerken van videostreams (True), of als het model het meest recente frame moet teruggeven (False). Nuttig voor real-time toepassingen.
visualize bool False Activeert visualisatie van modeleigenschappen tijdens inferentie, waardoor inzicht wordt verkregen in wat het model "ziet". Nuttig voor foutopsporing en modelinterpretatie.
augment bool False Maakt testtijdvergroting (TTA) mogelijk voor voorspellingen, waardoor de robuustheid van detectie mogelijk verbetert ten koste van de inferentiesnelheid.
agnostic_nms bool False Maakt klasse-agnostische Non-Maximum Suppression (NMS) mogelijk, die overlappende vakken van verschillende klassen samenvoegt. Nuttig in detectiescenario's met meerdere klassen waar overlappende klassen vaak voorkomen.
classes list[int] None Filtert voorspellingen op een set klasse-ID's. Alleen detecties die behoren tot de opgegeven klassen worden geretourneerd. Nuttig om te focussen op relevante objecten in detectietaken met meerdere klassen.
retina_masks bool False Gebruikt hoge-resolutie segmentatiemaskers indien beschikbaar in het model. Dit kan de maskerkwaliteit voor segmentatietaken verbeteren, waardoor fijnere details worden verkregen.
embed list[int] None Specificeert de lagen waaruit kenmerkvectoren of inbeddingen moeten worden geëxtraheerd. Nuttig voor downstream taken zoals clusteren of zoeken naar overeenkomsten.

FAQ

Wat is object bijsnijden in Ultralytics YOLOv8 en hoe werkt het?

Objecten bijsnijden met behulp van Ultralytics YOLOv8 worden specifieke objecten geïsoleerd en uit een afbeelding of video gehaald op basis van de detectiemogelijkheden van YOLOv8. Dit proces zorgt voor een gerichte analyse, een kleiner datavolume en meer precisie door gebruik te maken van YOLOv8 om objecten met hoge nauwkeurigheid te identificeren en ze dienovereenkomstig bij te snijden. Raadpleeg voor een uitgebreide tutorial het voorbeeld van het bijsnijden van objecten.

Waarom zou ik Ultralytics YOLOv8 gebruiken voor het bijsnijden van objecten in plaats van andere oplossingen?

Ultralytics YOLOv8 valt op door zijn precisie, snelheid en gebruiksgemak. Het maakt gedetailleerde en nauwkeurige objectdetectie en bijsnijden mogelijk, wat essentieel is voor gerichte analyse en toepassingen die een hoge gegevensintegriteit vereisen. Bovendien integreert YOLOv8 naadloos met tools als OpenVINO en TensorRT voor implementaties die real-time mogelijkheden en optimalisatie vereisen op diverse hardware. Ontdek de voordelen in de gids over modelexport.

Hoe kan ik het datavolume van mijn dataset verkleinen door objecten bij te snijden?

Door Ultralytics YOLOv8 te gebruiken om alleen relevante objecten uit je afbeeldingen of video's bij te snijden, kun je de gegevens aanzienlijk verkleinen, waardoor ze efficiënter kunnen worden opgeslagen en verwerkt. Dit proces omvat het trainen van het model om specifieke objecten te detecteren en vervolgens de resultaten te gebruiken om alleen deze delen bij te snijden en op te slaan. Ga voor meer informatie over het benutten van de mogelijkheden van Ultralytics YOLOv8 naar onze snelstartgids.

Kan ik Ultralytics YOLOv8 gebruiken voor real-time videoanalyse en het bijsnijden van objecten?

Ja, Ultralytics YOLOv8 kan real-time videofeeds verwerken om objecten dynamisch te detecteren en bij te snijden. De snelle inferentiemogelijkheden van het model maken het ideaal voor real-time toepassingen zoals surveillance, sportanalyse en geautomatiseerde inspectiesystemen. Bekijk de tracking en prediction modi om te begrijpen hoe je real-time verwerking kunt implementeren.

Wat zijn de hardwarevereisten voor het efficiënt uitvoeren van YOLOv8 voor het bijsnijden van objecten?

Ultralytics YOLOv8 is optimized for both CPU and GPU environments, but to achieve optimal performance, especially for real-time or high-volume inference, a dedicated GPU (e.g., NVIDIA Tesla, RTX series) is recommended. For deployment on lightweight devices, consider using CoreML for iOS or TFLite for Android. More details on supported devices and formats can be found in our model deployment options.



Aangemaakt 2024-01-09, Bijgewerkt 2024-07-05
Auteurs: glenn-jocher (8), RizwanMunawar (2), IvorZhu331 (1), AyushExel (1)

Reacties