如何与扩展共享CoreML模型?

时间:2017-08-06 10:13:38

标签: ios coreml

我正在与app扩展共享CoreML模型。 Xcode为模型生成快速代码。为了在扩展中使用该代码,我还必须在app扩展中包含相同的模型。有没有办法在应用程序中只包含一次模型,并在app和extension中使用?

1 个答案:

答案 0 :(得分:0)

您必须在项目中创建一个共享框架,该框架也包含在应用程序和扩展中。您将模型放在框架的资源文件夹中,并且可以通过框架包创建模型的路径或URL。

编辑:如果您将生成的模型类放在框架中,您生成的模型应自动查找模型数据。它从类的包中创建模型URL(请参阅生成的init方法):

init(contentsOf url: URL) throws {
    self.model = try MLModel(contentsOf: url)
}
convenience override init() {
    let bundle = Bundle(for: MyModel.self)
    let assetPath = bundle.url(forResource: "MyModel", withExtension:"mlmodelc")
    try! self.init(contentsOf: assetPath!)
}

对于框架中的类,Bundle(for: MarsHabitatPricer.self)是框架的捆绑包。您的框架只需要导出模型的类,以便您可以在应用程序和扩展中使用它。

另请注意,使用同样生成的init(contentsOf:),您可以从您喜欢的 everywere 加载模型。