این راهنما نحوه انتقال از «کیت یادگیری ماشین برای Firebase» ویژه Android را توضیح میدهد.
بهروزرسانی واردات gradle
کیت توسعه نرمافزار ML Kit فقط به یک وابستگی برای هر ML Kit API نیاز دارد. نیازی نیست کتابخانههای رایج مثل firebase-ml-vision یا firebase-ml-natural-language را مشخص کنید. «کیت یادگیری ماشین» از فضای نام com.google.android.gms
برای کتابخانههایی که به خدمات Google Play وابسته هستند استفاده میکند.
Vision APIs
مدلهای بستهای بهعنوان بخشی از برنامه شما ارائه میشوند. مدلهای Thin باید بارگیری شوند. برخیاز میاناهای برنامهسازی کاربردی هم بهصورت بستهای و هم بهصورت سبک دردسترس هستند، برخی دیگر فقط به یکی از این دو صورت دردسترس هستند:
| میانای برنامهسازی کاربردی | موجود در بستهبندی | باریک |
|---|---|---|
| تشخیص نوشتار | x (بتا) | x |
| تشخیص چهره | x | x |
| اسکن کردن رمزینه | x | x |
| برچسبگذاری تصویر | x | x |
| تشخیص و ردیابی اشیا | x | - |
وابستگیهای کتابخانههای 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.2 |
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 را ببینید. |
میاناهای برنامهسازی کاربردی زبان طبیعی
مدلهای بستهای بهعنوان بخشی از برنامه شما ارائه میشوند. مدلهای Thin باید بارگیری شوند:
| میانای برنامهسازی کاربردی | موجود در بستهبندی | باریک |
|---|---|---|
| شناسه زبان | 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)در جاوا استفاده کنید. - All handles (detector/scanner/labeler/translator...) are closeable. مطمئن شوید که وقتی دیگر از آن اشیاء استفاده نمیشود، روش
close()فراخوانی شود. اگر از آنها درFragmentیاAppCompatActivityاستفاده میکنید، یک راه برای انجام این کار این است کهLifecycleOwner.getLifecycle()را درFragmentیاAppCompatActivityفراخوانی کنید، و سپسLifecycle.addObserverرا فراخوانی کنید. processImage()وdetectInImage()در Vision APIs برای سازگاری بهprocess()تغییر نام دادهاند.- Natural Language API اکنون بهجای «کد زبان» از اصطلاح «برچسب زبان» (همانطور که در استاندارد BCP 47 تعریف شده است) استفاده میکند.
- روشهای Getter در کلاسهای
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());
تغییرات مختص میانای برنامهسازی کاربردی
اسکن کردن رمزینه
برای Barcode Scanning API، اکنون دو روش برای ارائه مدلها وجود دارد:
- ازطریق «خدمات Google Play» یا «thin» (توصیهشده) - این روش اندازه برنامه را کاهش میدهد و مدل بین برنامهها همرسانی میشود. بااینحال، توسعهدهندگان باید مطمئن شوند که مدل پیشاز استفاده برای اولینبار بارگیری شده است.
- با APK برنامهتان که به آن «بستهبندیشده» هم میگویند - این کار اندازه برنامه را افزایش میدهد اما به این معنی است که مدل فوراً قابلاستفاده است.
این دو پیادهسازی کمی متفاوت هستند و نسخه «بستهای» نسبتبه نسخه «نازک» چند بهبود دارد. جزئیات مربوط به این تفاوتها را میتوانید در دستورالعملهای Barcode Scanning API پیدا کنید.
تشخیص چهره
برای Face Detection API، دو روش برای ارائه مدلها وجود دارد:
- ازطریق «خدمات Google Play» یا «thin» (توصیهشده) - این روش اندازه برنامه را کاهش میدهد و مدل بین برنامهها همرسانی میشود. بااینحال، توسعهدهندگان باید مطمئن شوند که مدل پیشاز استفاده برای اولینبار بارگیری شده است.
- با APK برنامهتان، که به آن «بستهبندیشده» هم میگویند - این کار اندازه بارگیری برنامه را افزایش میدهد اما به این معنی است که مدل بلافاصله قابلاستفاده است.
رفتار پیادهسازیها یکسان است.
ترجمه
TranslateLanguageاکنون بهجای برچسبهای زبان (EN) از نامهای خوانا برای ثابتهایش (مثلاًENGLISH) استفاده میکند. این نامها اکنون بهجای@IntDef،@StringDefهستند و مقدار ثابت، برچسب زبان BCP 47 منطبق است.
AutoML Image Labeling (منسوخشده)
بارگیری مدلهای سفارشی برای برچسبگذاری تصویر بااستفاده از AutoML منسوخ شده است و در ۱۵ ژوئن ۲۰۲۷ غیرفعال خواهد شد. باید از Cloud Storage برای میزبانی مدلها استفاده کنید و منطق بارگیری را به برنامهتان اضافه کنید تا مدلها را بارگیری کند. برای جزئیات، به راهنمای انتقال 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) با افزایه Strict Version Matcher جایگزین کنید:
پیشاز
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) با مسیر کلاس افزایه Strict Version Matcher جایگزین کنید:
پیشاز
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 حذف کنید.
دریافت راهنمایی
اگر با مشکلی مواجه شدید، لطفاً صفحه انجمن ما را بررسی کنید که در آن کانالهای موجود برای تماس با ما را شرح دادهایم.