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