2017-10-29 192 views
0

我是一個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) 
      } 
     } 
    } 

回答

0

要使用多個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應用,不測試。但它至少是您可能要查找的內容的草圖 - 根據需要進行調整。