1
我與應用程序擴展程序共享CoreML模型。 Xcode爲模型生成swift代碼。爲了在擴展中使用該代碼,我必須在應用程序擴展中包含相同的模型。有沒有辦法在應用程序中只包含一次模型,並在應用程序和擴展中使用?如何與擴展共享CoreML模型?
我與應用程序擴展程序共享CoreML模型。 Xcode爲模型生成swift代碼。爲了在擴展中使用該代碼,我必須在應用程序擴展中包含相同的模型。有沒有辦法在應用程序中只包含一次模型,並在應用程序和擴展中使用?如何與擴展共享CoreML模型?
您必須在您的項目中創建一個共享框架,該框架也包含在應用程序和擴展中。你把模型放在框架的資源文件夾中,你可以在框架的bundle上爲模型創建路徑或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:)
,您可以從加載您的模型,每個你喜歡。
你能否澄清一下'你可以通過框架的bundle創建模型的路徑或url。如何生成swift代碼將知道該網址? – Meanteacher
我擴展了我的文章。 – clemens
您是否設法使用嵌入在靜態庫中的mlmodel進行此項工作? –