这是 Roboflow Swift SDK 的源代码。它允许您在您的 iOS 设备上本地图形检测模型,无论您是否已在本地图形检测模型上进行训练,或者由其他人在Roboflow Universe上训练。SDK 会拉取训练模型的 CoreML 版本,并在本地缓存它,以便在边缘进行推理。
要开始,将 Roboflow 导入项目中
import Roboflow
并使用您的 API 密钥创建一个 RoboflowMobile
实例
let rf = RoboflowMobile(apiKey: API_KEY)
您可以在 此处 查找如何访问您的 API 密钥。
初始化 SDK 后,您可以使用以下代码加载您的模型并对其进行配置。
rf.load(model: model, modelVersion: modelVersion) { [self] model, error, modelName, modelType in
mlModel = model
if error != nil {
print(error?.localizedDescription as Any)
} else {
model?.configure(threshold: threshold, overlap: overlap, maxObjects: maxObjects)
}
}
要在一幅单独的图像上进行推理,请调用
mlModel.detect(image: imageToDetect) { detections, errorr in
let detectionResults: [RFObjectDetectionPrediction] = detections!
}
要对视频流进行推理,您需要在应用内的 AVCaptureVideoDataOutputSampleBufferDelegate
的 captureOutput
代理方法中调用 detect(pixelBuffer: CVPixelBuffer, completion: **@escaping** (([RFObjectDetectionPrediction]?, Error?) -> Void))
函数
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {
return
}
currentPixelBuffer = pixelBuffer
mlModel?.detect(pixelBuffer: pixelBuffer, completion: { detections, error in
if error != nil {
print(error!)
} else {
let detectionResults: [RFObjectDetectionPrediction] = detections!
...
}
})
}
包含的示例应用展示了如何设置并运行一个 AVCaptureSession
的完整实现。
您已经注意到,当推理完成时,SDK 返回一串 RFObjectDetectionPrediction
结果。这些是包含有关在图像中被检测到的对象和数据,以及封装该对象的边界框信息的结构体。
x: Float
y: Float
width: Float
height: Float
className: String
confdience: Float
color: UIColor
box: CGRect
调用返回的 RFObjectDetectionPrediction
的 getValues
来获取这些结果。
如果您想将图像上传到项目以提高您模型的未来版本,可以使用 uploadImage
方法来完成。
rf.uploadImage(image: image, project: project) { result in
switch result {
case .Success:
print("Image uploaded successfully.")
case .Duplicate:
print("You attempted to upload a duplicate image.")
case .Error:
print("You attempted to upload a duplicate image.")
@unknown default:
return
}
}
您可以在此处找到一个示例应用,展示了如何在一个 iOS 应用中使用 Roboflow SDK。该应用使用 Roboflow Universe 上托管的一个预训练模型来检测一轮石头剪刀布中的动作。您需要提供自己的 API 密钥。
您可以通过 Swift 包管理器或 Cocoapods 安装 SDK。
Swift 包管理器 是一种用于自动化 Swift 代码分发的工具,并集成到 swift
编译器中。
要将 Roboflow Swift SDK 包安装到您的包中,在 Package.swift
文件中的依赖关系部分添加对 Roboflow Swift SDK 的引用和一个目标发布版本。
import PackageDescription
let package = Package(
name: "YOUR_PROJECT_NAME",
products: [],
dependencies: [
.package(url: "https://github.com/roboflow/swift-sdk", from: "1.0.0")
]
)
通过 Xcode 安装包
- 转到文件 -> Swift 包 -> 添加包依赖...
- 然后添加 https://github.com/roboflow/swift-sdk
要使用 Cocoapods 安装,请确保已经安装并添加了 Cocoapods 到您的项目中,然后运行 podfile 中的 pod Roboflow
。
然后,在项目的根目录下运行 pod install
。
如果您之前已通过Cocoapods安装了Roboflow SDK,您需要更新您的podfile以包含pod Roboflow
条目。