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 dành 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 15.5 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 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 iOS trong Podfile của ứng dụng:
| API | Tên pod cũ | Tên pod 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 được gói) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| Gắn nhãn hình ảnh bằng AutoML (mô hình đã tải xuống) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom Để lưu trữ và tải mô hình tuỳ chỉnh xuống, hãy chuyển các mô hình của bạn sang Cloud Storage và thêm logic tải xuống trong ứ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 từ Firebase ML sang Cloud Storage. |
| 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à loại
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ố
Visionkhỏi tên lớp và enum - Objective-C: Thay thế cả tiền tố 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 lớp và loại:
Swift
| Lớp hoặc loại cũ | Lớp hoặc loại mới |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | 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ữ đã ngừng hoạt độ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. |
| VisionBarcodeDetectionCallback | BarcodeScanningCallback |
| VisionBarcodeDetector | BarcodeScanner |
| VisionBarcodeDetectorOptions | BarcodeScannerOptions |
| VisionImage | VisionImage (không có thay đổi) |
| VisionPoint | VisionPoint (không có thay đổi) |
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
| Lớp hoặc loại cũ | Lớp 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ữ đã ngừng hoạt độ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. |
| 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 nhà máy để lấy trình phát hiện bằng các lệnh gọi trực tiếp đến phương thức nhà máy của từng trình phát hiện.Lớp
VisionImageMetadatađã bị xoá cùng với enumVisionDetectorImageOrientation. Sử dụng thuộc tínhorientationcủaVisionImageđể 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ànhtextRecognizer.Thuộc tính mức độ 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:)để nhận một thực thểImageLabelermới đã được hợp nhất và đổi tên thànhimageLabeler(options:).Phương thức
objectDetectorđể nhận một thực thểObjectDetectormới đã bị xoá. Thay vào đó, hãy sử dụngobjectDetector(options:).Thuộc tính
typeđã bị xoá khỏiImageLabelervà thuộc tínhentityIDđã 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ànhprocess(_:, completion:)để nhất quán với các API về hình ảnh khác.Các API về 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ữ".
TranslateLanguagehiện sử dụng các 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).
Dưới đâ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())
Dưới đâ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 đố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 vật 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 vật thể đượ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 mức độ tin cậy của việc phân loại một vật thể ở mức thấp, bộ 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:
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
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.plistkhỏ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 quá trình 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 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.