【问题标题】:How to share CoreML model with extension?如何与扩展共享 CoreML 模型?
【发布时间】:2018-01-13 19:35:36
【问题描述】:

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

【问题讨论】:

    标签: ios coreml


    【解决方案1】:

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

    编辑:如果您将生成的模型类也放入框架中,您生成的模型应该会自动找到模型数据。它从类的包中创建模型 url(参见生成的 initmethods):

    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 加载您喜欢的模型。

    【讨论】:

    • 你能澄清一下you can create the path or url to the model over the framework's bundle.吗?生成的 swift 代码如何知道 url?
    • 我已经扩展了我的帖子。
    • 您是否设法使用嵌入在静态库中的 mlmodel 来完成这项工作?
    • 不,我不认为这是可能的。静态库在编译(链接)时共享。但模型必须在运行时共享。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多