TensorFlow Lite در خدمات Google Play

TensorFlow Lite در زمان اجرای سرویس‌های Google Play برای همه دستگاه‌های اندرویدی که نسخه فعلی سرویس‌های Play را اجرا می‌کنند در دسترس است. این زمان اجرا به شما امکان می‌دهد مدل‌های یادگیری ماشین (ML) را بدون جمع‌بندی استاتیک کتابخانه‌های TensorFlow Lite در برنامه خود اجرا کنید.

با Google Play Services API، می‌توانید اندازه برنامه‌های خود را کاهش دهید و از آخرین نسخه پایدار کتابخانه‌ها، عملکرد بهتری کسب کنید. TensorFlow Lite در خدمات Google Play روش توصیه شده برای استفاده از TensorFlow Lite در اندروید است.

می‌توانید با اجرای Quickstart که راهنمای گام به گام برای پیاده‌سازی یک نمونه برنامه کاربردی است، با زمان اجرا خدمات Play شروع کنید. اگر قبلاً از TensorFlow Lite مستقل در برنامه خود استفاده می کنید، برای به روز رسانی یک برنامه موجود برای استفاده از زمان اجرا سرویس های Play، به بخش مهاجرت از TensorFlow Lite مستقل مراجعه کنید. برای اطلاعات بیشتر در مورد خدمات Google Play، به وب سایت خدمات Google Play مراجعه کنید.

با استفاده از زمان اجرا خدمات Play

TensorFlow Lite در خدمات Google Play از طریق TensorFlow Lite Task API و TensorFlow Lite Interpreter API در دسترس است. Task Library رابط‌های مدل خارج از جعبه بهینه‌سازی شده را برای کارهای رایج یادگیری ماشین با استفاده از داده‌های بصری، صوتی و متنی ارائه می‌کند. TensorFlow Lite Interpreter API، ارائه شده توسط TensorFlow زمان اجرا و کتابخانه های پشتیبانی، یک رابط کاربری عمومی تری برای ساخت و اجرای مدل های ML ارائه می دهد.

بخش‌های زیر دستورالعمل‌هایی درباره نحوه پیاده‌سازی APIهای مترجم و کتابخانه وظیفه در سرویس‌های Google Play ارائه می‌کنند. در حالی که ممکن است یک برنامه از هر دو APIهای Interpreter و Task Library استفاده کند، اکثر برنامه‌ها فقط باید از یک مجموعه API استفاده کنند.

استفاده از Task Library API

API TensorFlow Lite Task API Interpreter را می‌پیچد و یک رابط برنامه‌نویسی سطح بالا برای کارهای رایج یادگیری ماشینی که از داده‌های بصری، صوتی و متنی استفاده می‌کنند، فراهم می‌کند. اگر برنامه شما به یکی از وظایف پشتیبانی شده نیاز دارد، باید از Task API استفاده کنید.

1. وابستگی های پروژه را اضافه کنید

وابستگی پروژه شما به مورد استفاده از یادگیری ماشین شما بستگی دارد. Task API ها شامل کتابخانه های زیر هستند:

  • کتابخانه ویژن: org.tensorflow:tensorflow-lite-task-vision-play-services
  • کتابخانه صوتی: org.tensorflow:tensorflow-lite-task-audio-play-services
  • کتابخانه متن: org.tensorflow:tensorflow-lite-task-text-play-services

یکی از وابستگی ها را به کد پروژه برنامه خود اضافه کنید تا به API خدمات Play برای TensorFlow Lite دسترسی داشته باشید. به عنوان مثال، از موارد زیر برای اجرای یک کار چشم انداز استفاده کنید:

dependencies {
...
    implementation 'org.tensorflow:tensorflow-lite-task-vision-play-services:0.4.2'
...
}

2. مقداردهی اولیه TensorFlow Lite را اضافه کنید

قبل از استفاده از API های TensorFlow Lite، مؤلفه TensorFlow Lite را در API خدمات Google Play راه اندازی کنید. مثال زیر کتابخانه vision را مقداردهی اولیه می کند:

کاتلین

init {
  TfLiteVision.initialize(context)
    }
  }

3. استنتاج ها را اجرا کنید

پس از مقداردهی اولیه مولفه TensorFlow Lite، متد detect() را برای تولید استنتاج فراخوانی کنید. کد دقیق در متد detect() بسته به کتابخانه و مورد استفاده متفاوت است. موارد زیر برای یک مورد استفاده از تشخیص شی ساده با کتابخانه TfLiteVision است:

کاتلین

fun detect(...) {
  if (!TfLiteVision.isInitialized()) {
    Log.e(TAG, "detect: TfLiteVision is not initialized yet")
    return
  }

  if (objectDetector == null) {
    setupObjectDetector()
  }

  ...

}

بسته به فرمت داده، ممکن است لازم باشد قبل از ایجاد استنتاج، داده های خود را در متد detect() از پیش پردازش و تبدیل کنید. به عنوان مثال، داده های تصویر برای یک آشکارساز شی به موارد زیر نیاز دارد:

val imageProcessor = ImageProcessor.Builder().add(Rot90Op(-imageRotation / 90)).build()
val tensorImage = imageProcessor.process(TensorImage.fromBitmap(image))
val results = objectDetector?.detect(tensorImage)

استفاده از Interpreter API

APIهای Interpreter کنترل و انعطاف بیشتری نسبت به APIهای Task Library ارائه می دهند. اگر وظیفه یادگیری ماشین شما توسط کتابخانه Task پشتیبانی نمی شود، یا اگر به یک رابط کاربری عمومی تری برای ساخت و اجرای مدل های ML نیاز دارید، باید از API های مترجم استفاده کنید.

1. وابستگی های پروژه را اضافه کنید

برای دسترسی به API خدمات Play برای TensorFlow Lite، وابستگی‌های زیر را به کد پروژه برنامه خود اضافه کنید:

dependencies {
...
    // Tensorflow Lite dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
    // Optional: include Tensorflow Lite Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.1'
...
}

2. مقداردهی اولیه TensorFlow Lite را اضافه کنید

قبل از استفاده از API های TensorFlow Lite، مؤلفه TensorFlow Lite را در API خدمات Google Play راه اندازی کنید:

کاتلین

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

جاوا

Task<Void> initializeTask = TfLite.initialize(context);

3. یک مترجم ایجاد کنید و گزینه زمان اجرا را تنظیم کنید

یک مفسر با استفاده از InterpreterApi.create() ایجاد کنید و آن را برای استفاده از زمان اجرا سرویس های Google Play، با فراخوانی InterpreterApi.Options.setRuntime() پیکربندی کنید، همانطور که در کد مثال زیر نشان داده شده است:

کاتلین

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private lateinit var interpreter: InterpreterApi
...
initializeTask.addOnSuccessListener {
  val interpreterOption =
    InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  interpreter = InterpreterApi.create(
    modelBuffer,
    interpreterOption
  )}
  .addOnFailureListener { e ->
    Log.e("Interpreter", "Cannot initialize interpreter", e)
  }

جاوا

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private InterpreterApi interpreter;
...
initializeTask.addOnSuccessListener(a -> {
    interpreter = InterpreterApi.create(modelBuffer,
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY));
  })
  .addOnFailureListener(e -> {
    Log.e("Interpreter", String.format("Cannot initialize interpreter: %s",
          e.getMessage()));
  });

شما باید از پیاده سازی بالا استفاده کنید زیرا از مسدود کردن رشته رابط کاربری اندروید جلوگیری می کند. اگر نیاز به مدیریت دقیق‌تر اجرای رشته دارید، می‌توانید یک فراخوانی Tasks.await() به ایجاد مفسر اضافه کنید:

کاتلین

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

جاوا

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. استنتاج ها را اجرا کنید

با استفاده از شی interpreter که ایجاد کردید، متد run() را برای ایجاد استنتاج فراخوانی کنید.

کاتلین

interpreter.run(inputBuffer, outputBuffer)

جاوا

interpreter.run(inputBuffer, outputBuffer);

شتاب سخت افزاری

TensorFlow Lite به شما امکان می دهد با استفاده از پردازنده های سخت افزاری تخصصی، مانند واحدهای پردازش گرافیکی (GPU) عملکرد مدل خود را تسریع بخشید. شما می توانید با استفاده از درایورهای سخت افزاری به نام delegates از این پردازنده های تخصصی بهره ببرید. می‌توانید از نمایندگان شتاب سخت‌افزار زیر با TensorFlow Lite در خدمات Google Play استفاده کنید:

  • نماینده GPU (توصیه می‌شود) - این نماینده از طریق سرویس‌های Google Play ارائه می‌شود و به صورت پویا بارگیری می‌شود، درست مانند نسخه‌های خدمات Play Task API و Interpreter API.

  • نماینده NNAPI - این نماینده به عنوان یک وابستگی کتابخانه گنجانده شده در پروژه توسعه Android شما موجود است و در برنامه شما همراه است.

برای اطلاعات بیشتر در مورد شتاب سخت افزاری با TensorFlow Lite، به صفحه TensorFlow Lite Delegates مراجعه کنید.

بررسی سازگاری دستگاه

همه دستگاه ها از شتاب سخت افزاری GPU با TFLite پشتیبانی نمی کنند. به منظور کاهش خطاها و خرابی‌های احتمالی، از روش TfLiteGpu.isGpuDelegateAvailable برای بررسی سازگاری دستگاه با نماینده GPU استفاده کنید.

از این روش برای تأیید سازگاری دستگاه با GPU استفاده کنید و از CPU یا نماینده NNAPI به عنوان جایگزین برای زمانی که GPU پشتیبانی نمی شود استفاده کنید.

useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

هنگامی که متغیری مانند useGpuTask دارید، می توانید از آن برای تعیین اینکه آیا دستگاه ها از نماینده GPU استفاده می کنند یا خیر استفاده کنید. مثال‌های زیر نشان می‌دهند که چگونه می‌توان این کار را با Task Library و Interpreter API انجام داد.

با Task Api

کاتلین

lateinit val optionsTask = useGpuTask.continueWith { task ->
  val baseOptionsBuilder = BaseOptions.builder()
  if (task.result) {
    baseOptionsBuilder.useGpu()
  }
 ObjectDetectorOptions.builder()
          .setBaseOptions(baseOptionsBuilder.build())
          .setMaxResults(1)
          .build()
}
    

جاوا

Task<ObjectDetectorOptions> optionsTask = useGpuTask.continueWith({ task ->
  BaseOptions baseOptionsBuilder = BaseOptions.builder();
  if (task.getResult()) {
    baseOptionsBuilder.useGpu();
  }
  return ObjectDetectorOptions.builder()
          .setBaseOptions(baseOptionsBuilder.build())
          .setMaxResults(1)
          .build()
});
    

با مترجم Api

کاتلین

val interpreterTask = useGpuTask.continueWith { task ->
  val interpreterOptions = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  if (task.result) {
      interpreterOptions.addDelegateFactory(GpuDelegateFactory())
  }
  InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions)
}
    

جاوا

Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task ->
  InterpreterApi.Options options =
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY);
  if (task.getResult()) {
     options.addDelegateFactory(new GpuDelegateFactory());
  }
  return options;
});
    

GPU با APIهای Task Library

برای استفاده از نماینده GPU با Task API:

  1. برای استفاده از نماینده GPU از خدمات Play، وابستگی های پروژه را به روز کنید:

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
    
  2. نماینده GPU را با setEnableGpuDelegateSupport راه اندازی کنید. به عنوان مثال، می توانید نماینده GPU را برای TfLiteVision با موارد زیر مقداردهی کنید:

    کاتلین

        TfLiteVision.initialize(context, TfLiteInitializationOptions.builder().setEnableGpuDelegateSupport(true).build())
        

    جاوا

        TfLiteVision.initialize(context, TfLiteInitializationOptions.builder().setEnableGpuDelegateSupport(true).build());
        
  3. با BaseOptions گزینه GPU delegate را فعال کنید:

    کاتلین

        val baseOptions = BaseOptions.builder().useGpu().build()
        

    جاوا

        BaseOptions baseOptions = BaseOptions.builder().useGpu().build();
        
  4. تنظیمات را با استفاده از .setBaseOptions پیکربندی کنید. به عنوان مثال، می توانید GPU را در ObjectDetector با موارد زیر تنظیم کنید:

    کاتلین

        val options =
            ObjectDetectorOptions.builder()
                .setBaseOptions(baseOptions)
                .setMaxResults(1)
                .build()
        

    جاوا

        ObjectDetectorOptions options =
            ObjectDetectorOptions.builder()
                .setBaseOptions(baseOptions)
                .setMaxResults(1)
                .build();
        

GPU با Interpreter API

برای استفاده از نماینده GPU با Interpreter API:

  1. برای استفاده از نماینده GPU از خدمات Play، وابستگی های پروژه را به روز کنید:

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
    
  2. گزینه GPU delegate را در مقداردهی اولیه TFlite فعال کنید:

    کاتلین

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build())
        

    جاوا

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build());
        
  3. با فراخوانی addDelegateFactory() در InterpreterApi.Options() delegate GPU را در گزینه های مترجم تنظیم کنید تا از DelegateFactory استفاده کند:

    کاتلین

        val interpreterOption = InterpreterApi.Options()
         .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
         .addDelegateFactory(GpuDelegateFactory())
        

    جاوا

        Options interpreterOption = InterpreterApi.Options()
          .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
          .addDelegateFactory(new GpuDelegateFactory());
        

مهاجرت از TensorFlow Lite مستقل

اگر می‌خواهید برنامه خود را از TensorFlow Lite مستقل به API خدمات Play منتقل کنید، دستورالعمل‌های اضافی زیر را برای به‌روزرسانی کد پروژه برنامه خود مرور کنید:

  1. بخش محدودیت‌ها را در این صفحه مرور کنید تا مطمئن شوید که مورد استفاده شما پشتیبانی می‌شود.
  2. قبل از به‌روزرسانی کد خود، بررسی‌های عملکرد و دقت مدل‌های خود را انجام دهید، به‌ویژه اگر از نسخه‌های TensorFlow Lite زودتر از نسخه ۲.۱ استفاده می‌کنید، بنابراین یک خط پایه برای مقایسه با اجرای جدید دارید.
  3. اگر تمام کد خود را برای استفاده از API خدمات Play برای TensorFlow Lite منتقل کرده‌اید، باید وابستگی‌های کتابخانه زمان اجرا TensorFlow Lite (ورودی‌هایی با org.tensorflow: tensorflow-lite :* ) را از فایل build.gradle خود حذف کنید تا می تواند اندازه برنامه شما را کاهش دهد.
  4. همه موارد ایجاد شئ new Interpreter را در کد خود شناسایی کنید و آن را طوری تغییر دهید که از فراخوانی InterpreterApi.create() استفاده کند. این API جدید ناهمزمان است، به این معنی که در بیشتر موارد جایگزینی حذفی نیست و شما باید برای زمانی که تماس کامل شود، شنونده ثبت کنید. به قطعه کد در کد مرحله 3 مراجعه کنید.
  5. افزودن import org.tensorflow.lite.InterpreterApi; و import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; به هر فایل منبعی با استفاده از کلاس های org.tensorflow.lite.Interpreter یا org.tensorflow.lite.InterpreterApi .
  6. اگر هر یک از فراخوانی‌های InterpreterApi.create() فقط یک آرگومان دارد، new InterpreterApi.Options() به لیست آرگومان اضافه کنید.
  7. .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) را به آخرین آرگومان هر فراخوانی به InterpreterApi.create() اضافه کنید.
  8. همه رخدادهای دیگر کلاس org.tensorflow.lite.Interpreter را با org.tensorflow.lite.InterpreterApi جایگزین کنید.

اگر می خواهید از TensorFlow Lite مستقل و API خدمات Play در کنار هم استفاده کنید، باید از TensorFlow Lite 2.9 (یا جدیدتر) استفاده کنید. TensorFlow Lite 2.8 و نسخه های قبلی با نسخه API خدمات Play سازگار نیستند.

محدودیت ها

TensorFlow Lite در سرویس‌های Google Play دارای محدودیت‌های زیر است:

  • پشتیبانی از نمایندگان شتاب سخت‌افزار محدود به نمایندگانی است که در بخش شتاب سخت‌افزار فهرست شده‌اند. هیچ نماینده شتاب دیگری پشتیبانی نمی شود.
  • دسترسی به TensorFlow Lite از طریق API های بومی پشتیبانی نمی شود. فقط APIهای جاوا TensorFlow Lite از طریق خدمات Google Play در دسترس هستند.
  • APIهای آزمایشی یا منسوخ شده TensorFlow Lite، از جمله عملیات سفارشی، پشتیبانی نمی‌شوند.

پشتیبانی و بازخورد

می توانید از طریق ردیاب مشکل TensorFlow بازخورد ارائه دهید و پشتیبانی دریافت کنید. لطفاً مشکلات و درخواست‌های پشتیبانی را با استفاده از الگوی Issue برای TensorFlow Lite در خدمات Google Play گزارش دهید.

شرایط استفاده از خدمات

استفاده از TensorFlow Lite در APIهای خدمات Google Play تابع شرایط خدمات Google APIs است.

حریم خصوصی و جمع آوری داده ها

وقتی از TensorFlow Lite در APIهای خدمات Google Play استفاده می‌کنید، پردازش داده‌های ورودی، مانند تصاویر، ویدیو، متن، به طور کامل در دستگاه انجام می‌شود و TensorFlow Lite در APIهای خدمات Google Play آن داده‌ها را به سرورهای Google ارسال نمی‌کند. در نتیجه، می‌توانید از APIهای ما برای پردازش داده‌هایی که نباید از دستگاه خارج شوند استفاده کنید.

TensorFlow Lite در APIهای خدمات Google Play ممکن است هر از چند گاهی با سرورهای Google تماس بگیرد تا مواردی مانند رفع اشکال، مدل‌های به‌روزرسانی شده و اطلاعات سازگاری شتاب‌دهنده سخت‌افزار را دریافت کند. TensorFlow Lite در APIهای خدمات Google Play نیز معیارهایی را درباره عملکرد و استفاده از APIهای موجود در برنامه شما به Google ارسال می کند. Google از این داده‌های اندازه‌گیری برای اندازه‌گیری عملکرد، اشکال‌زدایی، حفظ و بهبود APIها، و شناسایی سوء استفاده یا سوء استفاده استفاده می‌کند، همانطور که در خط‌مشی رازداری ما توضیح داده شده است.

شما مسئول اطلاع رسانی به کاربران برنامه خود در مورد پردازش Google TensorFlow Lite در داده‌های معیارهای API خدمات Google Play هستید که طبق قانون قابل اجرا الزامی است.

داده هایی که جمع آوری می کنیم شامل موارد زیر است:

  • اطلاعات دستگاه (مانند سازنده، مدل، نسخه سیستم عامل و ساخت) و شتاب دهنده های سخت افزاری موجود ML (GPU و DSP). برای تشخیص و تجزیه و تحلیل استفاده استفاده می شود.
  • شناسه دستگاه مورد استفاده برای تشخیص و تجزیه و تحلیل استفاده.
  • اطلاعات برنامه (نام بسته، نسخه برنامه). برای تشخیص و تجزیه و تحلیل استفاده استفاده می شود.
  • پیکربندی API (مانند نمایندگانی که در حال استفاده هستند). برای تشخیص و تجزیه و تحلیل استفاده استفاده می شود.
  • نوع رویداد (مانند ایجاد مفسر، استنتاج). برای تشخیص و تجزیه و تحلیل استفاده استفاده می شود.
  • کدهای خطا برای تشخیص استفاده می شود.
  • معیارهای عملکرد. برای تشخیص استفاده می شود.

مراحل بعدی

برای اطلاعات بیشتر در مورد پیاده سازی یادگیری ماشین در برنامه تلفن همراه خود با TensorFlow Lite، به راهنمای توسعه دهنده TensorFlow Lite مراجعه کنید. می‌توانید مدل‌های اضافی TensorFlow Lite را برای طبقه‌بندی تصویر، تشخیص اشیا و سایر برنامه‌ها در TensorFlow Hub پیدا کنید.