Di chuyển cho iOS

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

  • ML Kit hỗ trợ Xcode 13.2.1 trở lên.
  • Bộ công cụ học máy 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). Bộ công cụ học máy có hỗ trợ 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ướ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 đối tượng và theo dõi 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) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom

Để lưu trữ và tải 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 đó dưới dạng mô hình cục bộ. Để biết thông tin chi tiết, hãy xem hướng dẫn di chuyển Firebase ML sang Bộ nhớ đám mây.
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

Nói chung, bạn cần đổi tên các lớp, enum và loại 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 cũng như tiền tố enum bằng MLK

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 loại mới
AutoMLLocalModel LocalModel
AutoMLRemoteModel LocalModel

Cần 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 dùng nữa. Để biết thông tin chi tiết, hãy xem hướng dẫn di chuyển Firebase ML sang Bộ nhớ đám mây.
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 loại mới
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKLocalModel

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 dùng nữa. Để biết thông tin chi tiết, hãy xem hướng dẫn di chuyển Firebase ML sang Bộ nhớ đám mây.
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionPoint MLKVisionPoint
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions

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 tạo của chúng để lấy các đối tượng nhận dạng bằng các lệnh gọi trực tiếp đến phương thức tạo 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 orientation của VisionImage để chỉ định hướng hiển thị của hình ảnh.

  • Phương thức onDeviceTextRecognizer nhận một 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.

  • Các phương thức onDeviceImageLabeleronDeviceImageLabeler(options:) để lấy một 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 một 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.

  • Natural Language API 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 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:

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:

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 đối tượng và theo dõi

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

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á 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 GoogleService-Info.plist khỏi thư mục của ứ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 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 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.