机器学习-CoreML入门

前言

AppleWWDC 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自己创建在低层面的原语之上,如AccelerateBNNS,以及Metal Performance Shaders.网络

Core ML也为设备性能进行了优化,从而减小了内存占用和功耗.严格在设备上运行可以确保用户数据的隐私,而且能保证你的应用在没有网络链接时也可以工做和响应。app

官方文档

Core ML框架

WWDC介绍

WWDC 2019 - Session 704机器学习

机器学习模型下载

Core ML Models

此外也能够到这个第三方仓库里面下载模型

Awesome-CoreML-Models

代码示例--识别图片中的数字

准备工做

首先咱们到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苹果机器学习领域的一次重大突破.这一次的进展也将会让更多的开发者投入到机器学习的热潮中,共同促进机器学习整个大生态的发展.

参考:

An in-depth look at Core ML 3

机器学习移动端的峥嵘初现: Core ML 3.0

iOS-11-by-Examples

Core ML入门:构建一个简单的图像识别应用

相关文章
相关标签/搜索