دمج تجزئة الصورة

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

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

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

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

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

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

  • ملصق ملون لغرض العرض.

نماذج تجزئة الصور المدعومة

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

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

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

سويفت

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

ج موضوعية

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

يجب أن يبدو قناع فئة التجزئة كما يلي:

تجزئة الإخراج

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

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

تتوقع ImageSegmenter 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)

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