این راهنما نحوه مهاجرت از ML Kit به Firebase برای اندروید را توضیح میدهد.
بهروزرسانی ایمپورتهای گرادل
کیت توسعه نرمافزار ML Kit فقط برای هر API کیت ML به یک وابستگی نیاز دارد. نیازی به مشخص کردن کتابخانههای رایج مانند firebase-ml-vision یا firebase-ml-natural-language نیست. کیت ML از فضای نام com.google.android.gms برای کتابخانههایی که به سرویسهای Google Play وابسته هستند استفاده میکند.
رابطهای برنامهنویسی کاربردی بینایی
مدلهای بستهبندیشده به عنوان بخشی از برنامه شما ارائه میشوند. مدلهای Thin باید دانلود شوند. برخی از APIها هم به صورت بستهبندیشده و هم به صورت Thin در دسترس هستند، برخی دیگر فقط به یکی از این دو شکل:
| رابط برنامهنویسی کاربردی | بستهبندی شده | نازک |
|---|---|---|
| تشخیص متن | ایکس (بتا) | ایکس |
| تشخیص چهره | ایکس | ایکس |
| اسکن بارکد | ایکس | ایکس |
| برچسبگذاری تصویر | ایکس | ایکس |
| تشخیص و ردیابی اشیاء | ایکس | - |
وابستگیهای کتابخانههای اندروید ML Kit را در فایل 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
| رابط برنامهنویسی کاربردی | مصنوع قدیمی | مصنوع جدید |
|---|---|---|
| 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 برای میزبانی و دانلود مدلهای سفارشی، مدلهای خود را به فضای ذخیرهسازی ابری منتقل کنید و منطق دانلود را در برنامه خود اضافه کنید تا آنها را با استفاده از LocalModel بارگذاری کنید. برای جزئیات بیشتر، به راهنمای مهاجرت Firebase ML به فضای ذخیرهسازی ابری مراجعه کنید. |
API های زبان طبیعی
مدلهای بستهبندیشده به عنوان بخشی از درخواست شما ارائه میشوند. مدلهای نازک باید دانلود شوند:
| رابط برنامهنویسی کاربردی | بستهبندی شده | نازک |
|---|---|---|
| شناسه زبان | ایکس | ایکس |
| پاسخ هوشمند | ایکس | ایکس (بتا) |
وابستگیهای کتابخانههای اندروید ML Kit را در فایل 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.labeler.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 جایگزین کنید.
نام متدها را بهروزرسانی کنید
تغییرات کد حداقلی هستند:
- نمونهسازی Detector/scanner/labeler/translator... تغییر کرده است. اکنون هر ویژگی نقطه ورود خاص خود را دارد. برای مثال:
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)در جاوا استفاده کنید. - همه دستگیرهها (detector/scanner/labeler/translator...) قابل بستن هستند. مطمئن شوید که متد
close()زمانی فراخوانی میشود که دیگر از آن اشیاء استفاده نمیشود. اگر از آنها در یکFragmentیاAppCompatActivityاستفاده میکنید، یک راه برای انجام این کار فراخوانیLifecycleOwner.getLifecycle()درFragmentیاAppCompatActivityو سپس فراخوانیLifecycle.addObserverاست. -
processImage()وdetectInImage()در رابطهای برنامهنویسی Vision برای سازگاری بیشتر بهprocess()تغییر نام دادهاند. - رابطهای برنامهنویسی کاربردی زبان طبیعی (NLP) اکنون به جای «کد زبان» از اصطلاح «برچسب زبان» (مطابق تعریف استاندارد BCP 47 ) استفاده میکنند.
- متدهای Getter در کلاسهای
xxxOptionsحذف شدهاند. - متد
getBitmap()در کلاسInputImage(جایگزینFirebaseVisionImage) دیگر به عنوان بخشی از رابط عمومی پشتیبانی نمیشود. برای دریافت تبدیل بیتمپ از ورودیهای مختلف، به نمونه شروع سریعBitmapUtils.javaدر ML Kit مراجعه کنید. -
FirebaseVisionImageMetadataحذف شده است، شما میتوانید به سادگی متادیتای تصویر مانندwidth،height،rotationDegreesوformatبه متدهای ساختInputImageارسال کنید.
در اینجا چند نمونه از متدهای قدیمی و جدید کاتلین آورده شده است:
قدیمی
// 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())
در اینجا چند نمونه از متدهای قدیمی و جدید جاوا آورده شده است:
قدیمی
// 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());
تغییرات خاص API
اسکن بارکد
برای API اسکن بارکد، اکنون دو روش برای تحویل مدلها وجود دارد:
- از طریق سرویسهای گوگل پلی که به آن «thin» هم میگویند (توصیه میشود) - این کار حجم برنامه را کاهش میدهد و مدل بین برنامهها به اشتراک گذاشته میشود. با این حال، توسعهدهندگان باید قبل از اولین استفاده از مدل، از دانلود آن اطمینان حاصل کنند.
- با فایل APK برنامه شما که به آن "bundled" هم میگویند - این کار حجم برنامه را افزایش میدهد اما به این معنی است که مدل بلافاصله قابل استفاده است.
این دو پیادهسازی کمی متفاوت هستند، و نسخه «بستهای» نسبت به نسخه «نازک» پیشرفتهای زیادی دارد. جزئیات این تفاوتها را میتوانید در دستورالعملهای API اسکن بارکد بیابید.
تشخیص چهره
برای API تشخیص چهره، دو روش برای ارائه مدلها وجود دارد:
- از طریق سرویسهای گوگل پلی که به آن «thin» هم میگویند (توصیه میشود) - این کار حجم برنامه را کاهش میدهد و مدل بین برنامهها به اشتراک گذاشته میشود. با این حال، توسعهدهندگان باید قبل از اولین استفاده از مدل، از دانلود آن اطمینان حاصل کنند.
- با فایل APK برنامه شما که به آن «بستهای» هم میگویند - این کار حجم دانلود برنامه را افزایش میدهد اما به این معنی است که مدل بلافاصله قابل استفاده است.
رفتار پیادهسازیها یکسان است.
ترجمه
-
TranslateLanguageاکنون به جای برچسبهای زبان (EN) از نامهای خوانا برای ثابتهای خود (مثلاًENGLISH) استفاده میکند. همچنین اکنون آنها به جای@IntDef،@StringDefهستند و مقدار ثابت ، برچسب زبان منطبق BCP 47 است.
برچسبگذاری خودکار تصویر (AutoML) (منسوخ شده)
دانلود مدلهای سفارشی برای برچسبگذاری تصویر با استفاده از AutoML منسوخ شده است و در ۱۵ ژوئن ۲۰۲۷ لغو خواهد شد. شما باید از Cloud Storage برای میزبانی مدلها استفاده کنید و منطق دانلود را به برنامه خود اضافه کنید تا مدلها را دانلود کنید. برای جزئیات بیشتر، به راهنمای مهاجرت Firebase ML به Cloud Storage مراجعه کنید.
تشخیص و ردیابی اشیا
اگر برنامه شما از تشخیص شیء با طبقهبندی تقریبی استفاده میکند، توجه داشته باشید که SDK جدید نحوهی بازگرداندن دستهبندی برای اشیاء شناساییشده را تغییر داده است.
دسته بندی به عنوان نمونه ای از DetectedObject.Label به جای یک عدد صحیح برگردانده می شود. تمام دسته بندی های ممکن برای طبقه بندی کننده تقریبی در کلاس PredefinedCategory گنجانده شده اند.
در اینجا مثالی از کد قدیمی و جدید کاتلین آورده شده است:
قدیمی
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) { ... }
در اینجا مثالی از کد جاوا قدیمی و جدید آورده شده است:
قدیمی
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در دایرکتوری module (app-level) برنامه خود، حذف کنید. - افزونهی 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 حذف کنید.
دریافت کمک
اگر با هرگونه مشکلی مواجه شدید، لطفاً به صفحه انجمن ما مراجعه کنید، جایی که کانالهای موجود برای ارتباط با ما را شرح دادهایم.