Как получить данные Bounding Box для созданного mlmodel с детской площадкой - PullRequest
0 голосов
/ 15 октября 2018

Мы создали млмодель с игровой площадкой типа https://developer.apple.com/documentation/createml/creating_an_image_classifier_model.

Затем мы использовали следующий код, чтобы получить данные ограничивающего прямоугольника объектов в этой млмодели.Но в «результатах» мы можем получить только предсказанные значения и имена объектов, которые мы смоделировали, даже если это было выходом, но не нашей целью.

print ("detectOurModelHandler (results)") Показывает нам все объекты и значения предсказанияв нашей mlmodel, и это VNClassificationObservation.

Так что неудивительно, что у нас нет коробочных данных.

Итак, проблема в том, как создать модель как VNRecognizedObjectObservation, я думаю?

Согласно https://developer.apple.com/documentation/vision/recognizing_objects_in_live_capture мы должны получить данные ограничивающего прямоугольника.

Номы не можем.Даже print ("detectOurModelHandler 2") никогда не вызывается как dump (objectBounds).

Кстати, мы вызываем findOurModels в captureOutput.Мы называем это как раз в 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)

     }            
   }
 })

}

1 Ответ

0 голосов
/ 15 октября 2018

Это нельзя сделать с помощью CreateML.Я еще этого не делал, но говорят, что модель с ограничивающими данными может быть создана с помощью Turi Create.

...