Điều kiện tiên quyết
Trước khi bắt đầu di chuyển mã, hãy đảm bảo bạn đáp ứng các yêu cầu sau:
- ML Kit hỗ trợ Xcode 13.2.1 trở lên.
- ML Kit hỗ trợ iOS phiên bản 15.5 trở lên.
- Bộ công cụ học máy không hỗ trợ các kiến trúc 32 bit (i386 và armv7). ML Kit có hỗ trợ kiến trúc 64 bit (x86_64 và arm64).
- Thư viện ML Kit chỉ được cung cấp dưới dạng cocoapods. Bạn không thể kết hợp các khung và cocoapods, vì vậy, để sử dụng thư viện này, trước tiên bạn cần di chuyển để sử dụng cocoapods.
Cập nhật Cocoapods
Cập nhật các phần phụ thuộc cho cocoapods của Bộ công cụ học máy trên iOS trong Podfile của ứng dụng:
| API | (Các) tên nhóm cũ | Tên(các) nhóm mới | 
|---|---|---|
| Quét mã vạch | Firebase/MLVision Firebase/MLVisionBarcodeModel | GoogleMLKit/BarcodeScanning | 
| Phát hiện khuôn mặt | Firebase/MLVision Firebase/MLVisionFaceModel | GoogleMLKit/FaceDetection | 
| Gắn nhãn hình ảnh | Firebase/MLVision Firebase/MLVisionLabelModel | GoogleMLKit/ImageLabeling | 
| Phát hiện và theo dõi vật thể | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection | 
| Nhận dạng văn bản | Firebase/MLVision Firebase/MLVisionTextModel | GoogleMLKit/TextRecognition | 
| Gắn nhãn hình ảnh bằng AutoML (mô hình đi kèm) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom | 
| Gắn nhãn hình ảnh bằng AutoML (tải mô hình xuống từ Firebase) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom GoogleMLKit/LinkFirebase | 
| Mã ngôn ngữ | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID | GoogleMLKit/LanguageID | 
| Trả lời thông minh | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply | GoogleMLKit/SmartReply | 
| Dịch | Firebase/MLNaturalLanguage Firebase/MLNLTranslate | GoogleMLKit/Translate | 
Cập nhật tên của các lớp, enum và kiểu
Nhìn chung, bạn cần đổi tên các lớp, enum và loại như sau:
- Swift: Xoá tiền tố Visionkhỏi tên lớp và enum
- Objective-C: Thay thế cả tên lớp FIRVisionvàFIRcũng như tiền tố enum bằngMLK
Quy tắc chung này không áp dụng cho một số tên và loại lớp:
Swift
| Lớp hoặc kiểu cũ | Lớp học hoặc kiểu mới | 
|---|---|
| AutoMLLocalModel | LocalModel | 
| AutoMLRemoteModel | CustomRemoteModel | 
| VisionBarcodeDetectionCallback | BarcodeScanningCallback | 
| VisionBarcodeDetector | BarcodeScanner | 
| VisionBarcodeDetectorOptions | BarcodeScannerOptions | 
| VisionImage | VisionImage (không thay đổi) | 
| VisionPoint | VisionPoint (không thay đổi) | 
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions | 
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions | 
Objective-C
| Lớp hoặc kiểu cũ | Lớp học hoặc kiểu mới | 
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel | 
| FIRAutoMLRemoteModel | MLKCustomRemoteModel | 
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback | 
| FIRVisionBarcodeDetector | MLKBarcodeScanner | 
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions | 
| FIRVisionImage | MLKVisionImage | 
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions | 
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions | 
| FIRVisionPoint | MLKVisionPoint | 
Objective-C
Cập nhật tên phương thức
Cập nhật tên phương thức theo các quy tắc sau:
- Các lớp điểm truy cập miền ( - Vision,- NaturalLanguage) không còn tồn tại. Các lớp này đã được thay thế bằng các lớp dành riêng cho từng tác vụ. Thay thế các lệnh gọi đến nhiều phương thức nhà máy để nhận các đối tượng nhận dạng bằng lệnh gọi trực tiếp đến phương thức nhà máy của từng đối tượng nhận dạng.
- Lớp - VisionImageMetadatađã bị xoá cùng với enum- VisionDetectorImageOrientation. Sử dụng thuộc tính- orientationcủa- VisionImageđể chỉ định hướng hiển thị của hình ảnh.
- Phương thức - onDeviceTextRecognizernhận một thực thể- TextRecognizermới đã được đổi tên thành- textRecognizer.
- Thuộc tính độ tin cậy đã bị xoá khỏi các lớp kết quả nhận dạng văn bản, bao gồm - TextElement,- TextLinevà- TextBlock.
- Các phương thức - onDeviceImageLabelervà- onDeviceImageLabeler(options:)để lấy một thực thể- ImageLabelermới đã được hợp nhất và đổi tên thành- imageLabeler(options:).
- Phương thức - objectDetectorđể lấy một thực thể- ObjectDetectormới đã bị xoá. Thay vào đó, hãy sử dụng- objectDetector(options:).
- Thuộc tính - typeđã bị xoá khỏi- ImageLabelervà thuộc tính- entityIDđã bị xoá khỏi lớp kết quả gắn nhãn hình ảnh,- ImageLabel.
- API quét mã vạch - detect(in _:, completion:)đã được đổi tên thành- process(_:, completion:)để nhất quán với các API thị giác khác.
- Giờ đây, Natural Language API sử dụng thuật ngữ "thẻ ngôn ngữ" (theo tiêu chuẩn BCP-47) thay vì "mã ngôn ngữ". 
- TranslateLanguagehiện sử dụng tên dễ đọc (chẳng hạn như .english) cho các hằng số thay vì thẻ ngôn ngữ ( chẳng hạn như .en).
Sau đây là một số ví dụ về các phương thức Swift cũ và mới:
Cũ
let options = VisionOnDeviceImageLabelerOptions()
options.confidenceThreshold = 0.75
let labeler = Vision.vision().onDeviceImageLabeler(options: options)
let detector = Vision.vision().faceDetector(options: options)
let localModel = AutoMLLocalModel(manifestPath: "automl/manifest.json")
let options = VisionOnDeviceAutoMLImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = 0.75
let labeler = vision.onDeviceAutoMLImageLabeler(options: options)
let detector = Vision.vision().objectDetector()
    Mới
let options = ImageLabelerOptions()
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = FaceDetector.faceDetector(options: options)
let localModel = LocalModel(manifestPath: "automl/manifest.json")
let options = CustomImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = ObjectDetector.objectDetector(options: ObjectDetectorOptions())
    Sau đây là một số ví dụ về các phương thức Objective-C cũ và mới:
Cũ
FIRVisionOnDeviceImageLabelerOptions *options = [[FIRVisionOnDeviceImageLabelerOptions alloc] init]; options.confidenceThreshold = 0.75; FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceImageLabelerWithOptions:options]; FIRVisionFaceDetector *detector = [[FIRVision vision] faceDetectorWithOptions: options]; FIRAutoMLLocalModel *localModel = [[FIRAutoMLLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; FIRVisionOnDeviceAutoMLImageLabelerOptions *options = [[FIRVisionOnDeviceAutoMLImageLabelerOptions alloc] initWithLocalModel: localModel]; options.confidenceThreshold = 0.75 FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceAutoMLImageLabelerWithOptions:options]; FIRVisionObjectDetector *detector = [[FIRVision vision] objectDetector];
Mới
MLKImageLabelerOptions *options = [[MLKImageLabelerOptions alloc] init]; options.confidenceThreshold = @(0.75); MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKFaceDetector *detector = [MLKFaceDetector faceDetectorWithOptions:options]; MLKLocalModel *localModel = [[MLKLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; MLKCustomImageLabelerOptions *options = [[MLKCustomImageLabelerOptions alloc] initWithLocalModel:localModel]; options.confidenceThreshold = @(0.75) MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKObjectDetectorOptions *options = [[MLKObjectDetectorOptions alloc] init]; MLKObjectDetector *detector = [MLKObjectDetector objectDetectorWithOptions:options];
Các thay đổi dành riêng cho API
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ân loại đối tượng, 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.
VisionObjectCategory trong VisionObject được trả về dưới dạng text trong đối tượng ObjectLabel thay vì số nguyên. Tất cả danh mục chuỗi có thể có đều nằm trong enum DetectedObjectLabel.
Xin lưu ý rằng danh mục .unknown đã bị xoá. Khi độ tin cậy của việc phân loại một đối tượng ở mức thấp, trình phân loại sẽ không trả về nhãn nào cả.
Sau đây là ví dụ về mã Swift cũ và mới:
Cũ
if (object.classificationCategory == .food) {
    ...
}Mới
if let label = object.labels.first {
  if (label.text == DetectedObjectLabel.food.rawValue) {
    ...
  }
}
// or
if let label = object.labels.first {
  if (label.index == DetectedObjectLabelIndex.food.rawValue) {
    ...
  }
}Dưới đây là ví dụ về mã Objective-C cũ và mới:
Cũ
if (object.classificationCategory == FIRVisionObjectCategoryFood) {
    ...
}Mới
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
  ...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
  ...
}Xoá các phần phụ thuộc Firebase (Không bắt buộc)
Bước này chỉ áp dụng khi đáp ứng các điều kiện sau:
- Bộ công cụ học máy Firebase là thành phần duy nhất của Firebase 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
Nếu vậ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 GoogleService-Info.plist khỏi thư mục ứng dụng và dự án Xcode.
- Xoá mọi cocoapod Firebase (chẳng hạn như pod 'Firebase/Analytics') khỏi Podfile.
- Xoá mọi hoạt động khởi chạy FirebaseApp, chẳng hạn như FirebaseApp.configure()khỏi mã của bạn.
- Xoá ứng dụng Firebase của bạn trên bảng điều khiển 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 vấn đề, vui lòng truy cập trang Cộng đồng của chúng tôi để xem các kênh liên hệ với chúng tôi.
