تصنيف الصور هو أحد الاستخدامات الشائعة لتعلُّم الآلة، ويتم من خلاله تحديد ما تمثله الصورة. على سبيل المثال، قد نريد معرفة نوع الحيوان الذي يظهر في صورة معيّنة. تُعرف مهمة التنبؤ بما تمثله الصورة باسم تصنيف الصور. يتم تدريب مصنّف الصور على التعرّف على فئات مختلفة من الصور. على سبيل المثال، يمكن تدريب نموذج على التعرّف على صور تمثّل ثلاثة أنواع مختلفة من الحيوانات: الأرانب والهامستر والكلاب. اطّلِع على مثال تصنيف الصور للحصول على مزيد من المعلومات حول مصنّفات الصور.
استخدِم واجهة برمجة التطبيقات Task Library ImageClassifier لنشر مصنّفات الصور المخصّصة أو تلك التي تم تدريبها مسبقًا في تطبيقاتك على الأجهزة الجوّالة.
الميزات الرئيسية لواجهة برمجة التطبيقات ImageClassifier API
معالجة الصور المدخلة، بما في ذلك التدوير وتغيير الحجم وتحويل مساحة الألوان
منطقة الاهتمام في الصورة المدخلة
لغة خريطة التصنيفات
الحد الأدنى للنتيجة لفلترة النتائج.
أفضل k نتائج للتصنيف
القائمة المسموح بها والقائمة المرفوضة للتصنيفات
نماذج تصنيف الصور المتوافقة
نضمن توافق الطُرز التالية مع واجهة برمجة التطبيقات ImageClassifier.
النماذج التي تم إنشاؤها باستخدام TensorFlow Lite Model Maker لتصنيف الصور
النماذج التي تم إنشاؤها بواسطة تصنيف الصور في AutoML Vision Edge
النماذج المخصّصة التي تستوفي متطلبات توافق النماذج
تشغيل الاستنتاج في 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فقط في النتائج.
- مع