Как получить данные Bounding Box для созданного 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).

Кстати, мы вызываем 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 ответ

Решение

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

Другие вопросы по тегам