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

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

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

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

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

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

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

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

  • نتائج تصنيف أعلى k.

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

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

نؤكّد أنّ النماذج التالية متوافقة مع ImageClassifier. واجهة برمجة التطبيقات.

تنفيذ الاستنتاج باستخدام Java

يمكنك الاطّلاع على التطبيق المرجعي لتصنيف الصور للاطّلاع على مثال حول كيفية استخدام "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.

تنفيذ الاستنتاج في بايثون

الخطوة 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).
    • يتم توفير إدخالات نموذج أحمر أخضر أزرق فقط (يجب أن تكون القيمة channels 3).
    • إذا كان النوع kTfLiteFloat32، يجب أن تكون خيارات التسوية مطلوبة المرفقة بالبيانات الوصفية لتسوية المدخلات.
  • متّصِل نتيجة الإخراج (kTfLiteUInt8/kTfLiteFloat32)

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