Created
June 6, 2017 03:23
-
-
Save cieslak/743f9321834c5a40597afa1634a48343 to your computer and use it in GitHub Desktop.
UIImage to CVPixelBuffer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { | |
dismiss(animated: true, completion: nil) | |
guard let image = info["UIImagePickerControllerOriginalImage"] as? UIImage else { | |
return | |
} | |
UIGraphicsBeginImageContextWithOptions(CGSize(width: 224, height: 224), true, 1.0) | |
image.draw(in: CGRect(x: 0, y: 0, width: 224, height: 224)) | |
let newImage = UIGraphicsGetImageFromCurrentImageContext()! | |
UIGraphicsEndImageContext() | |
let attrs = [kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue, kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue] as CFDictionary | |
var pixelBuffer : CVPixelBuffer? | |
let status = CVPixelBufferCreate(kCFAllocatorDefault, Int(newImage.size.width), Int(newImage.size.height), kCVPixelFormatType_32ARGB, attrs, &pixelBuffer) | |
guard (status == kCVReturnSuccess) else { | |
return | |
} | |
CVPixelBufferLockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0)) | |
let pixelData = CVPixelBufferGetBaseAddress(pixelBuffer!) | |
let rgbColorSpace = CGColorSpaceCreateDeviceRGB() | |
let context = CGContext(data: pixelData, width: Int(newImage.size.width), height: Int(newImage.size.height), bitsPerComponent: 8, bytesPerRow: CVPixelBufferGetBytesPerRow(pixelBuffer!), space: rgbColorSpace, bitmapInfo: CGImageAlphaInfo.noneSkipFirst.rawValue) | |
context?.translateBy(x: 0, y: newImage.size.height) | |
context?.scaleBy(x: 1.0, y: -1.0) | |
UIGraphicsPushContext(context!) | |
newImage.draw(in: CGRect(x: 0, y: 0, width: newImage.size.width, height: newImage.size.height)) | |
UIGraphicsPopContext() | |
CVPixelBufferUnlockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0)) | |
guard let prediction = try? model.prediction(image: pixelBuffer!) else { | |
return | |
} | |
let thing = prediction.classLabel | |
let vc = UIAlertController(title: "This might be...", message: thing, preferredStyle: .alert) | |
let ok = UIAlertAction(title: "OK", style: .default) { action in self.dismiss(animated: true, completion: nil)} | |
vc.addAction(ok) | |
present(vc, animated: true, completion: nil) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment