CoreML for Swift:完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

CoreML for Swift:完整指南与示例

\n\n

1. 什么是 CoreML 及其用途

\n\n

CoreML 是苹果公司开发的机器学习框架,用于将机器学习模型直接集成到 iOS、macOS、watchOS 和 tvOS 应用程序中。与云端解决方案不同,CoreML 在用户设备上执行所有计算,从而提供即时数据处理,无需网络传输延迟,并确保用户数据的完全隐私。

\n\n

为什么需要 CoreML?首先,它允许开发者实现复杂的 AI 功能(如图像识别、自然语言处理、音频分析),而无需深入了解神经网络的细节。其次,设备端运行意味着应用程序可以在离线模式下运行,这对许多使用场景至关重要。第三,苹果优化了 CoreML 以与 Neural Engine、GPU 和 CPU 协同工作,从而在所有苹果设备上实现最佳性能。

\n\n

CoreML 支持在流行框架(TensorFlow、PyTorch、scikit-learn)中创建的模型,这些模型可以通过 coremltools 工具转换为 .mlmodel 格式。该框架还与 Vision(用于图像分析)、Natural Language(用于文本处理)和 SoundAnalysis(用于音频)紧密集成。

\n\n

2. 安装

\n\n

CoreML 是苹果的内置框架,无需通过包管理器安装。要使用它,只需将其导入项目即可。但是,要将模型从其他格式转换,您需要 Python 包 coremltools。

\n\n

安装 coremltools (Python):

\n
pip install coremltools
\n\n

在 Xcode 项目中导入 CoreML:

\n
import CoreML
\n\n

对于图像和视频处理,还需额外导入 Vision:

\n
import Vision
\n\n

3. 快速入门——最小工作示例

\n\n

让我们创建一个简单的应用程序,使用预训练的 MobileNetV2 模型对图像进行分类。首先,从苹果仓库下载 MobileNetV2.mlmodel 模型,或使用 coremltools 进行转换。

\n\n

图像分类的最小示例:

\n
import CoreML\nimport Vision\nimport UIKit\n\n// 1. 加载模型\nguard let model = try? VNCoreMLModel(for: MobileNetV2().model) else {\n    fatalError("无法加载模型")\n}\n\n// 2. 创建请求\nlet request = VNCoreMLRequest(model: model) { request, error in\n    guard let results = request.results as? [VNClassificationObservation],\n          let topResult = results.first else {\n        print("无法对图像进行分类")\n        return\n    }\n    print("识别结果:\\(topResult.identifier) 置信度:\\(topResult.confidence)")\n}\n\n// 3. 加载图像\nguard let image = UIImage(named: "cat.jpg"),\n      let ciImage = CIImage(image: image) else {\n    fatalError("无法加载图像")\n}\n\n// 4. 执行请求\nlet handler = VNImageRequestHandler(ciImage: ciImage)\ntry? handler.perform([request])
\n\n

4. 主要方法/函数/类

\n\n

4.1. MLModel

\n

签名: class MLModel

\n

功能: 表示已加载机器学习模型的主要类。允许执行预测并获取模型信息。

\n

示例:

\n
// 从文件加载模型\nguard let modelURL = Bundle.main.url(forResource: "MyModel", withExtension: "mlmodelc"),\n      let model = try? MLModel(contentsOf: modelURL) else {\n    fatalError("无法加载模型")                    

推荐