Hướng dẫn này giải thích cách di chuyển khỏi Bộ công cụ học máy cho Firebase trên Android.
Cập nhật dữ liệu nhập Gradle
SDK của Bộ công cụ học máy chỉ yêu cầu một phần phụ thuộc cho mỗi API của 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 các thư viện phụ thuộc vào Dịch vụ Google Play.
API Vision
Các mô hình theo cụm được phân phối trong ứng dụng của bạn. Bạn phải tải các mô hình mỏng xuống. Một số API có ở cả dạng theo cụm và dạng mỏng, còn một số API khác chỉ có ở một trong hai dạng:
| API | Theo cụm | Mỏng |
|---|---|---|
| Nhận dạng văn bản | x (beta) | 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 đối tượng và theo dõi | x | - |
Cập nhật các phần phụ thuộc cho thư viện Android của Bộ công cụ học máy trong tệp Gradle (ở cấp ứng dụng) trong mô-đun của bạn (thường là app/build.gradle.kts) theo các bảng sau:
Mô hình theo cụm
| 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 |
AutoMLVision Edge
| 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 có 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
Để lưu trữ và tải các mô hình tuỳ chỉnh xuống, hãy di chuyển các mô hình của bạn sang Cloud Storage và thêm logic tải xuống vào ứng dụng để tải các mô hình đó bằng LocalModel. Để biết thông tin chi tiết,
hãy xem
hướng dẫn di chuyển từ Firebase ML sang Cloud Storage. |
API Natural Language
Các mô hình theo cụm được phân phối trong ứng dụng của bạn. Bạn phải tải các mô hình mỏng xuống:
| API | Theo cụm | Mỏng |
|---|---|---|
| Mã ngôn ngữ | x | x |
| Trả lời thông minh | x | x (beta) |
Cập nhật các phần phụ thuộc cho thư viện Android của Bộ công cụ học máy trong tệp Gradle (ở cấp ứng dụng) trong mô-đun của bạn (thường là app/build.gradle.kts) theo các bảng sau:
Mô hình theo cụm
| 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 chỉ định:
| Lớp cũ | Lớp 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.LocalModel Yêu cầu tải xuống theo cách thủ công. Các mô hình từ xa do Firebase lưu trữ không còn được dùng nữa. Để biết thông tin chi tiết, hãy xem hướng dẫn di chuyển từ Firebase ML sang 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 |
Đối với các lớp khác, hãy làm theo các quy tắc sau:
- Xoá tiền tố
FirebaseVisionkhỏi tên lớp. - Xoá các tiền tố khác bắt đầu bằng tiền tố
Firebasekhỏi tên lớp.
Ngoài ra, trong tên gói, hãy thay thế tiền tố com.google.firebase.ml bằng com.google.mlkit.
Cập nhật tên phương thức
Bạn chỉ cần thay đổi mã một chút:
- Đã thay đổi quá trình tạo thực thể của trình phát hiện/trình quét/trình gắn nhãn/trình dịch... Hiện tại, mỗi tính năng đều có điểm truy cập riêng. Ví dụ:
BarcodeScanning,TextRecognition,ImageLabeling,Translation... Các lệnh gọi đến dịch vụ FirebasegetInstance()đượ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. - Đã xoá quá trình tạo thực thể mặc định cho
TextRecognizervì chúng tôi đã ra mắt các thư viện bổ sung để nhận dạng các tập lệnh 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 tập lệnh Latinh, hãy khai báo phần phụ thuộc vàocom.google.android.gms:play-services-mlkit-text-recognitionvà sử dụngTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS). - Đã xoá quá trình tạo thực thể mặc định cho
ImageLabelervàObjectDetectorvì chúng tôi đã ra mắt tính năng hỗ trợ mô hình tuỳ chỉnh cho hai 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ở trongImageLabeling, hãy khai báo phần phụ thuộc vàocom.google.mlkit:image-labelingvà sử dụngImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)trong Java. - Tất cả các trình xử lý (trình phát hiện/trình quét/trình gắn nhãn/trình dịch...) đều có thể đóng. Đảm bảo
rằng phương thức
close()được gọi khi các đối tượng đó không còn được sử dụng nữa. Nếu bạn đang sử dụng các đối tượng đó trongFragmenthoặcAppCompatActivity, thì một cách để thực hiện việc đó là gọiLifecycleOwner.getLifecycle()trênFragmenthoặcAppCompatActivity, rồi gọiLifecycle.addObserver. processImage()vàdetectInImage()trong API Vision đã được đổi tên thànhprocess()để đảm bảo tính nhất quán.- API Natural Language hiện sử dụng cụm từ "thẻ ngôn ngữ" (theo định nghĩa của tiêu chuẩn BCP 47) thay vì "mã ngôn ngữ".
- Đã xoá các phương thức getter trong các lớp
xxxOptions. - Phương thức
getBitmap()trong lớpInputImage(thay thếFirebaseVisionImage) không còn được hỗ trợ trong giao diện công khai. Hãy tham khảoBitmapUtils.javatrong mẫu bắt đầu nhanh của Bộ công cụ học máy để chuyển đổi bitmap từ nhiều dữ liệu đầu vào. - Đã xoá
FirebaseVisionImageMetadata, bạn chỉ cần truyền siêu dữ liệu hình ảnh nhưwidth,height,rotationDegrees,formatvào các phương thức tạo củaInputImage.
Sau đâ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 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())
Sau đâ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 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());
Các thay đổi dành riêng cho API
Quét mã vạch
Đối với API Quét mã vạch, hiện có 2 cách phân phối mô hình:
- Thông qua Dịch vụ Google Play, hay còn gọi là "mỏng" (nên dùng) – cách này giúp giảm kích thước ứng dụng và mô hình đượ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.
- Với tệp APK của ứng dụng, hay còn gọi là "theo cụm" – cách này làm tăng kích thước ứng dụng nhưng có nghĩa là bạn có thể sử dụng mô hình ngay lập tức.
Hai cách triển khai này hơi khác nhau, trong đó phiên bản "theo cụm" 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ề API 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, có 2 cách phân phối mô hình:
- Thông qua Dịch vụ Google Play, hay còn gọi là "mỏng" (nên dùng) – cách này giúp giảm kích thước ứng dụng và mô hình đượ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.
- Với tệp APK của ứng dụng, hay còn gọi là "theo cụm" – cách này làm tăng kích thước tải ứng dụng xuống nhưng có nghĩa là bạn có thể sử dụng mô hình ngay lập tức.
Hành vi của các cách triển khai này là giống nhau.
Bản dịch
TranslateLanguagehiện sử dụng các tên dễ đọc cho hằng số (ví dụ:ENGLISH) thay vì thẻ ngôn ngữ (EN). Các hằng số này hiện cũng là@StringDef, thay vì@IntDef, và giá trị của hằng số là thẻ ngôn ngữ BCP 47 tương ứng.
Gắn nhãn hình ảnh bằng AutoML (không dùng nữa)
Tính năng tải các mô hình tuỳ chỉnh xuống để gắn nhãn hình ảnh bằng AutoML không còn được dùng nữa và sẽ bị ngừng vào ngày 15 tháng 6 năm 2027. Thay vào đó, bạn nên sử dụng Cloud Storage để lưu trữ các mô hình và thêm logic tải xuống vào ứng dụng để tải các mô hình xuống. Để biết thông tin chi tiết, hãy xem hướng dẫn di chuyển từ Firebase ML sang Cloud Storage.
Phát hiện và theo dõi vật thể
Nếu ứng dụng của bạn sử dụng tính năng phát hiện đối tượng với phân loại thô, hãy lưu ý rằng SDK mới đã thay đổi cách trả về danh mục phân loại cho các đối tượng được phát hiện.
Danh mục phân loại được trả về dưới dạng thực thể của DetectedObject.Label thay vì số nguyên. Tất cả các danh mục có thể có cho bộ phân loại thô đều có trong lớp PredefinedCategory.
Sau đâ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) { ... }
Sau đâ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) { ... }
Đã xoá danh mục "không xác định". Khi độ tin cậy của việc phân loại một vật thể ở mức thấp, chúng tôi sẽ không trả về nhãn nào.
Xoá các phần phụ thuộc Firebase
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.jsontại thư mục mô-đun (cấp ứng dụng) của ứng dụng. - Thay thế trình bổ trợ Gradle của Dịch vụ Google trong tệp Gradle (ở cấp ứng dụng) trong mô-đun của bạn (thường là
app/build.gradle.kts) bằng trình bổ trợ Trình so khớp phiên bản nghiêm ngặt:
Trước
plugins { id("com.android.application") id("com.google.gms.google-services") } android { // … }
Sau
plugins { id("com.android.application") id("com.google.android.gms.strict-version-matcher-plugin") } android { // … }
- Thay thế đường dẫn lớp của trình bổ trợ Gradle của Dịch vụ Google trong tệp Gradle (ở cấp dự án) (
build.gradle.kts) bằng đường dẫn lớp của trình bổ trợ Trình so khớp phiên bản nghiêm ngặt:
Trước
buildscript { dependencies { // ... classpath("com.google.gms:google-services:4.3.3") } }
Sau
buildscript { dependencies { // ... classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1") } }
Xoá ứng dụng Firebase của bạn tại 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 bất kỳ vấn đề nào, vui lòng xem trang Cộng đồng của chúng tôi để biết các kênh liên hệ với chúng tôi.