CoreML for Swift:完整指南与示例
\n\n1. 什么是 CoreML 及其用途
\n\nCoreML 是苹果公司开发的机器学习框架,用于将机器学习模型直接集成到 iOS、macOS、watchOS 和 tvOS 应用程序中。与云端解决方案不同,CoreML 在用户设备上执行所有计算,从而提供即时数据处理,无需网络传输延迟,并确保用户数据的完全隐私。
\n\n为什么需要 CoreML?首先,它允许开发者实现复杂的 AI 功能(如图像识别、自然语言处理、音频分析),而无需深入了解神经网络的细节。其次,设备端运行意味着应用程序可以在离线模式下运行,这对许多使用场景至关重要。第三,苹果优化了 CoreML 以与 Neural Engine、GPU 和 CPU 协同工作,从而在所有苹果设备上实现最佳性能。
\n\nCoreML 支持在流行框架(TensorFlow、PyTorch、scikit-learn)中创建的模型,这些模型可以通过 coremltools 工具转换为 .mlmodel 格式。该框架还与 Vision(用于图像分析)、Natural Language(用于文本处理)和 SoundAnalysis(用于音频)紧密集成。
2. 安装
\n\nCoreML 是苹果的内置框架,无需通过包管理器安装。要使用它,只需将其导入项目即可。但是,要将模型从其他格式转换,您需要 Python 包 coremltools。
\n\n安装 coremltools (Python):
\npip install coremltools\n\n在 Xcode 项目中导入 CoreML:
\nimport CoreML\n\n对于图像和视频处理,还需额外导入 Vision:
\nimport Vision\n\n3. 快速入门——最小工作示例
\n\n让我们创建一个简单的应用程序,使用预训练的 MobileNetV2 模型对图像进行分类。首先,从苹果仓库下载 MobileNetV2.mlmodel 模型,或使用 coremltools 进行转换。
图像分类的最小示例:
\nimport 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\n4. 主要方法/函数/类
\n\n4.1. MLModel
\n签名: class MLModel
功能: 表示已加载机器学习模型的主要类。允许执行预测并获取模型信息。
\n示例:
\n// 从文件加载模型\nguard let modelURL = Bundle.main.url(forResource: "MyModel", withExtension: "mlmodelc"),\n let model = try? MLModel(contentsOf: modelURL) else {\n fatalError("无法加载模型")