首页 > 代码库 > CoreML试水--图片识别

CoreML试水--图片识别

今年的WWDC上,关于人工智能方面Apple开放了CoreML工具包。

今天就趁着时间还早果断的尝试了一下到底有多容易。

 

import UIKitimport CoreMLimport 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])            }
let model = try! VNCoreMLModel(for: Resnet50().model)//1

 这是一个选择模型个的方法,模型我直接选用的Apple推荐的Resnet50()。(其实有了第三方模型转换之后自己编译也很简单)

let handler = VNImageRequestHandler(cgImage: imageData!)//2

 将文件转换成模型识别可支持的数据类型(CVPixelBuffer)当然也有别的可转换方法,但是直接使用Vision的方法更容易实现。

let request = VNCoreMLRequest(model: model, completionHandler: myResultsMethod)//3

 读取模型并返回结果至myResultsMethod方法中。

 guard let results = request.results as? [VNClassificationObservation]//4

 返回结果存储在results中(数组型数据)

for classification in results {        print(classification.identifier, // the scene label            classification.confidence)}

至此一个带有人工智能的App就开发完了。

准确来说不到十行代码。

完整代码

 

CoreML试水--图片识别