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

Cập nhật Cocoapods

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

APITê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
Gắn nhãn hình ảnh Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/Gắn nhãn 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
Gắn nhãn hình ảnh AutoML (mô hình theo gói) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Gắn 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/MLNLSmartReplies
GoogleMLKit/Trả lời thông minh
Dịch Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Dịch

Cập nhật tên lớp, enum và loại

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

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

Đối với một số tên và loại 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 loại mới
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage Hình ảnh tầm nhìn (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 hoặc loại 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 nhiệm vụ. Thay thế các lệnh gọi đến các phương thức ban đầu khác nhau để 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 enum VisionDetectorImageOrientation. Sử dụng thuộc tính orientation của VisionImage để chỉ định hướng hiển thị của hình ảnh.

  • Phương thức onDeviceTextRecognizer nhận thực thể TextRecognizer mớ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, TextLineTextBlock.

  • Phương thức onDeviceImageLabeleronDeviceImageLabeler(options:) để tạo thực thể ImageLabeler mới đã được hợp nhất và đổi tên thành imageLabeler(options:).

  • Phương thức objectDetector để lấy thực thể 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.

  • 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ữ".

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

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

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ề các phương thức Target-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];
    

Các thay đổi theo API cụ thể

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â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 đã 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ể có đều được đưa vào 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 đối tượng thấp, thuật toán phân loại sẽ không trả về nhãn nào.

Dưới đâ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ã Object-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á 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 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 GoogleService-Info.plist khỏi thư mục của ứng dụng và dự án Xcode của bạn.
  • Xoá mọi cocoapod trong Firebase, chẳng hạn như pod 'Firebase/Analytics', khỏi Podfile của bạn.
  • 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 tại bảng điều khiển của Firebase theo instructions 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 để trình bày thông tin về các kênh mà bạn có thể liên hệ với chúng tôi.