CustomVision
Microsoft的Custom Vision服务的Swift SDK
特性
- Custom Vision Training API 3.0
- Custom Vision Prediction API 3.0
- 支持与
UIKit
和Foundation
对象如UIImage
一起使用 - 导出并下载用于离线使用的
CoreML
模型 - 示例应用
系统要求
- iOS 11.0+ / Mac OS X 10.11+ / tvOS 9.0+ / watchOS 2.0+
- Xcode 9.3+
- Swift 4.1+
- Custom Vision 账户
安装
Carthage
Carthage 是一个去中心化的依赖管理器,它可以构建您的依赖并提供二进制框架。
您可以使用以下命令通过 Homebrew 安装 Carthage
$ brew update
...
$ brew install carthage
要使用 Carthage 将 CustomVision 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它
github "colbylwilliams/CustomVision"
运行 carthage update
命令以构建框架,并将构建的 CustomVision.framework
拖入您的 Xcode 项目中。
CocoaPods
即将推出
Swift Package Manager
即将推出
用法
要开始使用 CustomVision,您需要向 SDK 提供您的 训练密钥 和 预测密钥。
如果您正在处理单个 项目,您还可以提供一个默认项目 ID,该项目 ID 将用于每个项目操作 (而不是每次都传递它)。
提供训练密钥、预测密钥和项目 ID 有两种方式:编程方式或将其添加到 plist 文件中
编程方式
提供这些值并开始使用 SDK 的最简单方法是编程设置这些值
CustomVisionClient.defaultProjectId = "CUSTOM_VISION_PROJECT_ID"
CustomVisionClient.subscriptionRegion = "CUSTOM_VISION_PROJECT_ID"
CustomVisionClient.shared.trainingKey = "CUSTOM_VISION_TRAINING_KEY"
CustomVisionClient.shared.predictionKey = "CUSTOM_VISION_PREDICTION_KEY"
CustomVisionClient.shared.getIterations { r in
// r.resource is [Iteration]
}
plist 文件
您还可以将这些值放在项目的 info.plist
文件中,一个独立的 CustomVision.plist
文件中,或者提供您自己的 plist 文件以供使用。
只需添加 CustomVisionTrainingKey
、CustomVisionPredictionKey
、CustomVisionProjectId
和 CustomVisionSubscriptionRegion
键,并分别提供您的训练密钥、预测密钥和默认项目 ID。
注意:此方法仅供快速开发示例使用,不建议在生产应用程序中将这些值放入 plist 文件中。
Info.plist
...
<dict>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CustomVisionProjectId</key>
<string>CUSTOM_VISION_PROJECT_ID</string>
<key>CustomVisionTrainingKey</key>
<string>CUSTOM_VISION_TRAINING_KEY</string>
<key>CustomVisionPredictionKey</key>
<string>CUSTOM_VISION_PREDICTION_KEY</string>
<key>CustomVisionSubscriptionRegion</key>
<string>CUSTOM_VISION_SUBSCRIPTION_REGION</string>
...
CustomVision.plist
或者添加一个 CustomVision.plist
文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CustomVisionProjectId</key>
<string>CUSTOM_VISION_PROJECT_ID</string>
<key>CustomVisionTrainingKey</key>
<string>CUSTOM_VISION_TRAINING_KEY</string>
<key>CustomVisionPredictionKey</key>
<string>CUSTOM_VISION_PREDICTION_KEY</string>
<key>CustomVisionSubscriptionRegion</key>
<string>CUSTOM_VISION_SUBSCRIPTION_REGION</string>
</dict>
</plist>
命名的 plist
最后,您可以将 CustomVisionTrainingKey
、CustomVisionPredictionKey
、CustomVisionProjectId
和 CustomVisionSubscriptionRegion
键值对添加到项目 主程序包 中的任何 plist 中,并提供 plist 的名称
CustomVisionClient.shared.getKeysFrom(plistNamed: "SuperDuperDope")
训练图像
CustomVision SDK 添加了几个便利函数,让上传新的训练图像尽可能简单。
本例演示了在 Custom Vision 项目中创建一个新标签,然后上传一些新的训练图像到项目,并使用新创建的标签对每个图像进行标记。
let client = CustomVisionClient.shared
let tag = "New Tag" // doesn't exist in project yet
let images: [UIImage] = // several UIImages
client.createImages(from: images, withNewTagNamed: name) { r in
// r.resource is ImageCreateSummary
}
导出和下载 CoreML 模型
此 SDK 的一大优点是能够重新训练项目、导出 新的训练模型(迭代)、下载到手机的文件系统,并在设备上编译模型以用于 CoreML
。
func updateUser(message: String) {
// update user
}
let client = CustomVisionClient.shared
client.trainAndDownloadCoreMLModel(withName: "myModel", progressUpdate: updateUser) { (success, message) in
}
一旦编译好的模型保存在设备的文件系统中(如上所述),您可通过客户端的 getModelUrl()
函数获取模型的 URL。
if let url = client.getModelUrl() {
let myModel = try MLModel(contentsOf: url)
}
许可证
遵循MIT许可。详见LICENSE。