Cập nhật dữ liệu nhập gradle
SDK mới chỉ yêu cầu một phần phụ thuộc cho mỗi API Bộ công cụ học máy. Bạn không cần chỉ định
các thư viện phổ biến như firebase-ml-vision
hoặc firebase-ml-natural-language
.
Bộ công cụ học máy sử dụng không gian tên com.google.android.gms
cho những thư viện phụ thuộc vào Dịch vụ Google Play.
API Vision
Các mô hình theo gói được phân phối như một phần trong ứng dụng của bạn. Phải tải mô hình mỏng xuống. Một số API có cả ở dạng gói và dạng mỏng, một số khác chỉ có ở một dạng hoặc đơn vị quảng cáo khác:
API | Theo cụm | Mỏng |
---|---|---|
Nhận dạng văn bản | x (thử nghiệm) | x |
Phát hiện khuôn mặt | x | x |
Quét mã vạch | x | x |
Gắn nhãn hình ảnh | x | x |
Phát hiện và theo dõi đối tượng | x | - |
Cập nhật các phần phụ thuộc cho thư viện Android Bộ công cụ học máy trong mô-đun của bạn (ứng dụng
cấp) (thường là app/build.gradle
) theo các bảng sau:
Mô hình theo gói
API | Cấu phần phần mềm cũ | Cấu phần phần mềm mới |
---|---|---|
Quét mã vạch | 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 |
Đường viền khuôn mặt | 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 |
Gắn nhãn hình ảnh | 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 |
Phát hiện đối tượng | 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 |
Mô hình mỏng
API | Cấu phần phần mềm cũ | Cấu phần phần mềm mới |
---|---|---|
Quét mã vạch | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 |
Phát hiện khuôn mặt | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-face-detection:17.1.0 |
Nhận dạng văn bản | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-text-recognition:19.0.1 |
Cạnh AutoMLVision
API | Cấu phần phần mềm cũ | Cấu phần phần mềm mới |
---|---|---|
AutoML mà không cần tải xuống | 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 cho phép tải xuống | 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 ngôn ngữ tự nhiên
Các mô hình theo gói được phân phối như một phần trong ứng dụng của bạn. Mô hình mỏng phải được tải xuống:
API | Theo cụm | Mỏng |
---|---|---|
Mã ngôn ngữ | x | x |
Trả lời thông minh | x | x (thử nghiệm) |
Cập nhật các phần phụ thuộc cho thư viện Android Bộ công cụ học máy trong mô-đun của bạn (ứng dụng
cấp) (thường là app/build.gradle
) theo các bảng sau:
Mô hình theo gói
API | Cấu phần phần mềm cũ | Cấu phần phần mềm mới |
---|---|---|
Mã ngôn ngữ | 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 |
Trả lời thông minh | 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 |
Mô hình mỏng
API | Cấu phần phần mềm cũ | Cấu phần phần mềm mới |
---|---|---|
Mã ngôn ngữ | 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 |
Trả lời thông minh | 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 |
Cập nhật tên lớp
Nếu lớp của bạn xuất hiện trong bảng này, hãy thực hiện thay đổi được nêu:
Lớp cũ | Lớp học mới |
---|---|
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 |
Đối với các lớp khác, hãy làm theo các quy tắc sau:
- Hãy xoá tiền tố
FirebaseVision
khỏi tên lớp. - Xoá các tiền tố khác bắt đầu bằng tiền tố
Firebase
khỏi tên lớp.
Ngoài ra, trong tên gói, hãy thay thế tiền tố com.google.firebase.ml
cùng với com.google.mlkit
.
Cập nhật tên phương thức
Có rất ít thay đổi về mã:
- Trình phát hiện/máy quét/trình gắn nhãn/trình dịch... đã thay đổi bản sao. Giờ đây, mỗi tính năng đều có điểm truy cập riêng. Ví dụ: Quét mã vạch, Nhận dạng văn bản, Gắn nhãn hình ảnh, Dịch.... Các lệnh gọi đến dịch vụ Firebase
getInstance()
sẽ được thay thế bằng các lệnh gọi đến phương thứcgetClient()
của điểm truy cập tính năng. - Chúng tôi đã loại bỏ bản sao mặc định cho TextRecognitionr, vì chúng tôi đã ra mắt các thư viện bổ sung để nhận dạng các chữ viết khác như tiếng Trung và tiếng Hàn. Để sử dụng các tuỳ chọn mặc định với mô hình nhận dạng văn bản dạng chữ Latinh, vui lòng khai báo phần phụ thuộc trên
com.google.android.gms:play-services-mlkit-text-recognition
và sử dụngTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
. - Tính năng tạo bản sao mặc định cho ImageLabeler và ObjectDetector đã bị xoá vì chúng tôi đã ra mắt tính năng hỗ trợ mô hình tuỳ chỉnh cho 2 tính năng này. Ví dụ: để sử dụng các tuỳ chọn mặc định với mô hình cơ sở trong ImageLabeling, vui lòng khai báo phần phụ thuộc trên
com.google.mlkit:image-labeling
và sử dụngImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
trong Java. - Tất cả các tay cầm (trình phát hiện/máy quét/trình gắn nhãn/trình dịch...) đều có thể đóng được. Đảm bảo phương thức
close()
được gọi khi các đối tượng đó không còn được dùng nữa. Nếu bạn đang sử dụng chúng trong Fragment hoặc AppCompatActivity, một cách dễ dàng để thực hiện việc đó là gọi LifecycleOwner.getLifecycle() trên Fragment hoặc AppCompatActivity, sau đó gọi Lifecycle.addObserver processImage()
vàdetectInImage()
trong API Tầm nhìn đã được đổi tên thànhprocess()
để đảm bảo tính nhất quán.- Giờ đây, API ngôn ngữ tự nhiên sử dụng thuật ngữ "thẻ ngôn ngữ" (như xác định theo tiêu chuẩn BCP 47) thay vì "mã ngôn ngữ".
- Xoá phương thức getter trong các lớp xxxOptions.
- Phương thức getBitmap() trong lớp InputImage(thay thế
FirebaseVisionImage
) không còn được hỗ trợ như một phần của giao diện công khai. Vui lòng tham khảoBitmapUtils.java
trong mẫu bắt đầu nhanh Bộ công cụ học máy để chuyển đổi bitmap từ nhiều dữ liệu đầu vào. - FirebaseVisionImageMetadata đã bị xoá, bạn chỉ có thể truyền siêu dữ liệu hình ảnh như chiều rộng, chiều cao, xoá, định dạng vào phương thức xây dựng của InputImage.
Dưới đây là một số ví dụ về các phương thức Kotlin cũ và mới:
Cũ
// 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() )
Mới
// 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())
Dưới đây là một số ví dụ về các phương thức Java cũ và mới:
Cũ
// 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());
Mới
// 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());
Các thay đổi theo API cụ thể
Quét mã vạch
Đối với Barcode Quét API, hiện có hai cách để phân phối mô hình:
- Thông qua Dịch vụ Google Play còn được gọi là “mỏng” (nên dùng) – điều này giúp giảm kích thước ứng dụng và mô hình này được chia sẻ giữa các ứng dụng. Tuy nhiên, nhà phát triển cần đảm bảo rằng mô hình đó được tải xuống trước khi sử dụng lần đầu tiên.
- Với APK của ứng dụng còn được gọi là “bundled” (theo gói) – điều này sẽ làm tăng kích thước ứng dụng nhưng có nghĩa là mô hình có thể sử dụng được ngay lập tức.
Hai cách triển khai hơi khác nhau, trong đó phiên bản "theo gói" có một số điểm cải tiến so với phiên bản " mỏng". Bạn có thể xem thông tin chi tiết về những điểm khác biệt này trong nguyên tắc về Mã quét mã vạch.
Phát hiện khuôn mặt
Đối với API Phát hiện khuôn mặt, bạn có thể phân phối mô hình theo hai cách:
- Thông qua Dịch vụ Google Play còn được gọi là “mỏng” (nên dùng) – điều này giúp giảm kích thước ứng dụng và mô hình này được chia sẻ giữa các ứng dụng. Tuy nhiên, nhà phát triển cần đảm bảo rằng mô hình đó được tải xuống trước khi sử dụng lần đầu tiên.
- Với APK của ứng dụng còn được gọi là “bundled” (theo gói) – điều này sẽ làm tăng kích thước tải xuống của ứng dụng nhưng có nghĩa là mô hình có thể sử dụng được ngay lập tức.
Hành vi triển khai đều giống nhau.
Bản dịch
TranslateLanguage
hiện sử dụng tên có thể đọc được cho các hằng số của nó (ví dụ:ENGLISH
) thay vì thẻ ngôn ngữ (EN
). Giờ đây, chúng cũng là @StringDef, thay vì @IntDef và giá trị của hằng số là thẻ ngôn ngữ BCP 47 phù hợp.Nếu ứng dụng của bạn sử dụng tuỳ chọn điều kiện tải xuống "thiết bị ở trạng thái rảnh", hãy lưu ý rằng tuỳ chọn này đã bị xoá và không thể dùng nữa. Bạn vẫn có thể sử dụng tuỳ chọn "sạc thiết bị". Nếu muốn có hành vi phức tạp hơn, bạn có thể trì hoãn việc gọi
RemoteModelManager.download
theo logic của riêng mình.
Gắn nhãn hình ảnh AutoML
Nếu ứng dụng của bạn sử dụng tuỳ chọn điều kiện tải xuống "thiết bị ở trạng thái rảnh", hãy lưu ý rằng điều này tuỳ chọn này đã bị xoá và không thể sử dụng được nữa. Bạn vẫn có thể sử dụng "sạc thiết bị".
Nếu muốn hành vi phức tạp hơn, bạn có thể trì hoãn việc gọi
RemoteModelManager.download
theo logic của riêng bạn.
Phát hiện và theo dõi đối tượng
Nếu ứng dụng của bạn sử dụng tính năng phát hiện đối tượng bằng phương pháp phân loại tương đối, hãy lưu ý rằng SDK mới đã thay đổi cách trả về danh mục phân loại cho cụm từ tìm kiếm đã phát hiện .
Danh mục phân loại được trả về dưới dạng một đối tượng của
DetectedObject.Label
thay vì một số nguyên. Tất cả danh mục có thể có cho
thuật toán phân loại thô được đưa vào lớp PredefinedCategory
.
Dưới đây là ví dụ về mã Kotlin cũ và mới:
Cũ
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Mới
if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) { ... } // or if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) { ... }
Dưới đây là ví dụ về mã Java cũ và mới:
Cũ
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Mới
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) { ... }
Danh mục "không xác định" đã bị xoá. Khi độ tin cậy của việc phân loại đối tượng thấp, chúng tôi chỉ không trả về bất kỳ nhãn nào.
Xoá các phần phụ thuộc Firebase (Không bắt buộc)
Bước này chỉ áp dụng khi các điều kiện sau được đáp ứng:
- Bộ công cụ học máy của Firebase là thành phần Firebase duy nhất mà bạn sử dụng.
- Bạn chỉ sử dụng các API trên thiết bị.
- Bạn không sử dụng tính năng phân phát mô hình.
Trong trường hợp này, bạn có thể xoá các phần phụ thuộc Firebase sau khi di chuyển. Hãy làm theo các bước sau:
- Xoá tệp cấu hình Firebase bằng cách xoá tệp cấu hình google-services.json tại thư mục mô-đun (cấp ứng dụng) của ứng dụng.
- Thay thế trình bổ trợ Gradle cho Dịch vụ của Google trong tệp Gradle của mô-đun (cấp ứng dụng) (thường là app/build.gradle) bằng trình bổ trợ Strict Version Matcher:
Trước
apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // Google Services plugin android { // … }
Sau
apply plugin: 'com.android.application' apply plugin: 'com.google.android.gms.strict-version-matcher-plugin' android { // … }
- Thay thế đường dẫn lớp trình bổ trợ Gradle cho Dịch vụ của Google trong tệp Gradle (build.gradle) của dự án (cấp gốc) bằng một đường dẫn dành cho trình bổ trợ Strict Version Matcher:
Trước
buildscript { dependencies { // ... classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin } }
Sau
buildscript { dependencies { // ... classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1' } }
Xoá ứng dụng Firebase trong bảng điều khiển của Firebase theo hướng dẫn trên trang web hỗ trợ của Firebase.
Nhận Trợ giúp
Nếu bạn gặp phải bất kỳ sự cố nào, vui lòng xem trang Cộng đồng của chúng tôi, nơi chúng tôi trình bày để liên hệ với chúng tôi.