دمج أدوات تصنيف الصور

تصنيف الصور هو أحد الاستخدامات الشائعة لتعلُّم الآلة، ويتم من خلاله تحديد ما تمثله الصورة. على سبيل المثال، قد نريد معرفة نوع الحيوان الذي يظهر في صورة معيّنة. تُعرف مهمة التنبؤ بما تمثله الصورة باسم تصنيف الصور. يتم تدريب مصنّف الصور على التعرّف على فئات مختلفة من الصور. على سبيل المثال، يمكن تدريب نموذج على التعرّف على صور تمثّل ثلاثة أنواع مختلفة من الحيوانات: الأرانب والهامستر والكلاب. اطّلِع على مثال تصنيف الصور للحصول على مزيد من المعلومات حول مصنّفات الصور.

استخدِم واجهة برمجة التطبيقات Task Library ImageClassifier لنشر مصنّفات الصور المخصّصة أو تلك التي تم تدريبها مسبقًا في تطبيقاتك على الأجهزة الجوّالة.

الميزات الرئيسية لواجهة برمجة التطبيقات ImageClassifier API

  • معالجة الصور المدخلة، بما في ذلك التدوير وتغيير الحجم وتحويل مساحة الألوان

  • منطقة الاهتمام في الصورة المدخلة

  • لغة خريطة التصنيفات

  • الحد الأدنى للنتيجة لفلترة النتائج.

  • أفضل k نتائج للتصنيف

  • القائمة المسموح بها والقائمة المرفوضة للتصنيفات

نماذج تصنيف الصور المتوافقة

نضمن توافق الطُرز التالية مع واجهة برمجة التطبيقات ImageClassifier.

تشغيل الاستنتاج في Java

يمكنك الاطّلاع على تطبيق Image Classification المرجعي للحصول على مثال عن كيفية استخدام ImageClassifier في تطبيق Android.

الخطوة 1: استيراد تبعية Gradle والإعدادات الأخرى

انسخ ملف نموذج .tflite إلى دليل مواد العرض الخاص بوحدة Android التي سيتم تشغيل النموذج فيها. حدِّد أنّه يجب عدم ضغط الملف، وأضِف مكتبة TensorFlow Lite إلى ملف build.gradle الخاص بالوحدة:

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }
}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-vision'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}

الخطوة 2: استخدام النموذج

// Initialization
ImageClassifierOptions options =
    ImageClassifierOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setMaxResults(1)
        .build();
ImageClassifier imageClassifier =
    ImageClassifier.createFromFileAndOptions(
        context, modelFile, options);

// Run inference
List<Classifications> results = imageClassifier.classify(image);

يمكنك الاطّلاع على رمز المصدر وjavadoc لمعرفة المزيد من الخيارات لإعداد ImageClassifier.

تنفيذ الاستدلال في نظام التشغيل iOS

الخطوة 1: تثبيت التبعيات

تتيح "مكتبة المهام" إمكانية التثبيت باستخدام CocoaPods. تأكَّد من تثبيت CocoaPods على نظامك. يُرجى الاطّلاع على دليل تثبيت CocoaPods للحصول على التعليمات.

يُرجى الاطّلاع على دليل CocoaPods لمعرفة تفاصيل حول إضافة وحدات إلى مشروع Xcode.

أضِف مجموعة الإعلانات المتسلسلة TensorFlowLiteTaskVision في ملف Podfile.

target 'MyAppWithTaskAPI' do
  use_frameworks!
  pod 'TensorFlowLiteTaskVision'
end

تأكَّد من أنّ نموذج .tflite الذي ستستخدمه للاستدلال مضمّن في حِزمة تطبيقك.

الخطوة 2: استخدام النموذج

Swift

// Imports
import TensorFlowLiteTaskVision

// Initialization
guard let modelPath = Bundle.main.path(forResource: "birds_V1",
                                            ofType: "tflite") else { return }

let options = ImageClassifierOptions(modelPath: modelPath)

// Configure any additional options:
// options.classificationOptions.maxResults = 3

let classifier = try ImageClassifier.classifier(options: options)

// Convert the input image to MLImage.
// There are other sources for MLImage. For more details, please see:
// https://developers.google.com/ml-kit/reference/ios/mlimage/api/reference/Classes/GMLImage
guard let image = UIImage (named: "sparrow.jpg"), let mlImage = MLImage(image: image) else { return }

// Run inference
let classificationResults = try classifier.classify(mlImage: mlImage)

Objective-C

// Imports
#import <TensorFlowLiteTaskVision/TensorFlowLiteTaskVision.h>

// Initialization
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"birds_V1" ofType:@"tflite"];

TFLImageClassifierOptions *options =
    [[TFLImageClassifierOptions alloc] initWithModelPath:modelPath];

// Configure any additional options:
// options.classificationOptions.maxResults = 3;

TFLImageClassifier *classifier = [TFLImageClassifier imageClassifierWithOptions:options
                                                                          error:nil];

// Convert the input image to MLImage.
UIImage *image = [UIImage imageNamed:@"sparrow.jpg"];

// There are other sources for GMLImage. For more details, please see:
// https://developers.google.com/ml-kit/reference/ios/mlimage/api/reference/Classes/GMLImage
GMLImage *gmlImage = [[GMLImage alloc] initWithImage:image];

// Run inference
TFLClassificationResult *classificationResult =
    [classifier classifyWithGMLImage:gmlImage error:nil];

يمكنك الاطّلاع على رمز المصدر لمعرفة المزيد من الخيارات لإعداد TFLImageClassifier.

تشغيل الاستنتاج في Python

الخطوة 1: تثبيت حزمة pip

pip install tflite-support

الخطوة 2: استخدام النموذج

# Imports
from tflite_support.task import vision
from tflite_support.task import core
from tflite_support.task import processor

# Initialization
base_options = core.BaseOptions(file_name=model_path)
classification_options = processor.ClassificationOptions(max_results=2)
options = vision.ImageClassifierOptions(base_options=base_options, classification_options=classification_options)
classifier = vision.ImageClassifier.create_from_options(options)

# Alternatively, you can create an image classifier in the following manner:
# classifier = vision.ImageClassifier.create_from_file(model_path)

# Run inference
image = vision.TensorImage.create_from_file(image_path)
classification_result = classifier.classify(image)

يمكنك الاطّلاع على رمز المصدر لمعرفة المزيد من الخيارات لإعداد ImageClassifier.

تشغيل الاستدلال في C++‎

// Initialization
ImageClassifierOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<ImageClassifier> image_classifier = ImageClassifier::CreateFromOptions(options).value();

// Create input frame_buffer from your inputs, `image_data` and `image_dimension`.
// See more information here: tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h

std::unique_ptr<FrameBuffer> frame_buffer = CreateFromRgbRawBuffer(
      image_data, image_dimension);

// Run inference
const ClassificationResult result = image_classifier->Classify(*frame_buffer).value();

يمكنك الاطّلاع على رمز المصدر لمعرفة المزيد من الخيارات لإعداد ImageClassifier.

أمثلة النتائج

في ما يلي مثال على نتائج تصنيف مصنّف طيور.

عصفور

Results:
  Rank #0:
   index       : 671
   score       : 0.91406
   class name  : /m/01bwb9
   display name: Passer domesticus
  Rank #1:
   index       : 670
   score       : 0.00391
   class name  : /m/01bwbt
   display name: Passer montanus
  Rank #2:
   index       : 495
   score       : 0.00391
   class name  : /m/0bwm6m
   display name: Passer italiae

جرِّب أداة العرض التوضيحي البسيطة لواجهة سطر الأوامر (CLI) الخاصة بـ ImageClassifier باستخدام النموذج وبيانات الاختبار الخاصة بك.

متطلبات التوافق مع الطراز

تتوقّع واجهة برمجة التطبيقات ImageClassifier نموذج TFLite يتضمّن بيانات وصفية إلزامية لنموذج TFLite. يمكنك الاطّلاع على أمثلة حول إنشاء بيانات وصفية لمصنّفات الصور باستخدام TensorFlow Lite Metadata Writer API.

يجب أن تستوفي نماذج تصنيف الصور المتوافقة المتطلبات التالية:

  • موتر الصورة المدخَلة (kTfLiteUInt8/kTfLiteFloat32)

    • إدخال صورة بحجم [batch x height x width x channels]
    • لا تتوفّر الاستدلالات المجمّعة (يجب أن تكون قيمة batch هي 1).
    • يُسمح فقط بإدخال قيم RGB (يجب أن تكون قيمة channels هي 3).
    • إذا كان النوع kTfLiteFloat32، يجب إرفاق NormalizationOptions بالبيانات الوصفية لتسوية الإدخال.
  • موتر النتيجة (kTfLiteUInt8/kTfLiteFloat32)

    • مع N فئة وسمتَين أو 4 سمات، أي [1 x N] أو [1 x 1 x 1 x N]
    • خرائط التصنيفات الاختيارية (ولكن يُنصح بها) كملفات AssociatedFile من النوع TENSOR_AXIS_LABELS، تحتوي على تصنيف واحد لكل سطر اطّلِع على مثال على ملف التصنيفات. يتم استخدام أول AssociatedFile (إن وُجد) لملء الحقل label (المسمّى class_name في C++) الخاص بالنتائج. يتم ملء الحقل display_name من AssociatedFile (إن وُجد) الذي تتطابق لغته مع الحقل display_names_locale في ImageClassifierOptions المستخدَم عند وقت الإنشاء (القيمة التلقائية هي "en"، أي الإنجليزية). إذا لم يتوفّر أي من هذه الحقول، سيتم ملء حقل index فقط في النتائج.