Core ML随笔

什么是Core ML

今年的WWDC 17确实是非常的平凡,各大平台操作系统都是小修小补,没有什么大动作。唯一比较吸引人眼球的也就是内置于 iOS 11里面的Core ML和ARKit了。

Core ML随笔_第1张图片

什么是Core ML?ML是Machine Learning的简写,也就是机器学习的意思。Core ML其实就是将一些已经训练好的神经网络、支持向量机、线性分析等集成到一个框架里,供开发者来调用。苹果开发者网站上已经有几套训练好的模型可供使用,其中包含了脸部识别、图像识别、自然语言识别等。

Core ML随笔_第2张图片
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文件,然后直接拖进项目中即可。

Core ML随笔_第3张图片

这里面需要注意的是inputs项,Image就是你要输入的图片的尺寸,无论你是拍照还是从相册选取,都要转换到这个尺寸才能让神经网络识别。

拖入文件后,只需要在viewcontroller.m中导入文件即可

#import

#import

#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上下载,谢谢!

你可能感兴趣的:(Core ML随笔)