۱. مقدمه


توجه: این آزمایشگاه کد برای آزمایش به یک دستگاه فیزیکی نیاز دارد.
TensorFlow یک چارچوب یادگیری ماشین چندمنظوره است. TensorFlow را میتوان در هر جایی از آموزش مدلهای عظیم در خوشههای ابری گرفته تا اجرای مدلها به صورت محلی روی یک سیستم تعبیهشده مانند تلفن شما استفاده کرد.
این آزمایشگاه کد از TensorFlow Lite برای اجرای یک مدل تشخیص تصویر روی دستگاه اندروید استفاده میکند.
اندروید استودیو ۴.۱ یا بالاتر را نصب کنید
اگر از قبل آن را نصب نکردهاید، در حین آموزش مدل TensorFlow Lite خود ، AndroidStudio 4.1 یا بالاتر را دانلود و نصب کنید .
آنچه یاد خواهید گرفت
- چگونه با استفاده از TensorFlow Lite Model Maker، طبقهبندیکننده تصویر سفارشی خود را آموزش دهیم؟
- نحوه استفاده از اندروید استودیو برای وارد کردن مدل TensorFlow Lite جهت ادغام مدل سفارشی در یک برنامه اندروید با استفاده از CameraX.
- نحوه استفاده از پردازنده گرافیکی (GPU) در گوشی برای سرعت بخشیدن به مدل
آنچه خواهید ساخت
یک اپلیکیشن دوربین ساده که یک برنامه تشخیص تصویر TensorFlow را برای شناسایی گلها اجرا میکند.

مجوز: استفاده رایگان
۲. آموزش یک تشخیصدهنده گل با استفاده از Colab
قبل از شروع آموزش مدل، دانلود و نصب اندروید استودیو ۴.۱ یا بالاتر را شروع کنید.
Colab را باز کنید که نحوه آموزش یک طبقهبندیکننده با Keras را برای تشخیص گلها با استفاده از یادگیری انتقالی TensorFlow Lite نشان میدهد.
۳. دایرکتوری کاری را تنظیم کنید
مخزن گیت را کلون کنید
دستور زیر مخزن گیت حاوی فایلهای مورد نیاز برای این آزمایشگاه کد را کلون میکند:
git clone https://github.com/hoitab/TFLClassify.git
سپس، به دایرکتوری که مخزن را کلون کردهاید بروید. اینجا جایی است که در ادامهی این آزمایشگاه کد روی آن کار خواهید کرد:
cd TFLClassify
۴. برنامه اسکلت اندروید را تنظیم کنید

اندروید استودیو ۴.۱ یا بالاتر را نصب کنید
اگر از قبل آن را نصب نکردهاید، AndroidStudio 4.1 یا بالاتر را نصب کنید .
پروژه را با اندروید استودیو باز کنید
با انجام مراحل زیر، یک پروژه را با اندروید استودیو باز کنید:
- اندروید استودیو را باز کنید
پس از بارگذاری، از این پنجره، گزینه «باز کردن یک پروژه موجود» را انتخاب کنید:

- در انتخابگر فایل،
TFLClassify/build.gradleرا از دایرکتوری کاری خود انتخاب کنید.
- اولین باری که پروژه را باز میکنید، یک پنجرهی «همگامسازی گرادل» (Gradle Sync) نمایش داده میشود که در مورد استفاده از gradle wrapper سوال میکند. روی «تأیید» (OK) کلیک کنید.

- اگر قبلاً مدل توسعهدهنده و اشکالزدایی USB را روی گوشی خود فعال نکردهاید، آنها را فعال کنید. این تنظیمات فقط یک بار انجام میشوند. این دستورالعملها را دنبال کنید.
- وقتی پروژه و گوشی شما آماده شد، میتوانید با انتخاب
TFL_Classify.startو فشردن دکمه اجرا، آن را روی یک دستگاه واقعی اجرا کنید.
در نوار ابزار:

- حالا به Tensorflow Demo اجازه دهید به دوربین شما دسترسی داشته باشد:

- صفحه زیر را روی گوشی خود مشاهده خواهید کرد که در آن اعداد تصادفی جای نتایج واقعی را گرفتهاند.

۵. اضافه کردن TensorFlow Lite به برنامه اندروید
- ماژول
startرا در کاوشگر پروژه در سمت چپ انتخاب کنید:

- روی ماژول
startکلیک راست کنید یا رویFileکلیک کنید، سپسNew>Other>TensorFlow Lite Modelکنید.

- محل مدلی را که
FlowerModel.tfliteآموزشدیده سفارشی را قبلاً دانلود کردهاید، انتخاب کنید.

-
Finishکلیک کنید. - در پایان تصویر زیر را مشاهده خواهید کرد. فایل FlowerModel.tflite با موفقیت وارد شده است و اطلاعات سطح بالایی در مورد مدل از جمله ورودی/خروجی و همچنین برخی از کدهای نمونه برای شروع کار را نشان میدهد.

۶. اختیاری: بررسی تمام لیست کارها
لیست TODO، پیمایش به مکان دقیقی که باید codelab را بهروزرسانی کنید، آسان میکند. همچنین میتوانید از آن در پروژه اندروید خود برای یادآوری کارهای آینده استفاده کنید. میتوانید با استفاده از کامنتهای کد و تایپ کلمه کلیدی TODO موارد TODO را اضافه کنید. برای دسترسی به لیست TODOها، میتوانید:
- یک راه عالی برای دیدن کاری که قرار است انجام دهیم، بررسی لیست TODO است. برای انجام این کار، از نوار منوی بالا
View>Tool Windows>TODOرا انتخاب کنید.

- به طور پیشفرض، تمام TODOها را در تمام ماژولها فهرست میکند که کمی گیجکننده است. میتوانیم فقط TODOهای شروع را با کلیک روی دکمه گروهبندی در کنار پنل TODO و انتخاب
Modulesمرتب کنیم.

- تمام موارد زیر ماژولهای شروع را گسترش دهید:

۷. مدل سفارشی را با TensorFlow Lite اجرا کنید
- روی TODO 1 در لیست TODO کلیک کنید یا فایل MainActivity.kt را باز کنید و TODO 1 را پیدا کنید، مدل را با اضافه کردن این خط مقداردهی اولیه کنید:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
...
// TODO 1: Add class variable TensorFlow Lite Model
private val flowerModel = FlowerModel.newInstance(ctx)
...
}
- درون متد analyze برای تحلیلگر CameraX، باید ورودی دوربین
ImageProxyبه یکBitmapتبدیل کنیم و یک شیءTensorImageبرای فرآیند استنتاج ایجاد کنیم.
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 2: Convert Image to Bitmap then to TensorImage
val tfImage = TensorImage.fromBitmap(toBitmap(imageProxy))
...
}
- تصویر را پردازش کنید و عملیات زیر را روی نتیجه انجام دهید:
- نتایج را بر اساس احتمال، به صورت نزولی و زیر
scoreویژگی با بالاترین احتمال، مرتب کنید. - k نتیجه برتر را که توسط ثابت
MAX_RESULT_DISPLAYتعریف شده است، در نظر بگیرید. میتوانید به صورت اختیاری مقدار این متغیر را تغییر دهید تا نتایج کمتر یا بیشتری دریافت کنید.
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 3: Process the image using the trained model, sort and pick out the top results
val outputs = flowerModel.process(tfImage)
.probabilityAsCategoryList.apply {
sortByDescending { it.score } // Sort with highest confidence first
}.take(MAX_RESULT_DISPLAY) // take the top results
...
}
- تبدیل نتایج مرتبشده و فیلترشده به اشیاء دادهی
Recognitionکه آمادهی استفاده توسطRecyclerViewاز طریق Data Binding هستند:
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 4: Converting the top probability items into a list of recognitions
for (output in outputs) {
items.add(Recognition(output.label, output.score))
}
...
}
- خطوط زیر را که به تولید نتایج جعلی که قبلاً میبینیم کمک میکنند، کامنت کنید یا حذف کنید:
// START - Placeholder code at the start of the codelab. Comment this block of code out.
for (i in 0..MAX_RESULT_DISPLAY-1){
items.add(Recognition("Fake label $i", Random.nextFloat()))
}
// END - Placeholder code at the start of the codelab. Comment this block of code out.
- با انتخاب
TFL_Classify.startو فشردن دکمه اجرا، برنامه را روی یک دستگاه واقعی اجرا کنید.
در نوار ابزار:

- صفحه زیر را روی گوشی خود مشاهده خواهید کرد که در آن اعداد تصادفی جای نتایج واقعی را میگیرند:

۸. اختیاری: تسریع استنتاج با نماینده GPU
TensorFlow Lite از چندین شتابدهنده سختافزاری برای سرعت بخشیدن به استنتاج در دستگاه تلفن همراه شما پشتیبانی میکند. GPU یکی از شتابدهندههایی است که TensorFlow Lite میتواند از طریق مکانیسم نماینده از آن بهره ببرد و استفاده از آن نسبتاً آسان است.
- فایل build.gradle را در زیر ماژول
startباز کنید یا میتوانید روی TODO 5 در زیر لیست TODO کلیک کنید و وابستگی زیر را اضافه کنید:
// TODO 5: Optional GPU Delegates
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
- به فایل MainActivity.kt برگردید یا در لیست TODO روی TODO 6 کلیک کنید. شروع ساده flowerModel را با موارد زیر جایگزین کنید: یک نمونه از لیست سازگاری GPU دریافت کنید و GPU را بسته به اینکه آیا یکی از GPU های سازگار ذکر شده است یا خیر، مقداردهی اولیه کنید. در غیر این صورت، 4 رشته CPU را برای اجرای مدل آغاز کنید:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
...
// TODO 1: Add class variable TensorFlow Lite Model
// Initializing the flowerModel by lazy so that it runs in the same thread when the process
// method is called.
private val flowerModel: FlowerModel by lazy{
// TODO 6. Optional GPU acceleration
val compatList = CompatibilityList()
val options = if(compatList.isDelegateSupportedOnThisDevice){
Log.d(TAG, "This device is GPU Compatible ")
Model.Options.Builder().setDevice(Model.Device.GPU).build()
} else {
Log.d(TAG, "This device is GPU Incompatible ")
Model.Options.Builder().setNumThreads(4).build()
}
...
}
- با افزودن
optionsبه ورودی متد، مقداردهی اولیه مدل را برای استفاده از این تغییر دهید:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
private val flowerModel: FlowerModel by lazy{
...
// Initialize the Flower Model
FlowerModel.newInstance(ctx, options)
}
}
- با انتخاب
TFL_Classify.startو فشردن دکمه اجرا، برنامه را روی یک دستگاه واقعی اجرا کنید.
در نوار ابزار:

۹. بعدش چی؟
در اینجا چند لینک برای اطلاعات بیشتر آورده شده است:
- مدلهای TFLite دیگر سازگار با اتصال مدل ML را از tfhub.dev امتحان کنید.
- برای کسب اطلاعات بیشتر در مورد TFLite به مستندات tensorflow.org و مخزن کد مراجعه کنید.
- برخی از مدلهای از پیش آموزشدیدهی TFLite دیگر، از جمله یک آشکارساز کلمات کلیدی گفتار و یک نسخه از پاسخ هوشمند روی دستگاه را امتحان کنید.
- با استفاده از مستندات شروع به کار ما، اطلاعات بیشتری در مورد TensorFlow به طور کلی کسب کنید.