Roboflow 1.1.19

Roboflow 1.1.19

Nick ArnerBrad DwyerJoseph NelsonMaxwell Stone 维护。



Roboflow 1.1.19

  • Roboflow

roboflow-swift-sdk


roboflow logo

这是 Roboflow Swift SDK 的源代码。它允许您在您的 iOS 设备上本地图形检测模型,无论您是否已在本地图形检测模型上进行训练,或者由其他人在Roboflow Universe上训练。SDK 会拉取训练模型的 CoreML 版本,并在本地缓存它,以便在边缘进行推理。

入门指南

要开始,将 Roboflow 导入项目中

import Roboflow

并使用您的 API 密钥创建一个 RoboflowMobile 实例

let rf = RoboflowMobile(apiKey: API_KEY)

您可以在 此处 查找如何访问您的 API 密钥。

加载 CoreML 模型

初始化 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!
}

视频帧推理

要对视频流进行推理,您需要在应用内的 AVCaptureVideoDataOutputSampleBufferDelegatecaptureOutput 代理方法中调用 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

调用返回的 RFObjectDetectionPredictiongetValues 来获取这些结果。

图像上传

如果您想将图像上传到项目以提高您模型的未来版本,可以使用 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 代码分发的工具,并集成到 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 安装包

Cocoapods

要使用 Cocoapods 安装,请确保已经安装并添加了 Cocoapods 到您的项目中,然后运行 podfile 中的 pod Roboflow

然后,在项目的根目录下运行 pod install

如果您之前已通过Cocoapods安装了Roboflow SDK,您需要更新您的podfile以包含pod Roboflow条目。