واردات gradle را به روز کنید
SDK جدید فقط به یک وابستگی برای هر ML Kit API نیاز دارد. نیازی نیست کتابخانه های رایجی مانند firebase-ml-vision
یا firebase-ml-natural-language
را مشخص کنید. ML Kit از فضای نام com.google.android.gms
برای کتابخانه هایی که به خدمات Google Play وابسته هستند استفاده می کند.
Vision API
مدل های همراه به عنوان بخشی از برنامه شما تحویل داده می شود. مدل های نازک باید دانلود شوند. برخی از APIها به دو صورت بستهبندی و نازک در دسترس هستند، برخی دیگر فقط به یک شکل یا شکل دیگر:
API | همراه | نازک |
---|---|---|
تشخیص متن | x (بتا) | x |
تشخیص چهره | x | x |
اسکن بارکد | x | x |
برچسب گذاری تصویر | x | x |
تشخیص و ردیابی اشیاء | x | - |
وابستگیهای کتابخانههای اندروید ML Kit را در ماژول (سطح برنامه) فایل Gradle (معمولا app/build.gradle
) مطابق جداول زیر بهروزرسانی کنید:
مدل های همراه
API | آثار قدیمی | مصنوع جدید |
---|---|---|
اسکن بارکد | 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 |
مدل های نازک
API | آثار قدیمی | مصنوع جدید |
---|---|---|
اسکن بارکد | 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
API | مصنوع قدیمی | مصنوع جدید |
---|---|---|
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 های زبان طبیعی
مدل های همراه به عنوان بخشی از برنامه شما تحویل داده می شود. مدل های نازک باید دانلود شوند:
API | همراه | نازک |
---|---|---|
شناسه زبان | x | x |
پاسخ هوشمند | x | x (بتا) |
وابستگیهای کتابخانههای اندروید ML Kit را در ماژول (سطح برنامه) فایل Gradle (معمولا app/build.gradle
) مطابق جداول زیر بهروزرسانی کنید:
مدل های همراه
API | آثار قدیمی | مصنوع جدید |
---|---|---|
شناسه زبان | 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 |
مدل های نازک
API | آثار قدیمی | مصنوع جدید |
---|---|---|
شناسه زبان | 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.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)
در جاوا استفاده کنید. - همه دستگیره ها (ردیاب / اسکنر / برچسب / مترجم ...) قابل بسته شدن هستند. اطمینان حاصل کنید که متد
close()
زمانی فراخوانی می شود که آن اشیاء دیگر استفاده نشوند. اگر از آنها در یک Fragment یا AppCompatActivity استفاده می کنید، یک راه آسان برای انجام این کار این است که LifecycleOwner.getLifecycle() را در Fragment یا AppCompatActivity فراخوانی کنید و سپس Lifecycle.addObserver را فراخوانی کنید. -
processImage()
وdetectInImage()
در Vision APIها برای سازگاری بهprocess()
تغییر نام داده اند . - APIهای زبان طبیعی اکنون از عبارت "برچسب زبان" (همانطور که توسط استاندارد BCP 47 تعریف شده) به جای "کد زبان" استفاده می کنند.
- متدهای دریافت کننده در کلاس های xxxOptions حذف شده اند.
- متد getBitmap () در کلاس InputImage (به جای
FirebaseVisionImage
) دیگر به عنوان بخشی از رابط عمومی پشتیبانی نمی شود. لطفاً برای تبدیل بیت مپ از ورودی های مختلف بهBitmapUtils.java
در نمونه ML Kit مراجعه کنید. - FirebaseVisionImageMatadata حذف شده است، شما فقط می توانید ابرداده های تصویر مانند عرض، ارتفاع، rotationDegrees، فرمت را به روش های ساخت 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 اسکن بارکد، اکنون دو راه برای ارائه مدلها وجود دارد:
- از طریق سرویسهای Google Play با نام «نازک» (توصیه میشود) - این کار باعث کاهش اندازه برنامه میشود و مدل بین برنامهها به اشتراک گذاشته میشود. با این حال، توسعه دهندگان باید اطمینان حاصل کنند که مدل قبل از استفاده از آن برای اولین بار دانلود شده است.
- با APK برنامه شما با نام "Bundled" - این اندازه برنامه را افزایش می دهد اما به این معنی است که مدل بلافاصله قابل استفاده است.
این دو پیاده سازی کمی متفاوت هستند، به طوری که نسخه "باندل" دارای تعدادی پیشرفت نسبت به نسخه "نازک" است. جزئیات مربوط به این تفاوت ها را می توان در دستورالعمل های API اسکن بارکد یافت.
تشخیص چهره
برای API تشخیص چهره، دو روش برای ارائه مدلها وجود دارد:
- از طریق سرویسهای Google Play با نام «نازک» (توصیه میشود) - این کار باعث کاهش اندازه برنامه میشود و مدل بین برنامهها به اشتراک گذاشته میشود. با این حال، توسعه دهندگان باید اطمینان حاصل کنند که مدل قبل از استفاده از آن برای اولین بار دانلود شده است.
- با APK برنامه شما با نام "Bundled" - این باعث افزایش اندازه دانلود برنامه می شود اما به این معنی است که مدل بلافاصله قابل استفاده است.
رفتار پیاده سازی ها یکسان است.
ترجمه
TranslateLanguage
اکنون از نامهای قابل خواندن برای ثابتهای خود (مانندENGLISH
) به جای برچسبهای زبان (EN
) استفاده میکند. آنها همچنین اکنون به جای @IntDef@StringDef هستند و مقدار ثابت همان تگ زبان BCP 47 است.اگر برنامه شما از گزینه شرط دانلود «دستگاه بیکار» استفاده میکند، توجه داشته باشید که این گزینه حذف شده است و دیگر قابل استفاده نیست. همچنان میتوانید از گزینه «شارژ دستگاه» استفاده کنید. اگر رفتار پیچیدهتری میخواهید، میتوانید تماس
RemoteModelManager.download
را پشت منطق خود به تاخیر بیندازید.
برچسب گذاری تصویر AutoML
اگر برنامه شما از گزینه شرط دانلود «دستگاه بیکار» استفاده میکند، توجه داشته باشید که این گزینه حذف شده است و دیگر قابل استفاده نیست. همچنان میتوانید از گزینه «شارژ دستگاه» استفاده کنید.
اگر رفتار پیچیدهتری میخواهید، میتوانید تماس RemoteModelManager.download
را پشت منطق خود به تاخیر بیندازید.
تشخیص و ردیابی شی
اگر برنامه شما از تشخیص اشیاء با طبقهبندی درشت استفاده میکند، توجه داشته باشید که SDK جدید روش بازگرداندن دستهبندی اشیاء شناساییشده را تغییر داده است.
دسته طبقه بندی به جای یک عدد صحیح به عنوان نمونه ای از 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) { ... }
در اینجا نمونه ای از کدهای قدیمی و جدید جاوا آورده شده است:
قدیمی
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 ML تنها مؤلفه Firebase است که استفاده می کنید.
- شما فقط از API های روی دستگاه استفاده می کنید.
- شما از سرویس مدل استفاده نمی کنید.
در این صورت، می توانید وابستگی های Firebase را پس از مهاجرت حذف کنید. این مراحل را دنبال کنید:
- با حذف فایل پیکربندی google-services.json در فهرست ماژول (سطح برنامه) برنامه خود، فایل پیکربندی Firebase را حذف کنید.
- افزونه 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 حذف کنید.
دریافت کمک
اگر با مشکلی مواجه شدید، لطفاً صفحه انجمن ما را بررسی کنید، جایی که ما کانال های موجود برای تماس با ما را مشخص می کنیم.