Как получить данные 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.