CoreML试水--图片识别
今年的WWDC上,关于人工智能方面Apple开放了CoreML工具包。
今天就趁着时间还早果断的尝试了一下到底有多容易。
import UIKit
import CoreML
import Vision
首先头文件里CoreML和Vision两个新的包都需要引入。
如果只是模仿Apple官方给出的模型可以不使用Vision包,但是如果要做图片识别那么最好使用Vision的方法。(原因之后会提到)
@IBAction func openLibrary(_ sender: Any) { if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) { let imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary; imagePicker.allowsEditing = true self.present(imagePicker, animated: true, completion: nil) } } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { imagePicked.contentMode = .scaleToFill imagePicked.image = pickedImage } picker.dismiss(animated: true, completion: nil) }
简单的导入图片过程,在此不做解释。
@IBAction func saveImage(_ sender: Any) { let imageData = imagePicked.image?.cgImage let model = try! VNCoreMLModel(for: Resnet50().model) let request = VNCoreMLRequest(model: model, completionHandler: myResultsMethod) let handler = VNImageRequestHandler(cgImage: imageData!) try! handler.perform([request]) }
1 | let model = try ! VNCoreMLModel( for : Resnet50().model) //1 |
这是一个选择模型个的方法,模型我直接选用的Apple推荐的Resnet50()。(其实有了第三方模型转换之后自己编译也很简单)
1 | let handler = VNImageRequestHandler(cgImage: imageData!) //2 |
将文件转换成模型识别可支持的数据类型(CVPixelBuffer)当然也有别的可转换方法,但是直接使用Vision的方法更容易实现。
1 | let request = VNCoreMLRequest(model: model, completionHandler: myResultsMethod) //3 |
读取模型并返回结果至myResultsMethod方法中。
1 | guard let results = request.results as ? [VNClassificationObservation] //4<br> |
返回结果存储在results中(数组型数据)
for classification in results { print(classification.identifier, // the scene label classification.confidence) }
至此一个带有人工智能的App就开发完了。
准确来说不到十行代码。
posted @ 2017-06-07 21:54 dinghing 阅读(4100) 评论(2) 推荐(2) 编辑