Apple在 WWDC 2017的发布会上发布了机器学习框架Core ML.而后在后续的两年里,不断完善Core ML的框架,在今年的WWDC 2019里对Core ML框架进行了一次大的更新,将更新到3.0版本,即Core ML 3.0增长了包括Tensorflow
等知名框架的支持,开发者不只能够经过苹果开发的模型还可使用第三方框架的机器学习模型来进行开发.Core ML 3.0还支持开发者本身开发和训练本身的学习模型,并且开发者还能够更新已有的学习模型来对学习模型进行更新改造.git
能够说Core ML 3.0是苹果在机器学习上面的上的一个很大的台阶.github
本文将会介绍开发者如何使用Core ML去作对图片相关识别的内容.算法
使用Core ML,开发者能够将机器学习模型集成到应用程序中.swift
模型是将机器学习算法来训练数据集合的结果.开发者可使用模型根据新输入数据进行预测。例如,在给定卧室和浴室数量的状况下,对区域历史房价进行培训的模型可能可以预测房屋的价格。安全
卡发着可使用Create ML训练模型.或者可使用各类其余机器学习库,而后使用Core ML Tools将模型转换为Core ML格式.Core ML还容许您在设备上从新训练或微调现有模型,并且会保持用户数据的私密性和安全性.bash
Core ML是某些特定域的框架和功能的基础.Vision支持视觉图像分析,天然语言的天然语言处理,语音转换音频文本,SoundAnalysis用于识别音频声音.Core ML自己创建在低层面的原语之上,如Accelerate和BNNS,以及Metal Performance Shaders.网络
Core ML也为设备性能进行了优化,从而减小了内存占用和功耗.严格在设备上运行可以确保用户数据的隐私,而且能保证你的应用在没有网络链接时也可以工做和响应。app
Core ML框架
此外也能够到这个第三方仓库里面下载模型
首先咱们到Core ML Models下载MNIST
模型并导入到工程中.
咱们能够看到这边包含有模型的详细描述,模型名字、尺寸大小、做者以及证书等等.这里开发中要注意的点是Inputs
以及Outputs
.在咱们给模型图片的时候,咱们须要注意传递的参数,这里咱们要传入的是尺寸为28*28
的图片.若是传错了,将会影响到咱们的输出值.
当咱们点击Model Class
栏目的箭头时,咱们能够看到该模型的源码.
源码定义了具体的输入输出的相关代码,这里不展开研究. 咱们须要注意的是prediction
这个函数,经过给模型一个图片CVPixelBuffer
数据,获得模型处理后的输出数据.
/**
Make a prediction using the convenience interface
- parameters:
- image: Image of the digit drawing to be classified as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 28 pixels wide by 28 pixels high
- throws: an NSError object that describes the problem
- returns: the result of the prediction as MNISTClassifierOutput
*/
func prediction(image: CVPixelBuffer) throws -> MNISTClassifierOutput {
let input_ = MNISTClassifierInput(image: image)
return try self.prediction(input: input_)
}
复制代码
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else {
return
}
processMNIST(image)
picker.dismiss(animated: true, completion: nil)
}
复制代码
func processMNIST(_ image: UIImage) {
imageView.image = image
// 获取图片Buff
guard let pixelBuffer = image.pixelBufferGray(width: 28, height: 28) else {
return
}
// 获取模型,进行分析
let model = MNISTClassifier()
do {
let output = try model.prediction(image: pixelBuffer)
classifier.text = "\(output.classLabel)"
}
catch {
}
}
复制代码
咱们分析图片里是否包含0-9的数字,将最有可能包含的数字展现出来.
机器学习通过几年的发展,已经愈来愈完善了,苹果在这方面也是竭尽全力,Core ML 3.0是苹果机器学习领域的一次重大突破.这一次的进展也将会让更多的开发者投入到机器学习的热潮中,共同促进机器学习整个大生态的发展.
参考: