اقتصاص الكائن باستخدام Ultralytics YOLOv8 🚀
ما هو اقتصاص الكائن؟
اقتصاص الكائن باستخدام Ultralytics YOLOv8 يتضمن عزل واستخراج كائنات محددة تم اكتشافها من صورة أو مقطع فيديو. ال YOLOv8 يتم استخدام إمكانات النموذج لتحديد الكائنات وتحديدها بدقة ، مما يتيح الاقتصاص الدقيق لمزيد من التحليل أو المعالجة.
مزايا اقتصاص الكائن؟
- التحليل المركز: YOLOv8 يسهل اقتصاص الكائنات المستهدفة ، مما يسمح بالفحص المتعمق أو معالجة العناصر الفردية داخل المشهد.
- انخفاض حجم البيانات: من خلال استخراج الكائنات ذات الصلة فقط ، يساعد اقتصاص الكائنات في تقليل حجم البيانات ، مما يجعلها فعالة للتخزين أو الإرسال أو المهام الحسابية اللاحقة.
- دقة محسنة: YOLOv8، تضمن دقة الكشف عن الكائنات أن تحافظ الكائنات التي تم اقتصاصها على علاقاتها المكانية ، مع الحفاظ على سلامة المعلومات المرئية للتحليل التفصيلي.
صور
أمتعة المطار |
---|
حقائب الاقتصاص في الحزام الناقل المطار باستخدام Ultralytics YOLOv8 |
اقتصاص الكائن باستخدام YOLOv8 مثل
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()
الحجج model.predict
اسم | نوع | افتراضي | وصف |
---|---|---|---|
source |
str |
'ultralytics/assets' |
الدليل المصدر للصور أو مقاطع الفيديو |
conf |
float |
0.25 |
عتبة ثقة الكائن للكشف |
iou |
float |
0.7 |
التقاطع على عتبة الاتحاد (IoU) ل NMS |
imgsz |
int or tuple |
640 |
حجم الصورة كعدد قياسي أو قائمة (H ، W) ، أي (640 ، 480) |
half |
bool |
False |
استخدام نصف الدقة (FP16) |
device |
None or str |
None |
جهاز للتشغيل ، أي جهاز cuda = 0/1/2/3 أو الجهاز = وحدة المعالجة المركزية |
max_det |
int |
300 |
الحد الأقصى لعدد الاكتشافات لكل صورة |
vid_stride |
bool |
False |
خطوة معدل إطارات الفيديو |
stream_buffer |
bool |
False |
التخزين المؤقت لجميع إطارات البث (صواب) أو إرجاع أحدث إطار (خطأ) |
visualize |
bool |
False |
تصور ميزات النموذج |
augment |
bool |
False |
تطبيق تكبير الصورة على مصادر التنبؤ |
agnostic_nms |
bool |
False |
NMS اللاأدري الطبقي |
classes |
list[int] |
None |
تصفية النتائج حسب الفئة ، أي الفئات = 0 ، أو الفئات = [0،2،3] |
retina_masks |
bool |
False |
استخدام أقنعة تجزئة عالية الدقة |
embed |
list[int] |
None |
إرجاع متجهات / تضمينات المعالم من طبقات معينة |