Xcode9学习笔记77
来源:互联网 发布:俄罗斯 苏联 知乎 编辑:程序博客网 时间:2024/04/28 21:26
首先到https://developer.apple.com/machine-learning/ 下载一个Resnet50.mlmodel文件,将它拖动到XCode项目文件夹:
编写代码如下:
import UIKitimport CoreMLclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let image = UIImage(named: "sample") let width: CGFloat = 224.0 let height: CGFloat = 224.0 //获得一个基于位图的上下文,并设置其为当前的上下文 UIGraphicsBeginImageContext(CGSize(width: width, height: height)) //将从项目中加载的图像,绘制在上下文的指定区域 image?.draw(in: CGRect(x: 0, y: 0, width: width, height: height)) //从上下文中获得格式转换后的图像 let newImage = UIGraphicsGetImageFromCurrentImageContext() //完成图像的格式转换后,关闭当前的上下文 UIGraphicsEndImageContext() if #available(iOS 11.0, *) { let resnet50 = Resnet50()//初始化机器学习模型的对象 guard let output = try? resnet50.prediction(image: PixelBufferFromImage(newImage!)!) else { fatalError("Unexpected Error") } print(output.classLabel) } } func createPixelBufferPool(_ width: Int32, _ height: Int32, _ pixelFormat: FourCharCode, _ maxBufferCount: Int32) -> CVPixelBufferPool? { var outputPool: CVPixelBufferPool? = nil let sourcePixelBufferOptions: NSDictionary = [kCVPixelBufferPixelFormatTypeKey: pixelFormat, kCVPixelBufferWidthKey: width, kCVPixelBufferHeightKey: height, kCVPixelFormatOpenGLESCompatibility: true, kCVPixelBufferIOSurfacePropertiesKey: NSDictionary()] let pixelBufferPoolOptions: NSDictionary = [kCVPixelBufferPoolMinimumBufferCountKey: maxBufferCount] CVPixelBufferPoolCreate(kCFAllocatorDefault, pixelBufferPoolOptions, sourcePixelBufferOptions, &outputPool) return outputPool } func PixelBufferFromImage(_ image: UIImage) -> CVPixelBuffer?{ let size = image.size var pxbuffer : CVPixelBuffer? let pixelBufferPool = createPixelBufferPool(224, 224, FourCharCode(kCVPixelFormatType_32BGRA), 2056) // Hard coded values for demo purposes. let status = CVPixelBufferPoolCreatePixelBuffer(kCFAllocatorDefault, pixelBufferPool!, &pxbuffer) guard (status == kCVReturnSuccess) else{ return nil } CVPixelBufferLockBaseAddress(pxbuffer!, CVPixelBufferLockFlags(rawValue: 0)) let pxdata = CVPixelBufferGetBaseAddress(pxbuffer!) let rgbColorSpace = CGColorSpaceCreateDeviceRGB() let context = CGContext(data: pxdata, width: Int(size.width), height: Int(size.height), bitsPerComponent: 8, bytesPerRow: CVPixelBufferGetBytesPerRow(pxbuffer!), space: rgbColorSpace, bitmapInfo: CGImageAlphaInfo.premultipliedFirst.rawValue) context?.translateBy(x: 0, y: image.size.height) context?.scaleBy(x: 1.0, y: -1.0) UIGraphicsPushContext(context!) image.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height)) UIGraphicsPopContext() CVPixelBufferUnlockBaseAddress(pxbuffer!, CVPixelBufferLockFlags(rawValue: 0)) return pxbuffer } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
阅读全文
0 0
- Xcode9学习笔记77
- Xcode9学习笔记77
- Xcode9学习笔记1
- Xcode9学习笔记2
- Xcode9学习笔记3
- Xcode9学习笔记4
- Xcode9学习笔记5
- Xcode9学习笔记6
- Xcode9学习笔记7
- Xcode9学习笔记8
- Xcode9学习笔记9
- Xcode9学习笔记10
- Xcode9学习笔记11
- Xcode9学习笔记12
- Xcode9学习笔记13
- Xcode9学习笔记14
- Xcode9学习笔记15
- Xcode9学习笔记16
- 这场举世瞩目的「量子霸权」争夺赛遇到了理论困境
- 耶鲁教授与谷歌和 IBM 赛跑,争造世界上第一台真正意义的量子计算机
- 纽约时报: 2012, 神经网络改变了机器观察世界的方式; 现在, 历史即将重演
- 六种改进均未超越原版:谷歌新研究对GAN现状提出质疑
- 看车识党派:斯坦福大学李飞飞团队发表计算机视觉人口统计新方法
- Xcode9学习笔记77
- python3实现《机器学习实战》遇到的问题:range函数
- 015 t分布、卡方分布、F分布习题及正态总体下常用分布
- 19.Python
- 程序员在阿里巴巴总部工作是怎么样的?
- 程序员和程序艺术家
- 检索本地本文
- const
- 字符串应用