Image Labeling هي مهمة رؤية حاسوبية حيث تقوم شبكة عصبية بتعيين تسميات للصورة من مجموعة محددة مسبقاً من الفئات: من البسيطة (قطة، كلب، سيارة) إلى المحددة (نوع نبات، نموذج هاتف ذكي، فحص طبي). في تطوير التطبيقات المحمولة، يُستخدم Image Labeling للوسم التلقائي للصور في المعارض، والإشراف على المحتوى الذي ينشئه المستخدمون، والبحث البصري عن المنتجات بالصورة، وتطبيقات الواقع المعزز. وفقاً Google ML Kit, 2025، يتعرف المصنف المدمج على أكثر من 400 فئة في 10–20 مللي ثانية لكل إطار بدقة 91% (top-1).
النقاط الرئيسية
Image Labeling هو نوع فرعي من تصنيف الصور حيث يأخذ النموذج صورة كمدخل ويعيد الاحتمالات لكل فئة من مجموعة التدريب. على عكس اكتشاف الأشياء، لا يحدد Image Labeling موضع الأشياء في الصورة — فقط وجودها أو غيابها. على عكس تجزئة الصورة، لا يحدد محيط الجسم. Image Labeling يجيب على السؤال «ما في الصورة؟»، وليس «أين وما في الصورة؟».
هندسة المصنف: يستخرج العمود الفقري CNN (MobileNet، ResNet، EfficientNet) خريطة معالم من الصورة، ويقوم Global Average Pooling بطي الأبعاد المكانية، وتنتج طبقة متصلة بالكامل (Dense) مع تنشيط Softmax احتمالات الفئات. MobileNetV2 هو العمود الفقري الأكثر شيوعاً للأجهزة المحمولة: 3.5M معلمة، استدلال 0.5–2 مللي ثانية على Pixel 6 عبر GPU. EfficientNet-Lite هو بديل بنسبة دقة/معلمات أفضل.
دقة Top-1 مقابل Top-5: top-1 — يتنبأ النموذج بشكل صحيح بالفئة الرئيسية (91% في ML Kit)؛ top-5 — الفئة الصحيحة ضمن الخمس فئات الأكثر احتمالاً (98% في ML Kit). للتطبيقات الإنتاجية، استخدم top-5 وأظهر للمستخدم عدة خيارات من التسميات. للإشراف على المحتوى، استخدم top-1 مع عتبة ثقة >= 0.8 (يقلل معدل الإيجابيات الكاذبة بنسبة 40%).
| الهندسة | المعلمات | زمن الاستجابة | Top-1 | الحجم |
|---|---|---|---|---|
| MobileNetV2 | 3.5M | 0.5–2 مللي ثانية | 90.2% | 14 MB |
| MobileNetV3 | 2.5M | 0.3–1.5 مللي ثانية | 91.5% | 10 MB |
| EfficientNet-Lite0 | 4.7M | 1–3 مللي ثانية | 92.3% | 18 MB |
| ResNet-50 | 25.6M | 10–30 مللي ثانية | 95.2% | 98 MB |
على الجهاز مقابل السحابة: التصنيف على الجهاز (ML Kit، Core ML) يعطي زمن استجابة 1–20 مللي ثانية مع خصوصية كاملة للبيانات. API السحابي (Google Cloud Vision، AWS Rekognition) — زمن استجابة 500–2000 مللي ثانية بالإضافة إلى تكلفة لكل طلب، لكنه أكثر دقة (97–99%) بفضل النماذج الأكبر (ViT، CLIP). للتطبيقات في الوقت الفعلي (الكاميرا، الواقع المعزز)، اختر التصنيف على الجهاز. للسيناريوهات المعقدة (الطب، تحليل الخبراء)، استخدم السحابة مع احتياطي على الجهاز.
ML Kit Image Labeling هي مكتبة جاهزة من Google لتصنيف الصور على الجهاز. متوفرة في وضعين: على الجهاز (مجاني، أكثر من 400 تسمية، 10–20 مللي ثانية) وسحابي (مدفوع، أكثر من 10000 تسمية، أكثر من 500 مللي ثانية). يستخدم الإصدار المحلي MobileNetV3 مع تكميم INT8، ويشغل 4 MB على القرص. يكتشف ML Kit تلقائياً اتجاه الصورة ويحسن الحجم قبل التصنيف.
API ML Kit: InputImage (من Bitmap، media.Image، filePath) → ImageLabeler → OnSuccessListener مع قائمة ImageLabel (تسمية، ثقة، فهرس). عتبة الثقة (الافتراضي 0.5) هي الحد الأدنى من الثقة لإرجاع تسمية. رفع العتبة إلى 0.7 يقلل عدد التسميات لكل إطار ولكنه يزيد دقة كل تسمية. للإشراف على المحتوى، اضبط العتبة على 0.8.
val labeler = ImageLabeling.getClient(
ImageLabelerOptions.DEFAULT_OPTIONS
)
labeler.process(inputImage)
.addOnSuccessListener { labels ->
labels
.filter { it.confidence >= 0.7f }
.forEach { label ->
log("Label: ${label.label}")
log("Confidence: ${label.confidence}")
}
}
.addOnFailureListener { error -> handleError(error) }
ML Kit على iOS: API مشابه لنظام Android، يستخدم UIImage أو CMSampleBuffer. يستخدم ML Kit تلقائياً Core ML + ANE على أجهزة A12+. لنظام iOS 16+، يعطي ML Kit Image Labeling زمن استجابة 8–15 مللي ثانية على iPhone 15 Pro. لتقليل زمن الاستجابة، مرر أصغر دقة صورة ممكنة (224x224 لـ MobileNet) — ML Kit يغير حجمها تلقائياً، لكن تحويل الصور الكبيرة يضيف 2–5 مللي ثانية حمل إضافي.
Core ML هو إطار Apple لتشغيل نماذج التعلم الآلي على الجهاز. بالاقتران مع Vision Framework (VNCoreMLRequest)، يتيح Core ML تصنيف الصور بأقل قدر من التعليمات البرمجية. توفر Apple نماذج مدمجة: SqueezeNet (5 MB، 80.5% top-1)، ResNet50 (98 MB، 95.2%)، MobileNetV2 (14 MB، 90.2%). يتم تحويل النماذج بتنسيق .mlmodel أو .mlpackage عبر coremltools من TensorFlow أو PyTorch.
VNCoreMLRequest هو API Vision الذي يتولى المعالجة المسبقة للصورة (القياس، القص للتعبئة، تحويل مساحة اللون) ويمرر النتيجة إلى النموذج. يعيد Vision VNClassificationObservation مع identifier (اسم الفئة) و confidence (0..1). MaxCandidates هو الحد الأقصى لعدد التسميات المعادة (الافتراضي 1). للتصنيف مع التحديد التلقائي، استخدم VNCoreMLRequest مع imageCropAndScaleOption = .centerCrop.
guard let model = try? VNCoreMLModel(for: MobileNetV2().model) else { return }
let request = VNCoreMLRequest(model: model) { request, _ in
guard let results = request.results as? [VNClassificationObservation] else { return }
results.prefix(5).forEach { obs in
print("التسمية: \(obs.identifier)، الثقة: \(obs.confidence)")
}
}
request.imageCropAndScaleOption = .centerCrop
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try handler.perform([request])
Core ML مقابل ML Kit على iOS: Core ML أصلي، لا يتطلب SDK إضافية، وهو أفضل تحسيناً لـ ANE (المحرك العصبي لـ Apple). ML Kit أكثر دقة في المشاهد المعقدة بفضل نماذج Google. يدعم Core ML أي نموذج (محول عبر coremltools)، بينما يدعم ML Kit نماذجه فقط. للتنفيذ السريع، استخدم ML Kit. للتحكم الأقصى في النموذج، استخدم Core ML. نهج عملي: استخدم كلا الإطارين في تطبيق واحد — ML Kit للتسميات القياسية، Core ML للتسميات المخصصة.
نماذج Image Labeling المخصصة — تدريب المصنف الخاص بك لمهمة محددة: التعرف على جودة الفاكهة، اكتشاف العيوب على خط الإنتاج، تصنيف سلالات الكلاب. تشمل العملية جمع مجموعة بيانات (أكثر من 1000 صورة لكل فئة)، ووضع العلامات، والتدريب عبر التعلم بالنقل (transfer learning) على MobileNetV2 أو EfficientNet مدربة مسبقاً، والتحويل إلى TFLite / Core ML.
التعلم بالنقل (Transfer Learning) — الطريقة الرئيسية لتدريب المصنفات المحمولة. يتم أخذ نموذج مدرب مسبقاً على ImageNet، وتجميد الطبقات السفلية (CNN backbone)، وإعادة تدريب الطبقات العليا (fine-tuning). يتطلب ذلك 100–500 صورة فقط لكل فئة ويستغرق 1–2 ساعة على Google Colab (GPU). المكتبات: TensorFlow Keras (Android)، PyTorch + coremltools (iOS). النتيجة: 95–98% دقة على الفئات المستهدفة.
// استدلال نموذج TFLite المخصص
val interpreter = Interpreter(loadModelFile(context))
val inputImage = TensorImage.fromBitmap(bitmap)
.apply { load(Bitmap.createScaledBitmap(bitmap, 224, 224, true)) }
val output = Array(1) { FloatArray(NUM_CLASSES) }
interpreter.run(inputImage.tensorBuffer, output)
val probabilities = TensorLabel.mapIndexToLabels(output[0])
val topClass = probabilities.maxByOrNull { it.value }
ML Kit Custom Model API — بديل: لا حاجة لكتابة كود TFLite Interpreter — ML Kit يقوم بتحميل النموذج ومعالجة المعالجة المسبقة تلقائياً. يقبل Image Labeler المخصص نموذج TFLite بحجم إدخال 224x224x3 ومخرج score float[NUM_CLASSES]. يكفي تمرير ملف النموذج والحصول على تسميات قياسية. يُوصى بـ ML Kit Custom Model API إذا كان النموذج يتوافق مع تنسيق TFLite. إذا كان هناك حاجة للتحكم الدقيق في الاستدلال (عتبات لكل فئة)، استخدم TFLite Interpreter مباشرة.
TFLite (TensorFlow Lite) — تنسيق نماذج Google للأجهزة المحمولة والحافة. يدعم التكميم (FP16، INT8)، الذي يقلص حجم النموذج 4 مرات ويزيد السرعة 2–3 مرات مع فقدان طفيف في الدقة (1–2%). يعمل TFLite على Android عبر GPU Delegate (OpenGL/OpenCL)، وعلى iOS عبر Core ML Delegate. يوفر TFLite Task API واجهة موحدة لمصنف الصور، وكاشف الأشياء، ومهام أخرى.
Core ML — تنسيق Apple (.mlpackage — جديد، .mlmodel — قديم). يدعم التكميم (FP16) وتلوين الأوزان (weight palettization حتى 1/2/4/6/8 بت)، مما يحقق ضغط النموذج حتى 80%. يستخدم Core ML ANE (المحرك العصبي)، GPU و CPU — يختار النظام تلقائياً المحرك الأمثل. التحويل من PyTorch عبر torch.onnx.export + coremltools، من TensorFlow عبر tf-keras + coremltools. iOS 18+ يدعم التدريب على الجهاز عبر Core ML Training API.
| الخاصية | TFLite | Core ML |
|---|---|---|
| الحجم (MobileNetV2) | 14 MB (FP32) / 3.5 MB (INT8) | 14 MB (FP16) / 2.8 MB (4-bit) |
| محرك الاستدلال | GPU / NNAPI / XNNPACK | ANE / GPU / CPU (تلقائي) |
| التكميم | FP16, INT8, DynamicRange | FP16, تلوين (1-8 bit) |
| أداء iOS | Core ML Delegate (2–5 مللي ثانية) | ANE أصلي (1–3 مللي ثانية) |
| الأدوات | TFLite Model Maker, Task API | coremltools, Create ML |
ONNX كتنسيق وسيط: حوّل النماذج إلى ONNX (PyTorch → ONNX، TensorFlow → ONNX) ثم إلى TFLite / Core ML عبر onnx2tf أو onnx2coreml. ONNX هو تنسيق موحد مدعوم من أكثر من 70 إطار عمل. هذا يبسط المسار: نموذج مدرب واحد → ONNX → تنسيقات أصلية لكلا المنصتين. التدريب في PyTorch + التحويل إلى ONNX → TFLite (Android) / Core ML (iOS) هو المسار الموصى به للمشاريع عبر المنصات.
الوسم التلقائي للصور — تطبيقات المعرض (Google Photos، Apple Photos) تعين تلقائياً تسميات للصور: «شاطئ»، «غروب»، «كلب»، «طعام». يعالج ML Kit Image Labeling كل صورة من المعرض في الخلفية — 1–2 ثانية لكل 100 صورة (دفعة). يحصل المستخدم على بحث بالتسميات دون فرز يدوي. يستخدم Google Photos التصنيف على الجهاز مع التحقق الخادمي لاحقاً للمشاهد المعقدة.
الإشراف على المحتوى — الكشف التلقائي عن الصغير غير المرغوب فيها في محتوى المستخدمين (وسائل التواصل الاجتماعي، الأسواق، منصات UGC). يكتشف ML Kit Custom Model المحتوى غير اللائق والعنف والدعاية بدقة 92–96%. عتبة التنشيط — ثقة 0.8. لتقليل الإيجابيات الكاذبة (الصور الطبية المشروعة)، استخدم لجنة من المصنفات: Image Labeling + Object Detection + Blur Detection. الإشراف على الجهاز أسرع ويحمي خصوصية المستخدم.
البحث البصري عن المنتجات — يصور المستخدم منتجاً (حذاء رياضي، حقيبة، أثاث)، يحدد التطبيق التسمية ويجد منتجات مماثلة في الكتالوج. يضيق Image Labeling البحث إلى فئة، ثم تجد واصفات المعالم (متجهات المعالم) عناصر متشابهة بصرياً. تستخدم Pinterest Lens و Google Lens و Amazon StyleSnap هذا النهج. يعطي التصنيف على الجهاز نتيجة خلال 10–30 مللي ثانية، والبحث السحابي — 200–500 مللي ثانية.
// Image Labeling مع Core ML للبحث البصري
let request = VNCoreMLRequest(model: productClassifier) { req, _ in
guard let result = req.results?.first as? VNClassificationObservation,
result.confidence > 0.6 else { return }
SearchService.findSimilarProducts(
category: result.identifier,
image: capturedPhoto,
limit: 10
) { products in
DispatchQueue.main.async {
self.showResults(products)
}
}
}
تطبيقات الواقع المعزز والتعليمية — يصنف Image Labeling الأشياء في الوقت الفعلي عبر الكاميرا. يوجه المستخدم هاتفه نحو نبات — يعرض التطبيق الاسم والعناية والري. يوجه نحو قطعة آلية — يشرح وظيفتها. المتطلب: زمن استجابة أقل من 30 مللي ثانية. يعطي EfficientNet-Lite على الأجهزة الرائدة 15–25 مللي ثانية. في الإضاءة المنخفضة، تنخفض الدقة — استخدم عتبة ثقة تكيفية (اخفض العتبة في الإضاءة المنخفضة للتعويض عن تدهور جودة الإدخال).
الأسئلة الشائعة
Image Labeling يحدد الأشياء الموجودة في الصورة ولكنه لا يشير إلى موقعها. Object Detection يجد الأشياء ويعيد مربعات إحاطة لكل منها. Image Labeling أسرع (1–20 مللي ثانية مقابل 20–100 مللي ثانية)، ويتطلب بيانات تدريب أقل، لكنه لا يوفر معلومات موضعية. للتصنيف البسيط (قطة/كلب)، استخدم Image Labeling. للتعرف الموجه (كم عدد الأشياء، أين توجد)، استخدم Object Detection.
لا، يعمل ML Kit Image Labeling بالكامل على الجهاز. يتم تنزيل النموذج عند التشغيل الأول (وضع التنزيل — 4 MB) ويخزن محلياً. يتم تحميل نماذج Core ML مع التطبيق. نموذج TFLite المخصص هو جزء من APK. جميع الحسابات تُنفذ على الجهاز، ولا تُرسل البيانات إلى الخادم. هذا يضمن خصوصية المستخدم والعمل بدون إنترنت. التصنيف السحابي (Google Cloud Vision) هو بديل يتطلب إنترنت وبدقة أعلى.
للتعلم بالنقل على MobileNetV2: minimum 50–100 صورة لكل فئة، الأمثل 300–500. كلما زاد التنوع (زوايا، إضاءة، خلفية)، زادت الدقة. للتدريب من الصفر (بدون نموذج مدرب مسبقاً)، يلزم minimum 1000 صورة لكل فئة. التوصية: ابدأ بـ 200 صورة لكل فئة، قيم الدقة، أضف بيانات للفئات منخفضة الدقة. يزيد زيادة البيانات (تدوير، قياس، إزاحة) مجموعة البيانات الفعلية 3–5 مرات دون جمع بيانات جديدة.
الطرق الرئيسية: تكميم INT8 بعد التدريب — يقلل الحجم 4 مرات مع فقدان 1–2% دقة؛ التشذيب (إزالة الأوزان غير المهمة) — يصل إلى 50% ضغط؛ التقطير (نموذج طالب أصغر مدرب على مخرجات نموذج معلم أكبر) — يصل إلى 80% ضغط. MobileNetV2 INT8 يشغل 3.5 MB، SqueezeNet — 5 MB. الحجم المستهدف — لا يزيد عن 10 MB للتحميل الفوري دون مؤشر تقدم.
يظهر ML Kit Image Labeling v2 دقة top-1 بنسبة 91% على مجموعة اختبار Google (أكثر من 400 فئة). دقة top-5 — 98%. في الزوايا غير القياسية وظروف الإضاءة، قد تنخفض الدقة إلى 75–85%. للإنتاج، يُوصى باستخدام عتبة ثقة 0.7 لتصفية مستقرة للتنبؤات منخفضة الجودة. إذا كانت الدقة غير كافية، استخدم نموذجاً مخصصاً مدرباً على مجموعة بيانات محددة: دقة 95–98% على الفئات المستهدفة.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.