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: Ritaglio di oggetti utilizzando 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 scegliere tra CPU, uno specifico GPU o altri dispositivi di calcolo per l'esecuzione del modello.
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.

DOMANDE FREQUENTI

Cos'è il ritaglio degli oggetti in Ultralytics YOLOv8 e come funziona?

Il ritaglio di oggetti utilizzando Ultralytics YOLOv8 consiste nell'isolare ed estrarre oggetti specifici da un'immagine o un video in base alle capacità di rilevamento di YOLOv8. Questo processo consente un'analisi mirata, una riduzione del volume di dati e una maggiore precisione, sfruttando YOLOv8 per identificare gli oggetti con grande precisione e ritagliarli di conseguenza. Per un tutorial approfondito, consulta l'esempio di ritaglio degli oggetti.

Perché dovrei utilizzare Ultralytics YOLOv8 per il ritaglio degli oggetti rispetto ad altre soluzioni?

Ultralytics YOLOv8 si distingue per la sua precisione, velocità e facilità d'uso. Permette il rilevamento e il ritaglio dettagliato e accurato degli oggetti, essenziale per le analisi mirate e per le applicazioni che richiedono un'elevata integrità dei dati. Inoltre, YOLOv8 si integra perfettamente con strumenti come OpenVINO e TensorRT per le implementazioni che richiedono funzionalità in tempo reale e ottimizzazione su hardware diversi. Scopri i vantaggi nella guida sull'esportazione dei modelli.

Come posso ridurre il volume dei dati del mio set di dati utilizzando il ritaglio degli oggetti?

Utilizzando Ultralytics YOLOv8 per ritagliare solo gli oggetti rilevanti dalle tue immagini o dai tuoi video, puoi ridurre significativamente le dimensioni dei dati, rendendoli più efficienti per l'archiviazione e l'elaborazione. Questo processo prevede l'addestramento del modello per rilevare oggetti specifici e poi l'utilizzo dei risultati per ritagliare e salvare solo queste porzioni. Per maggiori informazioni su come sfruttare le funzionalità di Ultralytics YOLOv8 , visita la nostra guida rapida.

Posso utilizzare Ultralytics YOLOv8 per l'analisi video in tempo reale e il ritaglio di oggetti?

Sì, Ultralytics YOLOv8 è in grado di elaborare feed video in tempo reale per rilevare e ritagliare oggetti in modo dinamico. Le capacità di inferenza ad alta velocità del modello lo rendono ideale per applicazioni in tempo reale come la sorveglianza, l'analisi sportiva e i sistemi di ispezione automatizzati. Scopri le modalità di tracciamento e previsione per capire come implementare l'elaborazione in tempo reale.

Quali sono i requisiti hardware per eseguire in modo efficiente YOLOv8 per il ritaglio degli oggetti?

Ultralytics YOLOv8 è ottimizzato sia per gli ambienti CPU che per quelli GPU , ma per ottenere prestazioni ottimali, soprattutto per l'inferenza in tempo reale o per volumi elevati, si raccomanda l'uso di un GPU dedicato (ad esempio, NVIDIA Tesla, serie RTX). Per l'implementazione su dispositivi leggeri, si consiglia di utilizzare CoreML per iOS o TFLite per Android. Maggiori dettagli sui dispositivi e sui formati supportati sono disponibili nelle nostre opzioni di distribuzione dei modelli.



Creato 2024-01-09, Aggiornato 2024-07-05
Autori: glenn-jocher (8), RizwanMunawar (2), IvorZhu331 (1), AyushExel (1)

Commenti