این راهنما نحوه انتقال از ML Kit برای Firebase ویژه Android را توضیح میدهد.
بهروزرسانی واردات Gradle
«کیت توسعه نرمافزار ML Kit» برای هر ML Kit API فقط به یک وابستگی نیاز دارد. نیازی نیست کتابخانههای رایج مثل firebase-ml-vision یا firebase-ml-natural-language را مشخص کنید. «کیت یادگیری ماشین» از فضای نام com.google.android.gms
برای کتابخانههایی که به «خدمات Google Play» وابسته هستند استفاده میکند.
Vision APIs
مدلهای بستهای بهعنوان بخشی از برنامه شما ارائه میشوند. مدلهای نازک باید بارگیری شوند. برخیاز «میاناهای برنامهسازی کاربردی» هم در قالب دستهای و هم در قالب نازک دردسترس هستند، برخی دیگر فقط در یکی از این دو قالب دردسترس هستند:
| میانای برنامهسازی کاربردی | موجود در بستهبندی | باریک |
|---|---|---|
| تشخیص نوشتار | x (بتا) | x |
| تشخیص چهره | x | x |
| اسکن کردن رمزینه | x | x |
| برچسبگذاری تصویر | x | x |
| تشخیص و ردیابی اشیا | x | - |
وابستگیهای کتابخانههای ML Kit Android را در فایل Gradle واحدتان (سطح برنامه) (معمولاً app/build.gradle.kts) طبق جدولهای زیر بهروز کنید:
مدلهای بستهای
| میانای برنامهسازی کاربردی | آرتیفکتهای قدیمی | آرتیفکت جدید |
|---|---|---|
| اسکن کردن رمزینه | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-barcode-model:16.0.1 |
com.google.mlkit:barcode-scanning:17.3.0 |
| کانتور چهره | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-face-model:19.0.0 |
com.google.mlkit:face-detection:16.1.7 |
| برچسبگذاری تصویر | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-image-label-model:19.0.0 |
com.google.mlkit:image-labeling:17.0.9 |
| تشخیص شیء | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3 |
com.google.mlkit:object-detection:17.0.2 |
مدلهای نازک
| میانای برنامهسازی کاربردی | آرتیفکتهای قدیمی | آرتیفکت جدید |
|---|---|---|
| اسکن کردن رمزینه | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 |
| تشخیص چهره | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-face-detection:17.1.0 |
| تشخیص نوشتار | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-text-recognition:19.0.1 |
AutoMLVision Edge
| میانای برنامهسازی کاربردی | آرتیفکت قدیمی | آرتیفکت جدید |
|---|---|---|
| AutoML بدون بارگیری | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-automl:18.0.3 |
com.google.mlkit:image-labeling-custom:17.0.3 |
| AutoML با بارگیری | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-automl:18.0.3 |
com.google.mlkit:image-labeling-custom:17.0.3
برای میزبانی و بارگیری مدلهای سفارشی، مدلهایتان را به Cloud Storage منتقل کنید و منطق بارگیری را در برنامهتان اضافه کنید تا آنها را بااستفاده از LocalModel بار کنید. برای جزئیات،
راهنمای انتقال Firebase ML به Cloud Storage را ببینید. |
میاناهای برنامهسازی کاربردی زبان طبیعی
مدلهای دستهای بهعنوان بخشی از برنامه شما ارائه میشوند. مدلهای نازک باید بارگیری شوند:
| میانای برنامهسازی کاربردی | موجود در بستهبندی | باریک |
|---|---|---|
| شناسه زبان | x | x |
| پاسخ هوشمند | x | x (بتا) |
وابستگیهای کتابخانههای Android «کیت یادگیری ماشین» را در فایل Gradle (معمولاً app/build.gradle.kts) واحدتان (سطح برنامه) مطابق با جدولهای زیر بهروز کنید:
مدلهای بستهای
| میانای برنامهسازی کاربردی | آرتیفکتهای قدیمی | خروجی ساختاریافته جدید |
|---|---|---|
| شناسه زبان | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7 |
com.google.mlkit:language-id:17.0.6 |
| پاسخ هوشمند | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7 |
com.google.mlkit:smart-reply:17.0.4 |
مدلهای نازک
| میانای برنامهسازی کاربردی | آرتیفکتهای قدیمی | خروجی ساختاریافته جدید |
|---|---|---|
| شناسه زبان | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7 |
com.google.android.gms:play-services-mlkit-language-id:17.0.0 |
| پاسخ هوشمند | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7 |
com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1 |
بهروزرسانی نام کلاسها
اگر کلاس شما در این جدول نشان داده میشود، تغییرات مشخصشده را اعمال کنید:
| کلاس قدیمی | کلاس جدید |
|---|---|
| com.google.firebase.ml.common.FirebaseMLException | com.google.mlkit.common.MlKitException |
| com.google.firebase.ml.vision.common.FirebaseVisionImage | com.google.mlkit.vision.common.InputImage |
| com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector | com.google.mlkit.vision.barcode.BarcodeScanner |
| com.google.firebase.ml.vision.labeler.FirebaseVisionImageLabel | com.google.mlkit.vision.label.ImageLabeler |
| com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector | com.google.mlkit.vision.barcode.BarcodeScanner |
| com.google.firebase.ml.vision.automl.FirebaseAutoMLLocalModel | com.google.mlkit.common.model.LocalModel |
| com.google.firebase.ml.vision.automl.FirebaseAutoMLRemoteModel | com.google.mlkit.common.model.LocalModel به بارگیری دستی نیاز دارد. مدلهای ازراهدور میزبانیشده در Firebase منسوخ شدهاند. برای جزئیات، به راهنمای انتقال Firebase ML به Cloud Storage مراجعه کنید. |
| com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceImageLabelerOptions | com.google.mlkit.vision.label.defaults.ImageLabelerOptions |
| com.google.firebase.ml.vision.label.FirebaseVisionImageLabel | com.google.mlkit.vision.label.ImageLabel |
| com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceAutoMLImageLabelerOptions | com.google.mlkit.vision.label.custom.CustomImageLabelerOptions |
| com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions | com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions |
برای کلاسهای دیگر، این قوانین را دنبال کنید:
- پیشوند
FirebaseVisionرا از نام کلاس بردارید. - پیشوندهای دیگری را که با پیشوند
Firebaseشروع میشوند از نام کلاس بردارید.
همچنین، در نام بستهها پیشوند com.google.firebase.ml را
با com.google.mlkit جایگزین کنید.
بهروزرسانی نام روشها
تغییرات کد حداقل است:
- نمونهسازی آشکارساز/اسکنر/برچسبزن/مترجم… تغییر کرده است. اکنون هر ویژگی نقطه ورودی خودش را دارد. برای مثال:
BarcodeScanning،TextRecognition،ImageLabeling،Translation… تماسهای سرویس FirebasegetInstance()با تماسهای روشgetClient()نقطه ورود ویژگی جایگزین میشوند. - نمونهسازی پیشفرض برای
TextRecognizerبرداشته شده است، زیرا کتابخانههای اضافی برای تشخیص دیگر خطوط مانند چینی و کرهای معرفی کردهایم. برای استفاده از گزینههای پیشفرض با مدل تشخیص نوشتار با نویسههای لاتین، وابستگی بهcom.google.android.gms:play-services-mlkit-text-recognitionرا اعلام کنید و ازTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)استفاده کنید. - نمونهسازی پیشفرض برای
ImageLabelerوObjectDetectorبرداشته شده است، زیرا پشتیبانی از مدل سفارشی را برای این دو ویژگی معرفی کردهایم. برای مثال، برای استفاده از گزینههای پیشفرض با مدل پایه درImageLabeling، وابستگی بهcom.google.mlkit:image-labelingرا اعلام کنید و ازImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)در جاوا استفاده کنید. - همه دستگیرهها (آشکارساز/ اسکنر/ برچسبزن/ مترجم/...) بستنی هستند. مطمئن شوید که وقتی دیگر از این اشیا استفاده نمیشود، روش
close()فراخوانده شود. اگر از آنها درFragmentیاAppCompatActivityاستفاده میکنید، یکی از راههای انجام این کار این است کهLifecycleOwner.getLifecycle()را درFragmentیاAppCompatActivityفراخوانی کنید، و سپسLifecycle.addObserverرا فراخوانی کنید. -
processImage()وdetectInImage()در میاناهای برنامهسازی کاربردی Vision برای یکپارچگی بهprocess()تغییر نام دادهاند. - Natural Language API اکنون بهجای «کد زبان» از اصطلاح «برچسب زبان» (همانطور که توسط استاندارد BCP 47 تعریف شده است) استفاده میکند.
- روشهای دریافتکننده در
xxxOptionsکلاس برداشته شده است. - روش
getBitmap()در کلاسInputImage(جایگزین کردنFirebaseVisionImage) دیگر بهعنوان بخشی از میانای عمومی پشتیبانی نمیشود. برای تبدیل کردن نقشه بیتی از ورودیهای مختلف، بهBitmapUtils.javaدر نمونه شروع سریع ML Kit مراجعه کنید. -
FirebaseVisionImageMetadataبرداشته شده است، میتوانید فقط فراداده تصویر مثلwidth،height،rotationDegrees،formatرا به روشهای ساختInputImageمنتقل کنید.
در اینجا چند نمونه از روشهای قدیمی و جدید Kotlin آورده شده است:
قدیمی
// Construct image labeler with base model and default options. val imageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler // Construct object detector with base model and default options. val objectDetector = FirebaseVision.getInstance().onDeviceObjectDetector // Construct face detector with given options val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options) // Construct image labeler with local AutoML model val localModel = FirebaseAutoMLLocalModel.Builder() .setAssetFilePath("automl/manifest.json") .build() val autoMLImageLabeler = FirebaseVision.getInstance() .getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F) .build() )
جدید
// Construct image labeler with base model and default options. val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) // Optional: add lifecycle observer lifecycle.addObserver(imageLabeler) // Construct object detector with base model and default options. val objectDetector = ObjectDetection.getClient( ObjectDetectorOptions.DEFAULT_OPTIONS ) // Construct face detector with given options val faceDetector = FaceDetection.getClient(options) // Construct image labeler with local AutoML model val localModel = LocalModel.Builder() .setAssetManifestFilePath("automl/manifest.json") .build() val autoMLImageLabeler = ImageLabeling.getClient( CustomImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F).build())
در اینجا چند نمونه از روشهای قدیمی و جدید Java آورده شده است:
قدیمی
// Construct image labeler with base model and default options. FirebaseVisionImageLabeler imagelLabeler = FirebaseVision.getInstance().getOnDeviceImageLabeler(); // Construct object detector with base model and default options. FirebaseVisionObjectDetector objectDetector = FirebaseVision.getInstance().getOnDeviceObjectDetector(); // Construct face detector with given options FirebaseVisionFaceDetector faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options); // Construct image labeler with local AutoML model FirebaseAutoMLLocalModel localModel = new FirebaseAutoMLLocalModel.Builder() .setAssetFilePath("automl/manifest.json") .build(); FirebaseVisionImageLabeler autoMLImageLabeler = FirebaseVision.getInstance() .getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F) .build());
جدید
// Construct image labeler with base model and default options. ImageLabeler imageLabeler = ImageLabeling.getClient( ImageLabelerOptions.DEFAULT_OPTIONS ); // Optional: add lifecycle observer getLifecycle().addObserver(imageLabeler); // Construct object detector with base model and default options. ObjectDetector objectDetector = ObjectDetection.getClient( ObjectDetectorOptions.DEFAULT_OPTIONS ); // Construct face detector with given options FaceDetector faceDetector = FaceDetection.getClient(options); // Construct image labeler with local AutoML model LocalModel localModel = new LocalModel.Builder() .setAssetManifestFilePath("automl/manifest.json") .build(); ImageLabeler autoMLImageLabeler = ImageLabeling.getClient( new CustomImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F).build());
تغییرات مختص میانای برنامهسازی کاربردی
اسکن رمزینه
برای «میانای برنامهسازی کاربردی اسکن رمزینه»، اکنون دو روش برای ارائه مدلها وجود دارد:
- ازطریق «خدمات Google Play» که با نام «نازک» نیز شناخته میشود (توصیه میشود) - این روش اندازه برنامه را کاهش میدهد و مدل بین برنامهها همرسانی میشود. بااینحال، توسعهدهندگان باید مطمئن شوند که مدل قبلاز استفاده از آن برای اولینبار بارگیری شده است.
- با APK برنامهتان، که به آن «بستهبندیشده» هم میگویند - این کار اندازه برنامه را افزایش میدهد اما به این معنی است که مدل بلافاصله قابلاستفاده است.
این دو پیادهسازی کمی متفاوت هستند و نسخه «دستهای» نسبتبه نسخه «نازک» بهبودهایی دارد. جزئیات مربوط به این تفاوتها را میتوانید در دستورالعملهای Barcode Scanning API پیدا کنید.
تشخیص چهره
برای «میانای برنامهسازی کاربردی تشخیص چهره»، مدلها به دو روش میتوانند ارائه شوند:
- ازطریق «خدمات Google Play» یا «thin» (توصیهشده) - این کار اندازه برنامه را کاهش میدهد و مدل بین برنامهها همرسانی میشود. بااینحال، توسعهدهندگان باید مطمئن شوند که مدل قبلاز استفاده از آن برای اولینبار بارگیری شده است.
- با بسته APK برنامه شما که به آن «دستهبندیشده» نیز میگویند - این کار اندازه بارگیری برنامه را افزایش میدهد اما به این معنی است که مدل بلافاصله قابلاستفاده است.
عملکرد پیادهسازیها یکسان است.
ترجمه
-
TranslateLanguageاکنون بهجای برچسبهای زبان (EN) از نامهای خوانا برای ثابتهایش (برای نمونه،ENGLISH) استفاده میکند. همچنین اکنون@StringDefبهجای@IntDefاست و مقدار ثابت، برچسب زبان BCP 47 منطبق است.
برچسبگذاری تصویر AutoML (منسوخ)
بارگیری مدلهای سفارشی برای برچسبگذاری تصویر بااستفاده از AutoML منسوخ شده است و در ۱۵ ژوئن ۲۰۲۷ غیرفعال خواهد شد. باید از «فضای ذخیرهسازی ابری» برای میزبانی مدلها استفاده کنید و منطق بارگیری را به برنامهتان اضافه کنید تا مدلها را بارگیری کند. برای جزئیات، راهنمای انتقال Firebase ML به Cloud Storage را ببینید.
تشخیص و ردیابی اشیا
اگر برنامهتان از تشخیص شیء با طبقهبندی درشت استفاده میکند، توجه داشته باشید که کیت توسعه نرمافزار جدید نحوه برگرداندن دسته طبقهبندی برای اشیای شناساییشده را تغییر داده است.
دسته طبقهبندی بهصورت نمونهای از
DetectedObject.Label بهجای عدد صحیح برگردانده میشود. همه دستههای ممکن برای طبقهبندیکننده کلی در کلاس PredefinedCategory گنجانده شدهاند.
در اینجا نمونهای از کد قدیمی و جدید Kotlin آورده شده است:
قدیمی
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
جدید
if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) { ... } // or if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) { ... }
در اینجا نمونهای از کد قدیمی و جدید Java آورده شده است:
قدیمی
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
جدید
if (!object.getLabels().isEmpty() && object.getLabels().get(0).getText().equals(PredefinedCategory.FOOD)) { ... } // or if (!object.getLabels().isEmpty() && object.getLabels().get(0).getIndex() == PredefinedCategory.FOOD_INDEX) { ... }
دسته «ناشناس» برداشته شده است. وقتی اطمینان از طبقهبندی شیء پایین باشد، هیچ برچسبی برنمیگردانیم.
برداشتن وابستگیهای Firebase
پساز انتقال، وابستگیهای Firebase را بردارید. این مراحل را دنبال کنید:
- فایل پیکربندی Firebase را با حذف فایل پیکربندی
google-services.jsonدر فهرست راهنمای واحد (سطح برنامه) برنامهتان بردارید. - افزایه Google Services Gradle را در فایل Gradle واحد (سطح برنامه) (معمولاً
app/build.gradle.kts) با افزایه «تطابقدهنده نسخه دقیق» جایگزین کنید:
پیشاز
plugins { id("com.android.application") id("com.google.gms.google-services") } android { // … }
بعد از
plugins { id("com.android.application") id("com.google.android.gms.strict-version-matcher-plugin") } android { // … }
- مسیر کلاس افزایه Google Services Gradle را در فایل Gradle پروژه (سطح ریشه) (
build.gradle.kts) با مسیر کلاس افزایه «تطبیقدهنده نسخه دقیق» جایگزین کنید:
پیشاز
buildscript { dependencies { // ... classpath("com.google.gms:google-services:4.3.3") } }
بعد از
buildscript { dependencies { // ... classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1") } }
برنامه Firebase خود را در کنسول Firebase طبق دستورالعملهای سایت پشتیبانی Firebase حذف کنید.
دریافت راهنمایی
اگر با مشکلی مواجه شدید، لطفاً صفحه انجمن ما را بررسی کنید که در آن کانالهای موجود برای تماس با ما را شرح دادهایم.