بهروزرسانی ایمپورتهای گرادل
SDK جدید فقط برای هر 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 ) طبق جداول زیر بهروزرسانی کنید:
مدلهای بستهای
| رابط برنامهنویسی کاربردی | آثار باستانی | مصنوع جدید |
|---|---|---|
| اسکن بارکد | 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 com.google.mlkit:linkfirebase:17.0.0 |
API های زبان طبیعی
مدلهای بستهبندیشده به عنوان بخشی از درخواست شما ارائه میشوند. مدلهای نازک باید دانلود شوند:
| رابط برنامهنویسی کاربردی | بستهبندی شده | نازک |
|---|---|---|
| شناسه زبان | ایکس | ایکس |
| پاسخ هوشمند | ایکس | ایکس (بتا) |
وابستگیهای کتابخانههای اندروید ML Kit را در فایل Gradle ماژول (سطح برنامه) خود (معمولاً app/build.gradle ) طبق جداول زیر بهروزرسانی کنید:
مدلهای بستهای
| رابط برنامهنویسی کاربردی | آثار باستانی | مصنوع جدید |
|---|---|---|
| شناسه زبان | 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.CustomRemoteModel |
| 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 جایگزین کنید.
نام متدها را بهروزرسانی کنید
تغییرات کد حداقلی هستند:
- نمونهسازی آشکارساز/اسکنر/برچسبگذار/مترجم… تغییر کرده است. اکنون هر ویژگی نقطه ورود خاص خود را دارد. برای مثال: اسکن بارکد، تشخیص متن، برچسبگذاری تصویر، ترجمه…. فراخوانیهای سرویس Firebase
getInstance()با فراخوانیهای متد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 حذف شده است، شما میتوانید فقط متادیتای تصویر مانند عرض، ارتفاع، چرخش، درجه و فرمت را به متدهای ساخت InputImages منتقل کنید.
در اینجا چند نمونه از متدهای قدیمی و جدید کاتلین آورده شده است:
قدیمی
// 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 life cycle 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 life cycle 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 برنامه شما که به آن «bundled» هم میگویند - این کار حجم دانلود برنامه را افزایش میدهد اما به این معنی است که مدل بلافاصله قابل استفاده است.
رفتار پیادهسازیها یکسان است.
ترجمه
TranslateLanguageاکنون به جای برچسبهای زبان (EN) از نامهای خوانا برای ثابتهای خود (مثلاًENGLISH) استفاده میکند. همچنین اکنون آنها به جای @IntDef، @StringDef هستند و مقدار ثابت، برچسب زبان منطبق BCP 47 است.اگر برنامه شما از گزینه شرط دانلود «دستگاه بیکار» استفاده میکند، توجه داشته باشید که این گزینه حذف شده و دیگر قابل استفاده نیست. شما همچنان میتوانید از گزینه «شارژ دستگاه» استفاده کنید. اگر میخواهید رفتار پیچیدهتری داشته باشید، میتوانید فراخوانی
RemoteModelManager.downloadرا با منطق خودتان به تعویق بیندازید.
برچسبگذاری تصویر AutoML
اگر برنامه شما از گزینه وضعیت دانلود «دستگاه در حالت آماده به کار» استفاده میکند، توجه داشته باشید که این گزینه حذف شده و دیگر قابل استفاده نیست. شما همچنان میتوانید از گزینه «شارژ دستگاه» استفاده کنید.
اگر رفتار پیچیدهتری میخواهید، میتوانید فراخوانی RemoteModelManager.download را با منطق خودتان به تعویق بیندازید.
تشخیص و ردیابی اشیا
اگر برنامه شما از تشخیص شیء با طبقهبندی تقریبی استفاده میکند، توجه داشته باشید که 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) { ... }
دستهی «ناشناخته» حذف شده است. وقتی اطمینان از طبقهبندی یک شیء پایین باشد، هیچ برچسبی را برنمیگردانیم.
حذف وابستگیهای فایربیس (اختیاری)
این مرحله فقط زمانی اعمال میشود که این شرایط برقرار باشند:
- کیت ML فایربیس تنها کامپوننت فایربیس مورد استفاده شماست.
- شما فقط از API های روی دستگاه استفاده می کنید.
- شما از مدل سروینگ استفاده نمیکنید.
در این صورت، میتوانید پس از مهاجرت، وابستگیهای Firebase را حذف کنید. این مراحل را دنبال کنید:
- فایل پیکربندی Firebase را با حذف فایل پیکربندی google-services.json در دایرکتوری module (app-level) برنامه خود، حذف کنید.
- افزونه Google Services Gradle را در فایل Gradle ماژول (سطح برنامه) خود (معمولاً app/build.gradle) با افزونه Strict Version Matcher جایگزین کنید:
قبل از
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // Google Services plugin
android {
// …
}بعد از
apply plugin: 'com.android.application'
apply plugin: 'com.google.android.gms.strict-version-matcher-plugin'
android {
// …
}- مسیر کلاس افزونه Google Services Gradle را در فایل Gradle پروژه (سطح ریشه) خود (build.gradle) با مسیر مربوط به افزونه Strict Version Matcher جایگزین کنید:
قبل از
buildscript {
dependencies {
// ...
classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin
}
}
بعد از
buildscript {
dependencies {
// ...
classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1'
}
}
طبق دستورالعملهای موجود در سایت پشتیبانی Firebase، برنامه Firebase خود را در کنسول Firebase حذف کنید.
دریافت کمک
اگر با هرگونه مشکلی مواجه شدید، لطفاً به صفحه انجمن ما مراجعه کنید، جایی که کانالهای موجود برای ارتباط با ما را شرح دادهایم.