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

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

استخدم واجهة برمجة تطبيقات ImageClassifier لمكتبة المهام لنشر مصنفات الصور المخصصة أو المصنفات المدربة مسبقًا في تطبيقات الهاتف المحمول الخاصة بك.

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

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

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

  • تسمية خريطة المنطقة.

  • عتبة النتيجة لتصفية النتائج.

  • نتائج تصنيف Top-k.

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

نماذج مصنف الصور المدعومة

نضمن أن تكون النماذج التالية متوافقة مع ImageClassifier API.

تشغيل الاستدلال في جافا

راجع التطبيق المرجعي لتصنيف الصور للحصول على مثال حول كيفية استخدام 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 (NNAPI is included)
    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: استخدام النموذج

سويفت

// 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)

ج موضوعية

// 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 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 API نموذج TFLite مع بيانات تعريف نموذج TFLite الإلزامية. راجع أمثلة لإنشاء بيانات تعريف لمصنفات الصور باستخدام TensorFlow Lite Metadata Writer API .

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

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

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

    • مع فئات N وإما 2 أو 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 النتائج فقط.