Object Detection: ما هو، الخوارزميات وكيف يعمل

المؤلف: IT Sectr نُشر: 2026-07-19 وقت القراءة: 9 دق

Object Detection هي مهمة رؤية حاسوبية تحدد في وقت واحد فئة الكائن (قطة، سيارة، شخص) وموقعه في الصورة على شكل إطار مستطيل (bounding box). على عكس Image Labeling، يجد Object Detection كائنات متعددة من فئات مختلفة في إطار واحد ويشير إلى إحداثياتها. في تطوير تطبيقات الجوال، يُستخدم Object Detection في أنظمة المراقبة بالفيديو، تطبيقات الواقع المعزز، الطائرات بدون طيار، التصوير الطبي، وتحليلات التجزئة. وفقًا لـ Google ML Kit، 2025، يحقق Object Detection على الجهاز 30 إطارًا في الثانية على الأجهزة الرائدة بدقة 87% mAP.

الخلاصة

  • Object Detection — تصنيف + تحديد موقع الكائنات (bounding box)
  • ML Kit Object Detection — حتى 30 إطار/ثانية، 87% mAP، الفئات: fashion، food، home، places
  • YOLOv8-Nano — 2.6M معامل، 42% mAP COCO، زمن استجابة 10–30 مللي ثانية
  • SSD MobileNetV2 — 22% mAP COCO، 15–40 مللي ثانية، أقصى سرعة
  • On-device real-time — جميع العمليات الحسابية محليًا، دون إرسال الفيديو إلى الخادم

ما هو Object Detection: مبدأ العمل

Object Detection يحل مهمتين في وقت واحد: ما في الصورة (تصنيف) وأين (انحدار الإحداثيات). يقسم النموذج الصورة إلى شبكة، ويتنبأ بإطار bounding box (x، y، العرض، الارتفاع) واحتمالات الفئة لكل خلية. تزيل Non-Maximum Suppression (NMS) الإطارات المكررة لكائن واحد، مع الاحتفاظ بأكثر توقع ثقة. تنقسم البنى الحديثة إلى مرحلتين (Faster R-CNN — أولاً مقترحات المنطقة، ثم التصنيف) ومرحلة واحدة (YOLO، SSD — كل شيء مرة واحدة).

مقاييس التقييم: mAP (mean Average Precision) — المقياس الرئيسي لجودة Object Detection. mAP@0.5 — الدقة عند عتبة IoU 0.5، mAP@0.5:0.95 — المتوسط عبر العتبات من 0.5 إلى 0.95. FPS — الإطارات في الثانية (سرعة الاستدلال). لتطبيقات الجوال، التوازن بين mAP/FPS أمر بالغ الأهمية: YOLOv8-Nano يعطي 42% mAP@0.5:0.95 عند 50+ إطار/ثانية، SSD MobileNet — 22% mAP عند 60+ إطار/ثانية. للوقت الفعلي > 20 إطار/ثانية، للاستخدام التفاعلي 5–15 إطار/ثانية.

IoU (Intersection over Union) — مقياس التداخل بين bounding box المتوقع والحقيقي. IoU = مساحة التقاطع / مساحة الاتحاد. عتبة IoU لـ NMS عادة 0.5–0.7. لتتبع الكائنات بين الإطارات (إعادة التحديد)، استخدم Deep SORT أو ByteTrack مع مطابقة IoU. لحساب الكائنات في الفيديو، يوفر BoT-SORT 85% MOTA (دقة تتبع الكائنات المتعددة).

البنيةmAP@0.5:0.95زمن الاستجابةالمعاملاتالحجم
YOLOv8-Nano42%10–30 مللي ثانية2.6M5.9 MB
YOLOv8-Small50%25–60 مللي ثانية11.2M22 MB
SSD MobileNetV222%15–40 مللي ثانية5.2M21 MB
EfficientDet-Lite035%20–50 مللي ثانية3.9M15 MB

Anchor Boxes — أشكال bounding box محددة مسبقًا يقوم النموذج بتعديلها. يستخدم YOLOv8 الكشف بدون مرتكزات (anchor-free)، مما يبسط التدريب ويسرع الاستدلال. تتطلب SSD وYOLO القديمة ضبط المرتكزات لكل مجموعة بيانات. لتطوير تطبيقات الجوال، البنى anchor-free (YOLOv8، FCOS) هي الأفضل — لا تعتمد على حجم الكائنات وأسهل في التخصيص.

ML Kit Object Detection والتتبع

ML Kit Object Detection and Tracking — مكتبة Google للكشف عن الكائنات وتتبعها على الجهاز. تدعم وضعين: كاشف صورة واحدة (للصور) وكاشف دفق (للفيديو). يقوم وضع البث بتتبع الكائنات تلقائيًا بين الإطارات باستخدام التدفق البصري، مما يقلل زمن الاستجابة إلى 5–10 مللي ثانية بين الإطارات بعد الكشف الأولي. الفئات: fashion، food، home، places — 10–20 فئة لكل منها.

API ML Kit: ObjectDetector (خيارات: detectorMode، enableClassification، enableMultipleObjects) → InputImage → DetectedObject (trackingId، boundingBox، classificationCategory، classificationConfidence). يتيح trackingId تتبع نفس الكائن عبر الإطارات. MultipleObjects = true — يكتشف حتى 5 كائنات في الإطار. Classification — يشمل التعرف على فئة الكائن (افتراضيًا false للسرعة). يُوصى بوضع البث للوقت الفعلي: 20–30 إطار/ثانية على Pixel 6.

kotlin
val options = ObjectDetectorOptions.Builder()
    .setDetectorMode(ObjectDetectorOptions.STREAM_MODE)
    .enableClassification()
    .enableMultipleObjects()
    .build()

val detector = ObjectDetection.getClient(options)

detector.process(inputImage)
    .addOnSuccessListener { objects ->
        objects.forEach { obj ->
            val box = obj.boundingBox
            val trackingId = obj.trackingId
            val category = obj.classificationCategory()
            drawBoundingBox(box, trackingId, category)
        }
    }

Object Tracking: بعد اكتشاف كائن في الإطار الأول، يتتبعه ML Kit عبر تدفق الفيديو دون إعادة اكتشاف (بناءً على التدفق البصري + تتبع الميزات). هذا يقلل حمل CPU/GPU: الكشف الأولي 30–60 مللي ثانية، إطارات التتبع اللاحقة 2–5 مللي ثانية. إذا غادر الكائن الإطار أو استدار > 30°، يتم إعادة تعيين المتتبع ويتطلب إعادة اكتشاف. يبقى TrackingId طالما أن الكائن في الإطار. لحساب الكائنات الفريدة، استخدم trackingId كمعرف.

YOLO: You Only Look Once على الأجهزة المحمولة

YOLOv8-Nano — أصغر إصدار من YOLOv8 (Ultralytics) للأجهزة الطرفية. 2.6M معامل، 5.9 MB (FP16)، 42% mAP@0.5:0.95 على COCO. يستخدم YOLOv8 كشف anchor-free + backbone C2f + TaskAlignedAssigner لمطابقة التوقعات. لتطوير تطبيقات الجوال، التصدير متاح إلى TFLite (INT8 — 2.0 MB، زمن استجابة 8–20 مللي ثانية) وCore ML (4.5 MB، زمن استجابة 5–15 مللي ثانية على iPhone 15 Pro). YOLOv8-Nano هو الخيار الأفضل لـ Object Detection في الوقت الفعلي على الجهاز.

تصدير YOLOv8 إلى TFLite: توفر Ultralytics CLI: yolo export model=yolov8n.pt format=tflite int8. الناتج هو نموذج TFLite INT8 محسّن لـ GPU Delegate عبر NNAPI. لمجموعات البيانات المخصصة (الفئات الخاصة بك، وليس COCO) — تدريب عبر Ultralytics HUB على 50–500 صورة لكل فئة. RT-DETR (Real-Time Detection Transformer) — بديل يعتمد على بنية Transformer، 48% mAP عند 60 إطار/ثانية على NVIDIA Jetson، لكنه لا يزال متخلفًا عن YOLOv8-Nano في السرعة على الأجهزة المحمولة.

python
# YOLOv8 export to TFLite
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(format="tflite", int8=True, imgsz=320)

# Inference with TFLite on Android
val interpreter = Interpreter(loadFile("yolov8n_int8.tflite"))
val output = Array(1) { Array(8400) { FloatArray(6) } }
interpreter.run(inputBuffer, output)

YOLO vs ML Kit على الأجهزة المحمولة: ML Kit Object Detection أسهل في التكامل (10 أسطر من الكود)، لا يتطلب خبرة في التعلم الآلي، لكنه محدود بالفئات القياسية (fashion، food، home، places). يتطلب YOLOv8-Nano تصديرًا مخصصًا لكنه يوفر تحكمًا كاملاً: أي فئات، حجم إدخال، بنية. للنمذجة السريعة — ML Kit. للإنتاج مع كائنات غير قياسية — YOLOv8-Nano. لنظام iOS: YOLOv8-Core ML عبر تصدير النموذج من Ultralytics + VNCoreMLRequest.

SSD والبنى الأخرى على الجهاز

SSD (Single Shot Multibox Detector) — بنية one-stage كلاسيكية للأجهزة المحمولة. SSD MobileNetV2 — المعيار الفعلي في 2020–2023: 22% mAP@0.5:0.95 على COCO، 15–40 مللي ثانية على Pixel 6. يستخدم SSD هرم الميزات (طبقات MobileNet مختلفة لاكتشاف كائنات بأحجام مختلفة) وصناديق افتراضية (anchor boxes) لكل خلية من خريطة الميزات. الإيجابيات: أقصى سرعة لعصره. السلبيات: دقة منخفضة على الكائنات الصغيرة (10–30 بكسل).

EfficientDet-Lite — عائلة من Google (2020+)، محسّنة لـ TFLite. EfficientDet-Lite0: 3.9M معامل، 35% mAP، 20–50 مللي ثانية. EfficientDet-Lite2: 8.1M، 42% mAP، 40–80 مللي ثانية. يستخدم EfficientDet BiFPN (Bidirectional Feature Pyramid Network) لدمج الميزات متعددة المقاييس — وهذا يعطي زيادة 2–4% mAP دون زيادة زمن الاستجابة. لتطوير تطبيقات الجوال، توصي Google بـ EfficientDet-Lite ككاشف رئيسي لـ TFLite Task Vision.

MediaPipe Object Detector — تطبيق جاهز يعتمد على EfficientDet-Lite كجزء من MediaPipe Tasks Vision. يوفر API موحد لنظام Android وiOS وPython والويب. يدعم MediaPipe Object Detector فئات COCO (80 فئة)، والنماذج المخصصة، ووضع البث، ومفوضي CPU/GPU. للتكامل السريع لـ Object Detection في مشروع عبر المنصات، MediaPipe هو الخيار الأمثل: كود واحد لجميع المنصات.

kotlin
// MediaPipe Object Detection
val options = ObjectDetectorOptions.Builder()
    .setBaseOptions(BaseOptions.builder()
        .setDelegate(BaseOptions.Delegate.GPU)
        .build())
    .setMaxResults(5)
    .setScoreThreshold(0.5f)
    .build()

val detector = ObjectDetector.createFromOptions(context, options)

val image = MPImage.fromBitmap(bitmap)
val result = detector.detect(image)
result.detections.forEach { detection ->
    val box = detection.boundingBox
    val category = detection.categories.first()
}

اختيار بنية لتطبيق جوال: لـ > 30 إطار/ثانية على الأجهزة المتوسطة — YOLOv8-Nano (INT8) أو SSD MobileNetV2. لدقة > 40% mAP — YOLOv8-Small (11.2M) أو EfficientDet-Lite2 (8.1M). للتعدد المنصات — MediaPipe Object Detector. للبساطة — ML Kit. لنظام iOS-first — Core ML + YOLOv8 .mlpackage. لنظام Android-first — TFLite Task Vision (ObjectDetector API). التدريب: Roboflow (مجموعة بيانات) + Ultralytics YOLOv8 (تدريب) + تصدير إلى TFLite/Core ML.

TensorFlow Lite Task Vision API

TFLite Task Vision ObjectDetector — API موحد من Google لتشغيل نماذج Object Detection على Android وiOS. يقوم Task API تلقائيًا بمعالجة ما قبل الصورة (التحجيم، التطبيع، تحويل مساحة الألوان) وما بعد المعالجة (NMS، تحديد العتبات). يحتاج المطور فقط إلى تمرير نموذج .tflite واستلام قائمة من Detections مع bounding box + الفئة + النتيجة. يدعم Task API النماذج المتوافقة مع COCO (80 فئة).

تحويل نموذج مخصص إلى Task API: يجب أن يكون لنموذج TFLite إدخال [1، height، width، 3] (float32/uint8) وإخراج: detection_boxes[1,N,4]، detection_classes[1,N]، detection_scores[1,N]، num_detections[1]. التصدير من TensorFlow Object Detection API مع تضمين عمليات ما بعد المعالجة (SSD Postprocess). لـ YOLOv8 — تصدير TFLite مع NMS عبر ops-compat. يستخدم Task API على iOS Core ML Delegate للتسريع على ANE.

kotlin
// TFLite Task Vision Object Detector
val options = ObjectDetectorOptions.Builder()
    .setScoreThreshold(0.5f)
    .setMaxResults(10)
    .setDelegate(Delegate.GPU)
    .build()

val detector = ObjectDetector.createFromFileAndOptions(
    context, "custom_model.tflite", options
)

val image = TensorImage.fromBitmap(bitmap)
val results = detector.detect(image)
results.forEach { detection ->
    onObjectDetected(
        detection.boundingBox,
        detection.categories.first().label,
        detection.categories.first().score
    )
}

أداء Task API: GPU Delegate على Android يعطي تسريع 3–5x مقارنة بـ CPU (XNNPACK). NNAPI Delegate — 1.5–2x إضافية على الأجهزة المزودة بـ NPU (Pixel 8، Snapdragon 8 Gen 3، Dimensity 9300). Hexagon، DSP — حتى 10x على مسرعات DSP. لنظام iOS، Core ML Delegate — 4–6x مقابل CPU. يختار Task API تلقائيًا مسرع الأجهزة المتاح، لكن يمكن فرض مفوض عبر DetectorOptions.

تطبيقات Object Detection في التطبيقات المحمولة

عدد الأشخاص والكائنات — تحليلات التجزئة: اكتشاف الزوار في المتجر، عدد قوائم الانتظار، تحديد مستويات الرفوف. يتيح عداد الأشخاص Object Detection في الإطار تقدير حركة المرور والتحويل. يعطي ML Kit Object Detector حتى 30 إطار/ثانية — كافٍ للعد في الوقت الفعلي. لعبور المناطق — مزيج من Object Detection + تتبع ByteTrack. دقة العد: 92–95% في ظروف الإضاءة الجيدة.

كشف العيوب في التصنيع — يحدد Object Detection العيوب على الحزام الناقل: الخدوش، الرقائق، الشقوق، التجميع غير الصحيح. يعمل نموذج YOLOv8-Nano (INT8) المخصص على جهاز لوحي Android متصل بكاميرا USB. زمن الاستجابة: 20–40 مللي ثانية لكل إطار (25–50 إطار/ثانية). للعيوب المعقدة (الشقوق الدقيقة) — زِد دقة الإدخال إلى 640x640 (زمن استجابة 40–80 مللي ثانية). التدريب: Roboflow — مجموعة بيانات من 200–1000 صورة عيب + Ultralytics YOLOv8.

وضع علامات AR في الوقت الفعلي — يستخدم ARCore (Android) وARKit (iOS) Object Detection للتعرف على الأسطح المستوية والطائرات الرأسية والكائنات ثلاثية الأبعاد. يوفر ML Kit Object Detection + ARCore Scene Semantics تجزئة الكائنات: جدار، أرضية، سقف، أثاث. لوضع علامات AR مخصصة (مثل التعرف على طراز أريكة معين وتراكب معلومات AR) — YOLOv8-Nano + SceneKit/SceneForm. متطلبات الوقت الفعلي: > 20 إطار/ثانية.

swift
// ARKit + Object Detection
let request = VNCoreMLRequest(model: objectDetector) { req, _ in
    guard let results = req.results as? [VNDetectedObjectObservation] else { return }
    for result in results where result.confidence > 0.6 {
        let rect = result.boundingBox
        let worldPos = arView.hitTest(rect.center)
        arView.addAnchor(ARAnchor(name: label, transform: worldPos))
    }
}

التصوير الطبي — Object Detection لتحليل الأشعة السينية والرنين المغناطيسي والأشعة المقطعية. كشف الأورام والكسور والأمراض على جهاز الطبيب المحمول. يكتشف YOLOv8-Nano على جهاز لوحي Android العقد الرئوية في 15–30 مللي ثانية بحساسية 89% ونوعية 93% (بيانات NIH ChestX-ray14). المتطلبات: تكميم INT8 (خصوصية البيانات)، high recall (تفويت علم الأمراض أخطر من الإنذار الكاذب)، عتبة الثقة < 0.4. تضمن المعالجة على الجهاز خصوصية البيانات الطبية.

الأسئلة الشائعة

ما الفرق بين Object Detection وImage Segmentation؟

Object Detection يعيد bounding box لكل كائن — إطار مستطيل يحيط بالكائن. Image Segmentation (دلالي أو مثالي) يعيد المحيط الدقيق للكائن — قناع على مستوى البكسل. التجزئة أكثر دقة لكنها أبطأ (50–300 مللي ثانية مقابل 10–30 مللي ثانية للكشف). للمهام حيث شكل الكائن مهم (الطب، الواقع المعزز)، استخدم التجزئة. للمهام حيث الموقع والوجود مهمان (العد، المراقبة)، استخدم الكشف. MobileViT هي بنية تحل كلتا المهمتين.

كم عدد الفئات التي يمكن أن يكتشفها Object Detection على جهاز محمول؟

YOLOv8-Nano مدرب على COCO (80 فئة). ML Kit Object Detection — 40+ فئة (fashion، food، home، places). يمكن لنموذج مخصص اكتشاف حتى 100 فئة على جهاز محمول دون فقدان الأداء. بعد 100 فئة، يزداد زمن الاستجابة وينخفض mAP. للتطبيقات ذات 1000+ فئة، استخدم التصنيف الهرمي: أولاً فئة واسعة (10 فئات)، ثم دقيقة (100 فئة فرعية). EfficientNet + YOLO — نهج هرمي لـ 1000+ فئة بزمن استجابة < 50 مللي ثانية.

هل يمكن استخدام Object Detection لتتبع الكائنات بين الإطارات؟

نعم، ML Kit Object Detection يتضمن تتبعًا مدمجًا: بعد الكشف في الإطار الأول، يتم تتبع الكائن عبر تدفق الفيديو دون إعادة اكتشاف. للتتبع الأكثر تعقيدًا (عبور الكائنات، مغادرة الإطار)، استخدم ByteTrack أو BoT-SORT. يعمل ByteTrack بناءً على IoU (intersection over union) بين bounding boxes للإطارات المتجاورة — 85% MOTA على MOT17. يستخدم BoT-SORT بالإضافة إلى ذلك إعادة التحديد (ReID) لاستعادة الكائنات المفقودة — 90% MOTA.

كيفية نشر YOLOv8 على iOS؟

صدّر YOLOv8 إلى Core ML: yolo export model=yolov8n.pt format=coreml int8. يتم دمج .mlpackage الناتج عبر VNCoreMLRequest (Vision Framework). بديل: YOLOv8 → TFLite → Core ML Delegate (iOS TFLite API). يدعم تصدير Ultralytics YOLOv8 Core ML iOS 16+، وتسريع ANE، وتكميم FP16 وINT8. للبث، استخدم AVFoundation + Vision مع طلبات أداء VNImageRequestHandler المتكررة. الوقت الفعلي: 20–30 إطار/ثانية على iPhone 14 Pro.

كيفية تحسين دقة Object Detection على الأجهزة المحمولة؟

زِد تنوع مجموعة البيانات (الزوايا، الإضاءة، الخلفية) — 500+ صورة لكل فئة. استخدم زيادة البيانات: mosaic، mixup، random perspective (زيادة Ultralytics YOLOv8 — 2–5% زيادة mAP). زِد حجم الإدخال إلى 640x640 (بدلاً من 320x320) — +4–8% mAP، لكن زمن استجابة ×2. استخدم تكميم FP16 أو INT8 بعد التدريب — +0–1% فقدان mAP، ضغط 4x. لنظام iOS، استخدم ANE (Neural Engine) عبر Core ML Delegate — تسريع 3–5x مقابل CPU.

الملخص

  • Object Detection — تصنيف + تحديد موقع الكائنات مع bounding boxes
  • ML Kit — حتى 30 إطار/ثانية، 40+ فئة، تتبع كائنات مدمج
  • YOLOv8-Nano — 2.6M معامل، 42% mAP، 10–30 مللي ثانية، الأفضل للجهاز
  • SSD / EfficientDet — بدائل كلاسيكية وحديثة لـ TFLite
  • Task Vision API — API TFLite موحد مع تسريع GPU/ANE
  • On-device — خصوصية البيانات، زمن استجابة صفري، بدون إنترنت
  • التطبيقات — تحليلات التجزئة، الواقع المعزز، الطب، كشف العيوب، عد الكائنات

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا