Di chuyển cho iOS

Đ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:

  • Bộ công cụ máy học hỗ trợ Xcode 13.2.1 trở lên.
  • Bộ công cụ máy học hỗ trợ iOS phiên bản 10 trở lên.
  • Bộ công cụ máy học không hỗ trợ kiến trúc 32 bit (i386 và armv7). Bộ công cụ máy học hỗ trợ kiến trúc 64 bit (x86_64 và arm64).
  • Thư viện Bộ công cụ máy học chỉ được cung cấp dưới dạng cocoapod. Bạn không thể kết hợp khung và khung thử nghiệm, 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 cacocopod.

Cập nhật Cocoapods

Cập nhật các phần phụ thuộc cho Bộ công cụ máy học dành cho iOS trong Podfile của ứng dụng:

API(Các) tên nhóm cũ(Các) tên nhóm mới
Quét mã vạch Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/Quét mã vạch
Phát hiện khuôn mặt Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
Nhãn hình ảnh Firebase/MLVision
Firebase/MLVisionLabelModel
Bộ công cụ gắn nhãn/Google Hình ảnh
Phát hiện và theo dõi đối tượng Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
Nhận dạng văn bản Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/Nhận dạng văn bản
Nhãn hình ảnh AutoML (mô hình đi kèm) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Nhãn hình ảnh 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/MLNLSmartAnswer
GoogleMLKit/SmartPhản hồi
Dịch Firebase/MLNaturalLanguage
Firebase/MLNLDịch
GoogleMLKit/Dịch

Cập nhật tên lớp, enum và kiểu

Nói chung, bạn cần đổi tên các lớp, enum và kiểu như sau:

  • Swift: Xoá tiền tố Vision khỏi tên lớp và enum
  • Objective-C: Thay thế cả tên lớp FIRVisionFIR lẫn tiền tố enum bằng MLK

Đối với một số loại và tên lớp, quy tắc chung này không áp dụng:

Swift

Lớp hoặc kiểu cũLớp hoặc kiểu mới
Mô hình AutoMLLocalModel Mô hình cục bộ
Mô hình từ xa AutoML Mô hình từ xa tùy chỉnh
VisionBarcodeDetectionCallback Mã vạch
Trình phát hiện mã vạch Vision Máy quét mã vạch
VisionBarcodeDetectorOptions Mã vạch
Hình ảnh Vision VisionImage (không thay đổi)
VisionPoint VisionPoint (không thay đổi)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions Trình xem nhãn hình ảnh

Objective-C

Lớp hoặc kiểu cũLớp hoặc kiểu mới
Mô hình FIRAutoMLLocalModel Mô hình máy học địa phương
Mô hình từ xa FIRAutoML. Mô hình từ xa tùy chỉnh MLK
FIRVisionBarcodeDetectionCallback Gọi lại MLKBarcodeScanningCallback
FIRVisionBarcodeDetector Trình quét mã vạch MLK
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
Hình ảnh FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
Điểm 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 nhậ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 tác vụ cụ thể. Thay thế các lệnh gọi đến nhiều phương thức nhà máy để nhận trình phát hiện bằng các lệnh gọi trực tiếp đến phương thức ban đầu của từng trình phát hiện.

  • Lớp VisionImageMetadata đã bị xoá cùng với liệt kê VisionDetectorImageOrientation. Sử dụng thuộc tính orientation của VisionImage để chỉ định hướng hiển thị của một hình ảnh.

  • Phương thức onDeviceTextRecognizer tải phiên bản TextRecognizer mới đã được đổi tên thành textRecognizer.

  • Thuộc tính độ tin cậy đã bị xoá khỏi lớp kết quả nhận dạng văn bản, bao gồm TextElement, TextLineTextBlock.

  • Các phương thức onDeviceImageLabeleronDeviceImageLabeler(options:) để nhận phiên bản ImageLabeler mới đã được hợp nhất và đổi tên thành imageLabeler(options:).

  • Phương thức objectDetector để tải phiên bản ObjectDetector mới đã bị xoá. Thay vào đó, hãy sử dụng objectDetector(options:).

  • Thuộc tính type đã bị xoá khỏi ImageLabeler và 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.

  • API Ngôn ngữ tự nhiên hiện sử dụng thuật ngữ "thẻ ngôn ngữ" (theo định nghĩa của tiêu chuẩn BCP-47) thay vì "mã ngôn ngữ"

  • TranslateLanguage hiện sử dụng tên có thể đọc được (như .anh) cho các hằng số thay vì các thẻ ngôn ngữ ( như .en).

Sau đây là một số ví dụ về các phương thức cũ và mới của Swift:

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())
    

Dưới đây là một số ví dụ về phương thức Objective-C cũ và mới:

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];
    

Thay đổi dành riêng cho API

Phát hiện và theo dõi đối tượng

Nếu ứng dụng của bạn sử dụng cách 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ì một số nguyên. Tất cả các danh mục chuỗi có thể bao gồm trong enum DetectedObjectLabel.

Lưu ý: danh mục .unknown đã bị xoá. Khi độ tin cậy của việc phân loại một đối tượng thấp, thuật toán phân loại sẽ không trả về nhãn nào.

Sau đây là ví dụ về mã Swift cũ và mới:

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:

if (object.classificationCategory == FIRVisionObjectCategoryFood) {
    ...
}

Mới

if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
  ...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
  ...
}

Xoá phần phụ thuộc của 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ụ máy học Firebase là thành phần Firebase duy nhất bạn sử dụng
  • Bạn chỉ sử dụng các API trên thiết bị
  • Bạn không dùng mô hình phân phát

Trong trường hợp này, bạn có thể xóa các phần phụ thuộc của Firebase sau khi di chuyển. Hãy làm theo các bước sau:

  • Xóa tệp cấu hình Firebase bằng cách xóa tệp GoogleService-Info.plist từ thư mục của ứng dụng và dự án Xcode của bạn.
  • Xoá mọi người quản lý Firebase, chẳng hạn như pod 'Firebase/Analytics', khỏi Podfile của bạn.
  • Xóa mọi hoạt động khởi chạy FirebaseApp, chẳng hạn như FirebaseApp.configure() khỏi mã của bạn.
  • Xóa ứ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ỳ sự cố nào, vui lòng xem trang Cộng đồng của chúng tôi, trong đó chúng tôi trình bày các kênh có sẵn để liên hệ với chúng tôi.