دمج أدوات تقسيم الصور

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

استخدِم واجهة برمجة تطبيقات ImageSegmenter لمكتبة المهام لتفعيل أدوات تقسيم الصور المخصّصة. أو مُدرَّبة مسبقًا على تطبيقات الأجهزة الجوّالة

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

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

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

  • هناك نوعان من النتائج، قناع الفئة وأقنعة الثقة.

  • تصنيف ملوّن لغرض العرض

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

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

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

الاطّلاع على مرجع تقسيم الصور التطبيق للاطّلاع على مثال حول كيفية استخدام "ImageSegmenter" في تطبيق 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
ImageSegmenterOptions options =
    ImageSegmenterOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setOutputType(OutputType.CONFIDENCE_MASK)
        .build();
ImageSegmenter imageSegmenter =
    ImageSegmenter.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Segmentation> results = imageSegmenter.segment(image);

اطلع على شفرة المصدر ملف javadoc لمزيد من الخيارات لضبط ImageSegmenter.

تنفيذ الاستنتاج في نظام 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: "deeplabv3",
                                            ofType: "tflite") else { return }

let options = ImageSegmenterOptions(modelPath: modelPath)

// Configure any additional options:
// options.outputType = OutputType.confidenceMasks

let segmenter = try ImageSegmenter.segmenter(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: "plane.jpg"), let mlImage = MLImage(image: image) else { return }

// Run inference
let segmentationResult = try segmenter.segment(mlImage: mlImage)

Objective C

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

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

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

// Configure any additional options:
// options.outputType = TFLOutputTypeConfidenceMasks;

TFLImageSegmenter *segmenter = [TFLImageSegmenter imageSegmenterWithOptions:options
                                                                      error:nil];

// Convert the input image to MLImage.
UIImage *image = [UIImage imageNamed:@"plane.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
TFLSegmentationResult *segmentationResult =
    [segmenter segmentWithGMLImage:gmlImage error:nil];

اطّلِع على المصدر الرمز لمزيد من الخيارات لضبط TFLImageSegmenter.

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

الخطوة 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)
segmentation_options = processor.SegmentationOptions(
    output_type=processor.SegmentationOptions.output_type.CATEGORY_MASK)
options = vision.ImageSegmenterOptions(base_options=base_options, segmentation_options=segmentation_options)
segmenter = vision.ImageSegmenter.create_from_options(options)

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

# Run inference
image_file = vision.TensorImage.create_from_file(image_path)
segmentation_result = segmenter.segment(image_file)

اطّلِع على المصدر الرمز لمزيد من الخيارات لضبط ImageSegmenter.

تنفيذ الاستنتاج بلغة C++

// Initialization
ImageSegmenterOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<ImageSegmenter> image_segmenter = ImageSegmenter::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 SegmentationResult result = image_segmenter->Segment(*frame_buffer).value();

اطّلِع على المصدر الرمز لمزيد من الخيارات لضبط ImageSegmenter.

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

وفيما يلي مثال لنتائج تقسيم إلى شرائح deeplab_v3، نموذج تقسيم عام متاح على TensorFlow Hub.

طائرة

Color Legend:
 (r: 000, g: 000, b: 000):
  index       : 0
  class name  : background
 (r: 128, g: 000, b: 000):
  index       : 1
  class name  : aeroplane

# (omitting multiple lines for conciseness) ...

 (r: 128, g: 192, b: 000):
  index       : 19
  class name  : train
 (r: 000, g: 064, b: 128):
  index       : 20
  class name  : tv
Tip: use a color picker on the output PNG file to inspect the output mask with
this legend.

من المفترض أن يظهر قناع فئة التصنيف على النحو التالي:

segmentation-output

جرِّب استخدام أداة CLI التجريبية البسيطة ImageSegmenter باستخدام نموذجك الخاص وبيانات الاختبار.

متطلبات توافق النموذج

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

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

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

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