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