iOS: 使用 Turi Create 自定義 Core ML Model

簡評:蘋果提供了很多的工具幫助我們簡化機器學習,本文介紹如何使用 Turi Create 創建自定義 Core ML Model 並將它集成到 iOS 應用中。

開始之前我們需要下列的環境:

  • 具有 64 位處理器(x86_64架構)的計算機
  • Python,版本2.7:從這裡下載

安裝 Turi Create,Terminal.app並輸入以下命令:

$ pip install turicreate$ mkdir MLClassifier$ cd MLClassifier$ touch classifier.py

我們先準備訓練數據集,可以到 ??drive.google.com/file/d下載。

將 dataset 其複製到 MLClassifier 中。

然後在classifier.py 中添加如下代碼:

import turicreate as turiurl = "dataset/"data = turi.image_analysis.load_images(url)// 為圖片設置標籤data["foodType"] = data["path"].apply(lambda path: "Rice" if "rice" in path else "Soup")// 保存將打上標籤的數據集用於訓練data.save("rice_or_soup.sframe")// 預覽數據集data.explore()

Turi Create 簡化了定製機器學習模型的開發。你不需要成為機器學習專家,就能實現對象檢測,圖像分類,圖像相似性檢測等功能。

訓練和導出機器學習模型

我們使用 SqueezeNet 來訓練機器學習模型,具體的訓練代碼如下:

dataBuffer = turi.SFrame("rice_or_soup.sframe")trainingBuffers, testingBuffers = dataBuffer.random_split(0.9)model = turi.image_classifier.create(trainingBuffers, target="foodType", model="squeezenet_v1.1")model = turi.image_classifier.create(trainingBuffers, target="foodType", model="resnet-50")evaluations = model.evaluate(testingBuffers)print evaluations["accuracy"]

最終的代碼大概是這樣的:

運行這段代碼創建機器學習模型文件:

python classifier.py

如果成功運行會生成一個機器學習模型文件 (RiceSoupClassifier.mlmodel文件)將其添加到 iOS 工程中:

下面介紹是如何在 iOS 使用這個 (RiceSoupClassifier.mlmodel文件)

import CoreMLlet mlModel = RiceSoupClassifier()// 擴展 UIImage buffer 方法,用於將 UIImage 轉成 CVPixelBufferextension UIImage { func buffer(with size:CGSize) -> CVPixelBuffer? { if let image = self.cgImage { let frameSize = size var pixelBuffer:CVPixelBuffer? = nil let status = CVPixelBufferCreate(kCFAllocatorDefault, Int(frameSize.width), Int(frameSize.height), kCVPixelFormatType_32BGRA , nil, &pixelBuffer) if status != kCVReturnSuccess { return nil } CVPixelBufferLockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags.init(rawValue: 0)) let data = CVPixelBufferGetBaseAddress(pixelBuffer!) let rgbColorSpace = CGColorSpaceCreateDeviceRGB() let bitmapInfo = CGBitmapInfo(rawValue: CGBitmapInfo.byteOrder32Little.rawValue | CGImageAlphaInfo.premultipliedFirst.rawValue) let context = CGContext(data: data, width: Int(frameSize.width), height: Int(frameSize.height), bitsPerComponent: 8, bytesPerRow: CVPixelBufferGetBytesPerRow(pixelBuffer!), space: rgbColorSpace, bitmapInfo: bitmapInfo.rawValue) context?.draw(image, in: CGRect(x: 0, y: 0, width: image.width, height: image.height)) CVPixelBufferUnlockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0)) return pixelBuffer } else { return nil } }}// 分析導入的圖片guard let prediction = try? mlModel.prediction(image: buffer) else {fatalError("Unexpected runtime error")}// 顯示結果print((prediction.foodType))

這個數 demo 的演示結果:

完整的 demo 可以在??下載。

原文:IOS Creating a Custom Core ML Model Using Python and Turi Create

推薦閱讀:Swift 單元測試-定位內存泄露

極光日報,極光開發者旗下媒體。

每天導讀三篇英文技術文章。

推薦閱讀:

TAG:iOS開發 | 人工智慧AI醬 | 人工智慧 |