سوالی دارید؟ در انجمن بازدید از انجمن TensorFlow با انجمن ارتباط برقرار کنید

یکپارچه سازی ردیاب های جسم

ردیاب های اشیا می توانند شناسایی کنند که کدام یک از مجموعه های شناخته شده اشیا ممکن است وجود داشته باشد و اطلاعاتی در مورد موقعیت آنها در تصویر داده شده یا جریان ویدئویی فراهم می کنند. ردیاب اشیا آموزش داده می شود تا وجود و مکان چندین کلاس اشیا را تشخیص دهد. به عنوان مثال ، یک مدل ممکن است با تصاویری که حاوی تکه های مختلف میوه است ، همراه با برچسبی که کلاس میوه آنها را نشان می دهد (به عنوان مثال یک سیب ، یک موز یا یک توت فرنگی) و داده هایی که مشخص می کند هر شی در کجا ظاهر می شود تصویر. برای اطلاعات بیشتر در مورد ردیاب های اشیا به معرفی شی object رجوع کنید.

از API Library ObjectDetector برای استقرار آشکارسازهای شی object سفارشی یا موارد آموزش دیده خود در برنامه های تلفن همراه خود استفاده کنید.

ویژگی های اصلی ObjectDetector API

  • پردازش تصویر ورودی ، از جمله چرخش ، تغییر اندازه و تبدیل فضای رنگ.

  • برچسب محلی نقشه

  • آستانه امتیاز برای فیلتر کردن نتایج.

  • نتایج تشخیص top-k.

  • لیست مجاز و برچسب زدن

مدل های ردیاب شی object پشتیبانی شده

تضمین شده است که مدل های زیر با ObjectDetector API سازگار ObjectDetector .

استنباط را در جاوا اجرا کنید

برای مشاهده نمونه ای از نحوه استفاده از ObjectDetector در برنامه Android ، به برنامه مرجع تشخیص شی ObjectDetector کنید.

مرحله 1: وارد کردن وابستگی Gradle و سایر تنظیمات

پرونده مدل .tflite را در فهرست دارایی های ماژول Android که مدل در آن اجرا می شود کپی کنید. مشخص کنید که فایل نباید فشرده شود و کتابخانه build.gradle Lite را به پرونده build.gradle ماژول 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:0.2.0'
}

مرحله 2: استفاده از مدل

// Initialization
ObjectDetectorOptions options = ObjectDetectorOptions.builder().setMaxResults(1).build();
ObjectDetector objectDetector = ObjectDetector.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Detection> results = objectDetector.detect(image);

برای گزینه های بیشتر برای پیکربندی ObjectDetector کد منبع و javadoc را مشاهده کنید.

استنباط را در ++ C اجرا کنید

// Initialization
ObjectDetectorOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<ObjectDetector> object_detector = ObjectDetector::CreateFromOptions(options).value();

// Run inference
const DetectionResult result = object_detector->Detect(*frame_buffer).value();

برای گزینه های بیشتر برای پیکربندی ObjectDetector کد منبع را مشاهده کنید.

نتایج مثال

در اینجا مثالی از نتایج تشخیص ssd mobilenet v1 از TensorFlow Hub وجود دارد.

سگ ها

Results:
 Detection #0 (red):
  Box: (x: 355, y: 133, w: 190, h: 206)
  Top-1 class:
   index       : 17
   score       : 0.73828
   class name  : dog
 Detection #1 (green):
  Box: (x: 103, y: 15, w: 138, h: 369)
  Top-1 class:
   index       : 17
   score       : 0.73047
   class name  : dog

جعبه های مرزی را روی تصویر ورودی قرار دهید:

خروجی تشخیص

با مدل و داده های آزمایشی خود ، از ابزار آزمایشی ساده CLI برای ObjectDetector استفاده کنید.

الزامات سازگاری مدل

ObjectDetector API انتظار یک مدل TFLite با فراداده مدل اجباری TFLite را دارد . نمونه هایی از ایجاد فراداده برای ردیاب های اشیا using را با استفاده از TensorFlow Lite Metadata Writer API مشاهده کنید .

مدلهای آشکارساز شی سازگار باید شرایط زیر را داشته باشند:

  • سنسور تصویر ورودی: (kTfLiteUInt8 / kTfLiteFloat32)

    • ورودی تصویر از اندازه [batch x height x width x channels] .
    • استنباط دسته ای پشتیبانی نمی شود ( batch لازم است 1 باشد).
    • فقط ورودی های RGB پشتیبانی می شوند (لازم است channels 3 باشد).
    • اگر نوع kTfLiteFloat32 باشد ، برای عادی سازی ورودی لازم است گزینه های Normalization به متادیتا پیوست شوند.
  • DetectionPostProcess خروجی باید 4 خروجی DetectionPostProcess ، یعنی:

    • تانسور مکان ها (kTfLiteFloat32)

      • تنسور به اندازه [1 x num_results x 4] ، آرایه داخلی نشان دهنده جعبه های محدود کننده به شکل [بالا ، چپ ، راست ، پایین] است.

      • BoundingBoxProperties لازم است که به فراداده ضمیمه شود و باید type=BOUNDARIES و `coordinate_type = RATIO را مشخص کند.

    • تانسور کلاسها (kTfLiteFloat32)

      • تنسور اندازه [1 x num_results] ، هر مقدار نمایانگر شاخص صحیح یک کلاس است.

      • نقشه (های) اختیاری (اما توصیه شده) را می توان بصورت AssociatedFile-type با نوع TENSOR_VALUE_LABELS پیوست کرد ، حاوی یک برچسب در هر خط. اولین فایل AssociatedFile (در صورت وجود) برای پر کردن قسمت class_name نتایج استفاده می شود. قسمت display_name از AssociatedFile (در صورت وجود) پر شده است که محل آن با قسمت display_names_locale از ObjectDetectorOptions استفاده شده در زمان ایجاد ObjectDetectorOptions ("en" به طور پیش فرض ، به انگلیسی). اگر هیچ یک از اینها موجود نباشد ، فقط قسمت index نتایج پر می شود.

    • تانسور امتیازات (kTfLiteFloat32)

      • تنسور به اندازه [1 x num_results] ، هر مقدار نشان دهنده نمره شی کشف شده است.
    • تعداد سنسور تشخیص (kTfLiteFloat32)

      • عدد عدد صحیح به عنوان تنسور اندازه [1] .