2017-10-29 3 views
0

私はnoobです。私はVNCoreMLRequestに複数のCoreMLモデルがどうして起こったのか本当にわかりません。 以下のコードでは1つのモデルを使用していますが、別のモデル(下の例では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を確認したいと背景にすべてを派遣かもしれませんが、自分自身をキューに入れます。 )

その後、両方のリクエストの結果を一緒に繰り返すことをお勧めします。 、コードStackExchange iOSアプリで書かれていない:

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... 
} 

免責事項:ここでスウィフト標準ライブラリシーケンス機能と、それは両方のモデルは、同じ順序で同じ顔に関する情報を返すことを前提としていることをあなたができる便利な方法ですテストされた。しかし、それは少なくともあなたが探しているもののスケッチです - 必要に応じて微調整してください。

関連する問題