CoreML为iOS带来了机器学习 - 应用程序可以利用训练有素的机器学习模型来执行从问题解决到图像识别的各种任务。
该介绍包括以下内容:
这些步骤描述了如何将CoreML添加到iOS项目中。有关实际示例,请参阅Mars Habitat Pricer示例。
Mars Habitat Price Predictor示例截图
将CoreML模型(扩展名为.mlmodel的文件)添加到项目的Resources目录中。
在模型文件的属性中,其Build操作设置为CoreMLModel。这意味着在构建应用程序时,它将被编译为.mlmodelc文件。
使用MLModel.Create
静态方法加载模型:
C#复制
模型参数使用实现的容器类传入和传出 IMLFeatureProvider
。
特征提供程序类的行为类似于字符串和字典MLFeatureValue
,其中每个特征值可以是简单的字符串或数字,数组或数据,或包含图像的像素缓冲区。
单值功能提供程序的代码如下所示:
C#复制
使用这样的类,可以以CoreML理解的方式提供输入参数。功能的名称(例如myParam
代码示例中)必须与模型所期望的相匹配。
使用该模型需要实例化特征提供程序并设置参数,然后GetPrediction
调用该方法:
C#复制
预测结果outFeatures
也是一个例子IMLFeatureProvider
; 可以使用GetFeatureValue
每个输出参数的名称(例如theResult
)访问输出值,如下例所示:
C#复制
CoreML还可以与Vision框架结合使用,以对图像执行操作,例如形状识别,对象识别和其他任务。
以下步骤描述了如何在CoreMLVision示例中一起使用CoreML和Vision 。该示例将Vision框架中的矩形识别与MNINSTClassifier CoreML模型相结合,以识别照片中的手写数字。
3号图像识别
5号图像识别
加载CoreML模型MNISTClassifier,然后将VNCoreMLModel
其包装在一起,使模型可用于Vision任务。此代码还创建了两个Vision请求:首先用于查找图像中的矩形,然后使用CoreML模型处理矩形:
C#复制
该类仍然需要实现 Vision请求的方法HandleRectangles
和HandleClassification
方法,如下面的步骤3和4所示。
以下代码开始处理请求。在CoreMLVision示例中,此代码在用户选择图像后运行:
C#复制
此处理程序将传递ciImage
给VNDetectRectanglesRequest
在步骤1中创建的Vision框架。
矩形检测完成后,执行HandleRectangles
方法,裁剪图像以提取第一个矩形,将矩形图像转换为灰度,并将其传递给CoreML模型进行分类。
request
传递给此方法的参数包含Vision请求的详细信息,并使用该GetResults<VNRectangleObservation>()
方法返回图像中找到的矩形列表。observations[0]
提取第一个矩形并传递给CoreML模型:
C#复制
的ClassificationRequest
在步骤1中使用的初始化HandleClassification
在下一步骤中定义的方法。
request
传递给此方法的参数包含CoreML请求的详细信息,并使用该GetResults<VNClassificationObservation>()
方法返回按置信度排序的可能结果列表(最高置信度优先):
C#复制
有三种CoreML样本可供尝试:
原文: https://docs.microsoft.com/en-us/xamarin/ios/platform/introduction-to-ios11/coreml#coreml