专栏首页iOSDevLogXamarin.iOS中的CoreML简介

Xamarin.iOS中的CoreML简介

CoreML为iOS带来了机器学习 - 应用程序可以利用训练有素的机器学习模型来执行从问题解决到图像识别的各种任务。

该介绍包括以下内容:

CoreML入门

这些步骤描述了如何将CoreML添加到iOS项目中。有关实际示例,请参阅Mars Habitat Pricer示例

Mars Habitat Price Predictor示例截图

1.将CoreML模型添加到项目中

将CoreML模型(扩展名为.mlmodel的文件)添加到项目的Resources目录中。

在模型文件的属性中,其Build操作设置为CoreMLModel。这意味着在构建应用程序时,它将被编译为.mlmodelc文件。

2.加载模型

使用MLModel.Create静态方法加载模型:

C#复制

3.设置参数

模型参数使用实现的容器类传入和传出 IMLFeatureProvider

特征提供程序类的行为类似于字符串和字典MLFeatureValue,其中每个特征值可以是简单的字符串或数字,数组或数据,或包含图像的像素缓冲区。

单值功能提供程序的代码如下所示:

C#复制

使用这样的类,可以以CoreML理解的方式提供输入参数。功能的名称(例如myParam代码示例中)必须与模型所期望的相匹配。

4.运行模型

使用该模型需要实例化特征提供程序并设置参数,然后GetPrediction调用该方法:

C#复制

5.提取结果

预测结果outFeatures也是一个例子IMLFeatureProvider; 可以使用GetFeatureValue每个输出参数的名称(例如theResult)访问输出值,如下例所示:

C#复制

将CoreML与Vision框架结合使用

CoreML还可以与Vision框架结合使用,以对图像执行操作,例如形状识别,对象识别和其他任务。

以下步骤描述了如何在CoreMLVision示例中一起使用CoreML和Vision 。该示例将Vision框架中的矩形识别MNINSTClassifier CoreML模型相结合,以识别照片中的手写数字。

3号图像识别

5号图像识别

1.创建Vision CoreML模型

加载CoreML模型MNISTClassifier,然后将VNCoreMLModel 其包装在一起,使模型可用于Vision任务。此代码还创建了两个Vision请求:首先用于查找图像中的矩形,然后使用CoreML模型处理矩形:

C#复制

该类仍然需要实现 Vision请求的方法HandleRectanglesHandleClassification方法,如下面的步骤3和4所示。

2.启动Vision处理

以下代码开始处理请求。在CoreMLVision示例中,此代码在用户选择图像后运行:

C#复制

此处理程序将传递ciImageVNDetectRectanglesRequest在步骤1中创建的Vision框架。

3.处理视觉处理的结果

矩形检测完成后,执行HandleRectangles方法,裁剪图像以提取第一个矩形,将矩形图像转换为灰度,并将其传递给CoreML模型进行分类。

request传递给此方法的参数包含Vision请求的详细信息,并使用该GetResults<VNRectangleObservation>()方法返回图像中找到的矩形列表。observations[0]提取第一个矩形并传递给CoreML模型:

C#复制

ClassificationRequest在步骤1中使用的初始化HandleClassification 在下一步骤中定义的方法。

4.处理CoreML

request传递给此方法的参数包含CoreML请求的详细信息,并使用该GetResults<VNClassificationObservation>()方法返回按置信度排序的可能结果列表(最高置信度优先):

C#复制

样品

有三种CoreML样本可供尝试:

  • 火星居价格预测器样品具有简单的数字输入和输出。
  • 所述影像与CoreML样品接受一个图像参数,并使用视觉框架的图像,其被传递到识别单位的CoreML模型中,以确定正方形区域。
  • 最后,CoreML图像识别示例使用CoreML来识别照片中的要素。默认情况下,它使用较小的SqueezeNet模型(5MB),但它已经编写,因此您可以下载并合并更大的VGG16型号(553MB)。有关更多信息,请参阅示例的自述文件

原文: https://docs.microsoft.com/en-us/xamarin/ios/platform/introduction-to-ios11/coreml#coreml

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《 Python 机器学习基础教程》总结

    学完了本书介绍的所有强大的方法,你现在可能很想马上行动,开始用你最喜欢的算法来解决数据相关的问题。但这通常并不是开始分析的好方法。机器学习算法通常只是更大的数据...

    iOSDevLog
  • 用scikit-learn开始机器学习

    原文:https://www.raywenderlich.com/174-beginning-machine-learning-with-scikit-lear...

    iOSDevLog
  • macOS 源码安装 scikit-learn

    iOSDevLog
  • 简单易学多维数据可视化R实现:神奇的卡通脸谱图Chernoff faces

    大数据文摘
  • zabbix基本概述

    guoke-boy
  • 这或许是实现重试最优雅的姿势了!

    在日常开发中,我们经常会遇到需要调用外部服务和接口的场景。外部服务对于调用者来说一般都是不可靠的,尤其是在网络环境比较差的情况下,网络抖动很容易导致请求超时等异...

    搜云库技术团队
  • 解决MIUI8的冻结反弹

    用户1907613
  • [移动 APP 安全揭秘]第一期——泛滥的盗版

    腾讯云安全
  • 所有机器学习爱好者的福音!推出期待已久的Golem测试版了

    Golem[GNT]团队近日在以太网上宣布推出期待已久的Golem测试版。作为是最期待的ICO项目之一,其旨在作为全球超级计算机来运行,且是全球多个计算机的组合...

    AiTechYun
  • 使用命名管道实现进程间通信

    创建命名管道 命名管道常常用于应用程序之间的通迅,由于不需要进行序列化和反序列化操作,效率是非常高的。相比TCP通信方式,效率更高,但比共享内存要低点。 命名管...

    用户1177503

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动