什么是Core ML
今年的WWDC 17确实是非常的平凡,各大平台操作系统都是小修小补,没有什么大动作。唯一比较吸引人眼球的也就是内置于 iOS 11里面的Core ML和ARKit了。
什么是Core ML?ML是Machine Learning的简写,也就是机器学习的意思。Core ML其实就是将一些已经训练好的神经网络、支持向量机、线性分析等集成到一个框架里,供开发者来调用。苹果开发者网站上已经有几套训练好的模型可供使用,其中包含了脸部识别、图像识别、自然语言识别等。
应用
要想使用Core ML的话需要以下条件:
1、macOS 10.13 beta
2、iOS 11 beta
3、Xcode 9 beta
首先,先创建一个iOS项目,在“Linked Frameworks and Libraries”添加CoreML.framework。然后在苹果开发者网站上下载.mlmodel文件,然后直接拖进项目中即可。
这里面需要注意的是inputs项,Image<RGB,width,height>就是你要输入的图片的尺寸,无论你是拍照还是从相册选取,都要转换到这个尺寸才能让神经网络识别。
拖入文件后,只需要在viewcontroller.m中导入文件即可
#import <Vision/Vision.h>
#import <CoreML/CoreML.h>
#import "GoogLeNetPlaces.h"
然后最核心的就是如何运用这些模型进行识别啦,首先声明一个模型类:
GoogLeNetPlaces *modelV3=[[GoogLeNetPlaces alloc]init];
然后将模型转换成VNCoreMLModel:
VNCoreMLModel *MODEL=[VNCoreMLModel modelForMLModel:modelV3.model error:&err];
然后声明一个模型识别请求:
VNCoreMLRequest *request=[[VNCoreMLRequest alloc]initWithModel:MODEL completionHandler:^(VNRequest * _Nonnull request, NSError * _Nullable error) {
CGFloat confidence = 0.0f;
VNClassificationObservation *tempClassification = nil;
for (VNClassificationObservation *classification in request.results) {
if (classification.confidence > confidence)
{
confidence = classification.confidence;
tempClassification = classification;
}
}
self.predictResultLabel.text = [NSString stringWithFormat:@"识别结果:%@-----匹配率为;%@",tempClassification.identifier,@(tempClassification.confidence)];
}];
在这里输出的识别结果可能是多组,而且都是VNClassificationObservation对象,confidence可以获取准确度。
最后就是创建个句柄来处理图像和请求:
VNImageRequestHandler *handler=[[VNImageRequestHandler alloc]initWithCGImage:imageRef options:nil];
NSError *error = nil;
[handler performRequests:@[request] error:&error];
if (error) {
NSLog(@"%@",error.localizedDescription);
}
一个训练代码就完成了。由此可以看出,CoreML极大简化了开发者的开发难度,将模型训练等繁琐步骤全部屏蔽掉了。代码可以从我的GitHub上下载,谢谢!