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.

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'utilizzo di Ultralytics YOLOv8

Ritaglio di oggetti con YOLOv8 Esempio

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

Argomenti model.predict

Nome Tipo Predefinito Descrizione
source str 'ultralytics/assets' directory di origine per le immagini o i video
conf float 0.25 soglia di fiducia dell'oggetto per il rilevamento
iou float 0.7 soglia di intersezione su unione (IoU) per gli NMS
imgsz int or tuple 640 dimensione dell'immagine come scalare o come elenco (h, w), ad esempio (640, 480)
half bool False usa la mezza precisione (FP16)
device None or str None dispositivo su cui eseguire l'esecuzione, ad esempio cuda device=0/1/2/3 o device=cpu
max_det int 300 numero massimo di rilevamenti per immagine
vid_stride bool False passo della frequenza dei fotogrammi video
stream_buffer bool False bufferizza tutti i fotogrammi dello streaming (True) o restituisce il fotogramma più recente (False)
visualize bool False visualizzare le caratteristiche del modello
augment bool False applicare l'aumento dell'immagine alle fonti di predizione
agnostic_nms bool False NMS con compatibilità di classe
classes list[int] None filtrare i risultati per classe, ad esempio classi=0 o classi=[0,2,3].
retina_masks bool False utilizzare maschere di segmentazione ad alta risoluzione
embed list[int] None restituisce vettori di caratteristiche/embeddings da determinati livelli


Creato 2024-01-09, Aggiornato 2024-03-03
Autori: glenn-jocher (2), chr043416@gmail.com (2), AyushExel (1)

Commenti