Skip to content

Recadrage d'objets à l'aide de Ultralytics YOLOv8 🚀

Qu'est-ce que le recadrage d'objets ?

Le recadrage d'objets avec Ultralytics YOLOv8 consiste à isoler et à extraire d'une image ou d'une vidéo des objets spécifiques détectés. Les capacités du modèle YOLOv8 sont utilisées pour identifier et délimiter avec précision les objets, ce qui permet un recadrage précis en vue d'une analyse ou d'une manipulation plus poussée.

Avantages du recadrage d'objets ?

  • Analyse ciblĂ©e: YOLOv8 facilite le recadrage d'objets ciblĂ©s, ce qui permet d'examiner ou de traiter en profondeur des Ă©lĂ©ments individuels dans une scène.
  • Volume de donnĂ©es rĂ©duit: En n'extrayant que les objets pertinents, le recadrage des objets permet de minimiser la taille des donnĂ©es, ce qui les rend efficaces pour le stockage, la transmission ou les tâches de calcul ultĂ©rieures.
  • PrĂ©cision accrue: la prĂ©cision de dĂ©tection des objets de YOLOv8'assure que les objets recadrĂ©s conservent leurs relations spatiales, prĂ©servant ainsi l'intĂ©gritĂ© des informations visuelles pour une analyse dĂ©taillĂ©e.

Visuels

Bagages d'aéroport
Tapis roulant à l'aéroport Valises en cours d'utilisation Ultralytics YOLOv8
Valises Cropping at airport conveyor belt using Ultralytics YOLOv8

Recadrage d'objets Ă  l'aide de YOLOv8 Exemple

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

Arguments model.predict

Nom Type DĂ©faut Description
source str 'ultralytics/assets' répertoire source pour les images ou les vidéos
conf float 0.25 seuil de confiance de l'objet pour la détection
iou float 0.7 seuil d'intersection sur l'union (IoU) pour NMS
imgsz int or tuple 640 taille de l'image sous forme de scalaire ou de liste (h, w), c'est-Ă -dire (640, 480)
half bool False utiliser la demi-précision (FP16)
device None or str None périphérique à utiliser, c'est-à-dire cuda device=0/1/2/3 ou device=cpu
max_det int 300 nombre maximum de détections par image
vid_stride bool False taux d'images vidéo stride
stream_buffer bool False mettre en mémoire tampon toutes les images de streaming (True) ou renvoyer l'image la plus récente (False)
visualize bool False visualise les caractéristiques du modèle
augment bool False applique l'augmentation d'image aux sources de prédiction
agnostic_nms bool False NMS agnostique
classes list[int] None filtre les résultats par classe, c'est-à-dire classes=0, ou classes=[0,2,3]
retina_masks bool False utiliser des masques de segmentation à haute résolution
embed list[int] None renvoie les vecteurs de caractéristiques/embeddings des couches données


Créé le 2024-01-09, Mis à jour le 2024-03-03
Auteurs : glenn-jocher (2), RizwanMunawar (2), AyushExel (1)

Commentaires