追加多个VNCoreMLModel ARKit和CoreML
问题描述:
我是一个noob,我真的不知道如何发生多个CoreML模型到VNCoreMLRequest。 下面的代码只是使用一个模型,但我还想追加另一个模型(以下示例中的visionModel2)。谁能帮我?谢谢!追加多个VNCoreMLModel ARKit和CoreML
private func performVisionRequest(pixelBuffer: CVPixelBuffer){
let visionModel = try! VNCoreMLModel(for: self.iFaceModel.model)
let visionModel2 = try! VNCoreMLModel(for: self.ageModel.model)
let request = VNCoreMLRequest(model: visionModel){ request, error in
if error != nil {
return
}
guard let observations = request.results else {
return
}
let observation = observations.first as! VNClassificationObservation
print("Name \(observation.identifier) and confidence is \(observation.confidence)")
DispatchQueue.main.async {
if observation.confidence.isLess(than: 0.04) {
self.displayPredictions(text: "Not recognized")
print("Hidden")
}else {
self.displayPredictions(text: observation.identifier)
}
}
}
答
要使用多个ML模型评估图像,您需要执行多个请求。例如:
let faceModelRequest = VNCoreMLRequest(model: visionModel)
let ageModelRequest = VNCoreMLRequest(model: visionModel2)
let handler = VNImageRequestHandler(/* my image and options */)
handler.perform([faceModelRequest, ageModelRequest])
guard let faceResults = faceModelRequest.results as? [VNClassificationObservation],
let ageResults = ageModelRequest.results as? [VNClassificationObservation]
else { /*handle errors from each request */ }
(是的,你可以运行没有完成处理视觉的请求,然后收集来自多个请求的结果可能要检查的请求prefersBackgroundProcessing
并调度一切到后台排队自己,虽然。 )
之后,您可能想要将两个请求的结果迭代在一起。这里是你可以做一个方便的方式,与雨燕标准库序列的功能,但它假定这两个模型返回有关以相同的顺序相同的面孔信息:
for (faceObservation, ageObservation) in zip (faceResults, ageResults) {
print(“face \(faceObservation.classification) confidence \(faceObservation.confidence)”)
print(“age \(ageObservation.classification) confidence \(ageObservation.confidence)”)
// whatever else you want to do with results...
}
免责声明:代码写在StackExchange iOS应用,不测试。但它至少是您可能要查找的内容的草图 - 根据需要进行调整。