前提条件
在开始迁移代码之前,请确保您满足以下要求:
- 机器学习套件支持 Xcode 13.2.1 或更高版本。
- 机器学习套件支持 iOS 10 或更高版本。
- 机器学习套件不支持 32 位架构(i386 和 armv7)。机器学习套件支持 64 位架构(x86_64 和 arm64)。
- 机器学习套件库仅以 cocoaPods 的形式提供。您不能混用框架和 cocoaPods,因此若要使用此库,您需要先进行迁移,改为使用 cocoaPods。
更新 CocoaPods
在应用的 Podfile 中更新机器学习套件 iOS cocoapods 的依赖项:
API | 旧 Pod 名称 | 新 Pod 名称 |
---|---|---|
条形码扫描 | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/条形码扫描 |
人脸检测 | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
图片标注 | Firebase/MLVision Firebase/MLVisionLabelModel |
GoogleMLKit/ImageLabeling |
对象检测和跟踪 | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection |
文本识别 | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/文本识别 |
AutoML 图片标签(捆绑模型) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
AutoML 图片标签(从 Firebase 下载模型) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom GoogleMLKit/LinkFirebase |
语言 ID | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
智能回复 | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
翻译 | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/翻译 |
更新类、枚举和类型的名称
一般来说,类、枚举和类型需要按如下方式重命名:
- Swift:从类名称和枚举中移除
Vision
前缀 - Objective-C:将
FIRVision
和FIR
类名称以及枚举前缀替换为MLK
对于某些类名称和类型,此一般规则不适用:
Swift
旧的类或类型 | 新类或类型 |
---|---|
AutoMLLocalModel | LocalModel |
AutoMLRemoteModel | CustomRemoteModel |
VisionBarcodeDetectionCallback | BarcodeScanningCallback |
VisionBarcodeDetector | BarcodeScanner |
VisionBarcodeDetectorOptions | BarcodeScannerOptions |
VisionImage | VisionImage(无变化) |
VisionPoint | VisionPoint(无变化) |
VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
旧的类或类型 | 新类或类型 |
---|---|
FIRAutoMLLocalModel | MLKLocalModel |
FIRAutoMLRemoteModel | MLKCustomRemoteModel |
FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
FIRVisionBarcodeDetector | MLKBarcodeScanner |
FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
FIRVisionImage | MLKVisionImage |
FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
FIRVisionPoint | MLKVisionPoint |
Objective-C
更新方法名称
根据以下规则更新方法名称:
网域入口点类(
Vision
、NaturalLanguage
)不再存在。它们已被任务专用类取代。 将用于获取检测器的各种工厂方法的调用替换为对每个检测器的工厂方法的直接调用。移除了
VisionImageMetadata
类以及VisionDetectorImageOrientation
枚举。使用VisionImage
的orientation
属性来指定图片的显示方向。用于获取新
TextRecognizer
实例的onDeviceTextRecognizer
方法已重命名为textRecognizer
。置信度属性已从文本识别结果类中移除,包括
TextElement
、TextLine
和TextBlock
。用于获取新
ImageLabeler
实例的onDeviceImageLabeler
和onDeviceImageLabeler(options:)
方法已合并,并重命名为imageLabeler(options:)
。移除了用于获取新
ObjectDetector
实例的objectDetector
方法。请改用objectDetector(options:)
。type
属性已从ImageLabeler
中移除,entityID
属性已从图片标签结果类ImageLabel
中移除。条形码扫描 API
detect(in _:, completion:)
已重命名为process(_:, completion:)
,以与其他 Vision API 保持一致。Natural Language API 现在使用术语“语言标记”(由 BCP-47 标准定义),而不是“语言代码”。
TranslateLanguage
现在使用可读名称(例如 .english)作为其常量,而不是使用语言标记(例如 .en)。
以下是新旧 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()
新
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())
以下是新旧 Objective-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];
新
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];
特定于 API 的更改
对象检测和跟踪
如果您的应用使用对象分类,请注意,新 SDK 更改了返回检测到的对象的分类类别的方式。
VisionObject
中的 VisionObjectCategory
作为 ObjectLabel
对象中的 text
(而非整数)返回。所有可能的字符串类别都包含在 DetectedObjectLabel
枚举中。
请注意,.unknown
类别已被移除。当为对象分类的置信度较低时,分类器不会返回任何标签。
以下是新旧 Swift 代码示例:
旧优惠
if (object.classificationCategory == .food) { ... }
新
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) { ... } }
以下是新旧 Objective-C 代码示例:
旧优惠
if (object.classificationCategory == FIRVisionObjectCategoryFood) { ... }
新
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) { ... } // or if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) { ... }
移除 Firebase 依赖项(可选)
只有在符合以下条件时,此步骤才适用:
- Firebase 机器学习套件是您唯一使用的 Firebase 组件
- 您仅使用设备端 API
- 您未使用模型部署
如果是这种情况,您可以在迁移后移除 Firebase 依赖项。请按照以下步骤操作:
- 从应用目录和 Xcode 项目中删除 GoogleService-Info.plist 文件,以移除 Firebase 配置文件。
- 从 Podfile 中移除任何 Firebase cocoapod,例如
pod 'Firebase/Analytics'
。 - 从代码中移除任何 FirebaseApp 初始化,例如
FirebaseApp.configure()
。 - 按照 Firebase 支持网站上的instructions,在 Firebase 控制台上删除您的 Firebase 应用。
获取帮助
如果您遇到任何问题,请访问我们的社区页面,其中列出了可以通过哪些渠道与我们联系。