Vai al contenuto

Ritaglio di oggetti utilizzando Ultralytics YOLOv8 🚀

Che cos'è il ritaglio degli oggetti?

Il ritaglio degli oggetti con Ultralytics YOLOv8 consiste nell'isolare ed estrarre specifici oggetti rilevati da un'immagine o da un video. Le funzionalità del modello YOLOv8 vengono utilizzate per identificare e delineare con precisione gli oggetti, consentendo un ritaglio preciso per ulteriori analisi o manipolazioni.



Guarda: Object Cropping using Ultralytics YOLOv8

Vantaggi del ritaglio degli oggetti?

  • Analisi focalizzata: YOLOv8 facilita il ritaglio mirato degli oggetti, consentendo un esame o un'elaborazione approfondita di singoli elementi all'interno di una scena.
  • Riduzione del volume dei dati: Estraendo solo gli oggetti rilevanti, il ritaglio degli oggetti aiuta a ridurre al minimo le dimensioni dei dati, rendendoli efficienti per l'archiviazione, la trasmissione o le successive attività di calcolo.
  • Maggiore precisione: l'accuratezza del rilevamento degli oggetti di YOLOv8 garantisce che gli oggetti ritagliati mantengano le loro relazioni spaziali, preservando l'integrità delle informazioni visive per un'analisi dettagliata.

Immagini

Bagagli per l'aeroporto
Nastro trasportatore dell'aeroporto Valigie che si stavano formando utilizzando Ultralytics YOLOv8
Ritaglio di valigie al nastro trasportatore dell'aeroporto con l'uso di Ultralytics YOLOv8

Ritaglio di oggetti con YOLOv8 Esempio

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

Argomenti model.predict

Argomento Tipo Predefinito Descrizione
source str 'ultralytics/assets' Specifica la fonte dei dati per l'inferenza. Può essere un percorso di immagine, un file video, una directory, un URL o un ID di dispositivo per i feed live. Supporta un'ampia gamma di formati e fonti, consentendo un'applicazione flessibile a diversi tipi di input.
conf float 0.25 Imposta la soglia minima di confidenza per i rilevamenti. Gli oggetti rilevati con una confidenza inferiore a questa soglia saranno ignorati. La regolazione di questo valore può aiutare a ridurre i falsi positivi.
iou float 0.7 Soglia di Intersection Over Union (IoU) per la soppressione non massima (NMS). Valori più bassi comportano un minor numero di rilevamenti eliminando le caselle sovrapposte, utili per ridurre i duplicati.
imgsz int or tuple 640 Definisce la dimensione dell'immagine per l'inferenza. Può essere un singolo numero intero 640 per il ridimensionamento quadrato o una tupla (altezza, larghezza). Un dimensionamento corretto può migliorare l'accuratezza del rilevamento e la velocità di elaborazione.
half bool False Abilita l'inferenza a mezza precisione (FP16), che può accelerare l'inferenza del modello sulle GPU supportate con un impatto minimo sulla precisione.
device str None Specifica il dispositivo per l'inferenza (es, cpu, cuda:0 o 0). Permette agli utenti di selezionare una CPU, una GPU specifica o altri dispositivi di calcolo per l'esecuzione dei modelli.
max_det int 300 Numero massimo di rilevamenti consentiti per immagine. Limita il numero totale di oggetti che il modello può rilevare in una singola inferenza, prevenendo un numero eccessivo di risultati in scene dense.
vid_stride int 1 Frame stride per gli ingressi video. Consente di saltare i fotogrammi nei video per velocizzare l'elaborazione a scapito della risoluzione temporale. Un valore di 1 elabora ogni fotogramma, valori più alti saltano i fotogrammi.
stream_buffer bool False Determina se tutti i fotogrammi devono essere bufferizzati quando si elaborano i flussi video (True), oppure se il modello deve restituire il fotogramma più recente (False). Utile per le applicazioni in tempo reale.
visualize bool False Attiva la visualizzazione delle caratteristiche del modello durante l'inferenza, fornendo informazioni su ciò che il modello "vede". Utile per il debug e l'interpretazione del modello.
augment bool False Abilita l'aumento del tempo di test (TTA) per le previsioni, migliorando potenzialmente la robustezza del rilevamento al costo della velocità di inferenza.
agnostic_nms bool False Abilita la soppressione non massimale (NMS), che unisce le caselle sovrapposte di classi diverse. Utile negli scenari di rilevamento multiclasse in cui la sovrapposizione di classi è comune.
classes list[int] None Filtra le previsioni in base a un insieme di ID di classe. Verranno restituiti solo i rilevamenti appartenenti alle classi specificate. Utile per concentrarsi sugli oggetti rilevanti in attività di rilevamento multiclasse.
retina_masks bool False Utilizza maschere di segmentazione ad alta risoluzione se disponibili nel modello. Questo può migliorare la qualità delle maschere per le attività di segmentazione, fornendo dettagli più precisi.
embed list[int] None Specifica i livelli da cui estrarre i vettori di caratteristiche o gli embeddings. Utile per attività a valle come il clustering o la ricerca di somiglianze.


Created 2024-01-09, Updated 2024-06-13
Authors: RizwanMunawar (2), glenn-jocher (7), IvorZhu331 (1), AyushExel (1)

Commenti