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是蘋果機器學習領域的一次重大突破.這一次的進展也將會讓更多的開發者投入到機器學習的熱潮中,共同促進機器學習整個大生態的發展.
參考: