首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有办法使CoreML模型在源级别上可用于iOS11+

是否有办法使CoreML模型在源级别上可用于iOS11+
EN

Stack Overflow用户
提问于 2017-07-20 13:11:33
回答 2查看 2.5K关注 0票数 4

我的应用程序中有一个CoreML模型。

在运行时,应该在iOS8 8-10上禁用预测功能,在iOS11上禁用该功能。

为了能够在所有使用CoreML的类上编译,我添加了以下内容:

@查阅(iOS 11.0,*)

但是,.mlmodel在每次重建时生成Swift代码,丢弃所有注释。因此,创建编译错误如下:

'MLModel‘只能在iOS 11.0或更高版本上使用。

在Xcode9中是否有一种方法可以使mlmodel iOS11只存在?

编辑:这个bug是在XCode 9 beta 4中修复的,不再需要解决方法了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-20 14:22:59

Upd.07/25/17:苹果公司刚刚推出了新API,用于在设备上编译模型。这意味着,您现在可以避免步骤1-4。

  1. (可选)切换到Xcode beta sudo xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer
  2. 编译您的模型:xcrun coremlcompiler compile /path/to/MyModel.mlmodel /path/to/output/folder
  3. 将编译好的模型文件夹MyModel.mlmodelc放入应用程序包中。
  4. 将自动生成的快速模型类(MyModel.swift)手动添加到项目中,并使用@available(iOS 11.0, *)对其进行注释。

  1. 加载并初始化模型: 设path = Bundle.main.path(forResource:"MyModel",ofType:"mlmodelc") 让url = URL(fileURLWithPath: path!) 让模型=尝试!MyModel(contentsOf: url)

警告:,我还没有尝试将这样的应用上传到AppStore。我已经在我的测试设备上试过了,它可以工作,我只是不确定它在发布到Appstore之后是否继续工作。

票数 7
EN

Stack Overflow用户

发布于 2017-07-21 17:01:36

这听起来像是一个bug --生成的Swift代码应该包括与您的代码一样的@available注释,这样您的应用程序就可以编译、在运行iOS 11时调用它,并且在运行旧的iOS版本时不需要调用它。

我强烈推荐把那个错误提交给苹果公司,这样他们就能在Xcode 9 GM之前修复它。

同时,您可以禁用模型的代码生成。在代码项目设置中,在“目标生成设置”下,查找“CoreML代码生成语言”,并将其更改为“无”。

当然,这将阻止您在项目中使用生成的Swift类。这给您留下了两个选择:

  1. 直接使用Core Ml来评估您的模型。(也就是说,MLModel(contentsOf: url)而不是MyModelClass()等等)很方便地,您已经看到但没有使用的生成的Swift类显示了您需要的所有API调用。
  2. 生成Swift类一次(只为iOS 11编译),然后将代码复制出来并粘贴到一个常规源文件中。粘贴后,可以添加所需的@available声明,以便将最小部署目标更改为iOS 10或更高版本。

在这两种情况下,如果您更改模型,您可能需要重新做一些工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45215789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档