Мы создали млмодель с игровой площадкой типа 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)
}
}
})
}