Ich versuche, Apples Beispiel Core ML-Modelle, die auf der WWDC 2017 vorgeführt wurden ordnungsgemäß funktionieren. Ich benutze das GoogLeNet, um Bilder zu klassifizieren (siehe Apple Machine Learning Page). Das Modell nimmt einen CVPixelBuffer als Eingabe. Ich habe ein Bild namens imageSample.jpg, das ich für diese Demo verwende. Mein Code ist unten:Convert Image in CVPixelBuffer für Machine Learning Swift
var sample = UIImage(named: "imageSample")?.cgImage
let bufferThree = getCVPixelBuffer(sample!)
let model = GoogLeNetPlaces()
guard let output = try? model.prediction(input: GoogLeNetPlacesInput.init(sceneImage: bufferThree!)) else {
fatalError("Unexpected runtime error.")
}
print(output.sceneLabel)
Ich bekomme immer den unerwarteten Laufzeitfehler in der Ausgabe und nicht eine Bildklassifizierung. Mein Code, um das Bild zu konvertieren unter:
func getCVPixelBuffer(_ image: CGImage) -> CVPixelBuffer? {
let imageWidth = Int(image.width)
let imageHeight = Int(image.height)
let attributes : [NSObject:AnyObject] = [
kCVPixelBufferCGImageCompatibilityKey : true as AnyObject,
kCVPixelBufferCGBitmapContextCompatibilityKey : true as AnyObject
]
var pxbuffer: CVPixelBuffer? = nil
CVPixelBufferCreate(kCFAllocatorDefault,
imageWidth,
imageHeight,
kCVPixelFormatType_32ARGB,
attributes as CFDictionary?,
&pxbuffer)
if let _pxbuffer = pxbuffer {
let flags = CVPixelBufferLockFlags(rawValue: 0)
CVPixelBufferLockBaseAddress(_pxbuffer, flags)
let pxdata = CVPixelBufferGetBaseAddress(_pxbuffer)
let rgbColorSpace = CGColorSpaceCreateDeviceRGB();
let context = CGContext(data: pxdata,
width: imageWidth,
height: imageHeight,
bitsPerComponent: 8,
bytesPerRow: CVPixelBufferGetBytesPerRow(_pxbuffer),
space: rgbColorSpace,
bitmapInfo: CGImageAlphaInfo.premultipliedFirst.rawValue)
if let _context = context {
_context.draw(image, in: CGRect.init(x: 0, y: 0, width: imageWidth, height: imageHeight))
}
else {
CVPixelBufferUnlockBaseAddress(_pxbuffer, flags);
return nil
}
CVPixelBufferUnlockBaseAddress(_pxbuffer, flags);
return _pxbuffer;
}
return nil
}
ich diesen Code aus einer früheren Stackoverflow Post bekam (letzte Antwort here). Ich erkenne, dass der Code möglicherweise nicht korrekt ist, aber ich habe keine Ahnung, wie ich das selbst machen könnte. Ich glaube, dass dies der Abschnitt ist, der den Fehler enthält. Das Modell ruft den folgenden Eingabetyp auf: Image<RGB,224,224>
Ich habe ein Beispielprojekt mit komplettem Code erstellt, den Sie hier finden: https://hackernoon.com/swift-tutorial-native-mach ine-learning-and-machine-vision-in-ios-11-11e1e88aa397 –