2017-10-29 3 views
0

저는 멍청한 반응을 보였습니다. VNCoreMLRequest에 여러 CoreML 모델이 어떻게 생겼는지 정말로 모르겠습니다. 아래 코드는 하나의 모델 만 사용하고 있지만 다른 모델 (아래 예제에서는 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... 
} 

면책 조항 : 여기 스위프트 표준 라이브러리 시퀀스 기능을하지만,이 두 모델은 같은 순서로 같은 얼굴에 대한 정보를 반환한다고 가정하는 것이 당신이 할 수있는 편리한 방법입니다 테스트를 거쳤습니다. 그러나 적어도 당신이 찾고있는 것을 스케치하는 것입니다 - 필요에 따라 조정하십시오.