0

我们创建了一个带有游乐场的 mlmodel,例如https://developer.apple.com/documentation/createml/creating_an_image_classifier_model

然后我们使用以下代码获取该 mlmodel 中对象的边界框数据。但是在“结果”中,我们只能得到我们建模的预测值和对象名称,即使那是退出但不是我们的目标。

print("detectOurModelHandler (results)") 向我们展示了我们的 mlmodel 中的所有对象和预测值,它是 VNClassificationObservation。

所以我们没有盒子数据也就不足为奇了。

所以问题是如何创建模型作为 VNRecognizedObjectObservation,我认为?

根据https://developer.apple.com/documentation/vision/recognizing_objects_in_live_capture我们应该得到边界框数据。

但我们不能。甚至 print("detectOurModelHandler 2") 也不会像 dump(objectBounds) 那样被调用。

我们顺便在 captureOutput 中调用 findOurModels。我们现在称它为 1 秒一次来测试我们的模型。

lazy var ourModel:VNCoreMLModel = { return try! VNCoreMLModel(for: ImageClassifier().model)}()

lazy var ourModelRequest: VNCoreMLRequest = { 
    return VNCoreMLRequest(model: ourModel, completionHandler: detectOutModelHandler)  
}()



 func findOurModels(pixelbuffer: CVPixelBuffer){

    let testImage =  takeAFrameImage(imageBuffer: pixelbuffer)
    let imageForThis   = testImage.cgImage
    let requestOptions2:[VNImageOption : Any] = [:]

    let handler = VNImageRequestHandler(cgImage: imageForThis!,
                                                    orientation: CGImagePropertyOrientation(rawValue: 6)!,
                                                    options: requestOptions2)



    try? handler.perform([ourModelRequest])

}




func detectOurModelHandler(request: VNRequest, error: Error?) {

   DispatchQueue.main.async(execute: {

    if let results = request.results {

       print("detectOurModelHandler \(results)") 

        for observation in results where observation is VNRecognizedObjectObservation {

             print("detectOurModelHandler 2") 

            guard let objectObservation = observation as? VNRecognizedObjectObservation else {
                continue
            }




      let objectBounds = VNImageRectForNormalizedRect(objectObservation.boundingBox, self.frameWidth, self.frameHeight)


             dump(objectBounds)

     }            
   }
 })

}
4

1 回答 1

0

它不能使用 CreateML 完成。我还没有这样做,但据说可以使用 Turi Create 创建具有边界数据的模型。

于 2018-10-15T09:27:11.290 回答