İçeriğe geç

Ultralytics YOLOv8 kullanarak Nesne Kırpma 🚀

Nesne Kırpma Nedir?

Nesne kırpma ile Ultralytics YOLOv8 bir görüntü veya videodan algılanan belirli nesnelerin izole edilmesini ve çıkarılmasını içerir. Nesneleri doğru bir şekilde tanımlamak ve tasvir etmek için YOLOv8 model yetenekleri kullanılır ve daha fazla analiz veya manipülasyon için hassas kırpmaya olanak tanır.

Nesne Kırpmanın Avantajları?

  • Odaklanmış Analiz: YOLOv8 , hedeflenen nesne kırpmayı kolaylaştırarak bir sahnedeki tek tek öğelerin derinlemesine incelenmesine veya işlenmesine olanak tanır.
  • Azaltılmış Veri Hacmi: Nesne kırpma, yalnızca ilgili nesneleri çıkararak veri boyutunu en aza indirmeye yardımcı olur ve depolama, iletim veya sonraki hesaplama görevleri için verimli hale getirir.
  • Geliştirilmiş Hassasiyet: YOLOv8'un nesne algılama hassasiyeti, kırpılan nesnelerin uzamsal ilişkilerini korumasını sağlayarak ayrıntılı analiz için görsel bilgilerin bütünlüğünü korur.

Görseller

Havaalanı Bagajı
Havaalanındaki Konveyör Bantta Bavullar Kullanılarak Kırpılıyor Ultralytics YOLOv8
Havaalanı konveyör bandında bavulların kırpılması Ultralytics YOLOv8

YOLOv8 kullanarak Nesne Kırpma Örnek

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

Argümanlar model.predict

İsim Tip Varsayılan Açıklama
source str 'ultralytics/assets' resimler veya videolar için kaynak dizin
conf float 0.25 algılama için nesne güven eşiği
iou float 0.7 NMS için birleşim üzerinde kesişim (IoU) eşiği
imgsz int or tuple 640 skaler veya (h, w) listesi olarak görüntü boyutu, yani (640, 480)
half bool False yarım hassasiyet (FP16) kullanın
device None or str None üzerinde çalışılacak cihaz, yani cuda device=0/1/2/3 veya device=cpu
max_det int 300 görüntü başına maksimum algılama sayısı
vid_stride bool False video kare hızı adımı
stream_buffer bool False tüm akış karelerini arabelleğe alır (True) veya en son kareyi döndürür (False)
visualize bool False model özelliklerini görselleştirin
augment bool False tahmin kaynaklarına görüntü büyütme uygulayın
agnostic_nms bool False sınıf-agnostik NMS
classes list[int] None sonuçları sınıfa göre filtreleyin, yani classes=0 veya classes=[0,2,3]
retina_masks bool False yüksek çözünürlüklü segmentasyon maskeleri kullanın
embed list[int] None Verilen katmanlardan özellik vektörleri/gömme döndürür


Oluşturuldu 2024-01-09, Güncellendi 2024-03-03
Yazarlar: glenn-jocher (2), RizwanMunawar (2), AyushExel (1)

Yorumlar