2017-08-06 107 views
1

我與應用程序擴展程序共享CoreML模型。 Xcode爲模型生成swift代碼。爲了在擴展中使用該代碼,我必須在應用程序擴展中包含相同的模型。有沒有辦法在應用程序中只包含一次模型,並在應用程序和擴展中使用?如何與擴展共享CoreML模型?

回答

0

您必須在您的項目中創建一個共享框架,該框架也包含在應用程序和擴展中。你把模型放在框架的資源文件夾中,你可以在框架的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:),您可以從加載您的模型,每個你喜歡。

+0

你能否澄清一下'你可以通過框架的bundle創建模型的路徑或url。如何生成swift代碼將知道該網址? – Meanteacher

+0

我擴展了我的文章。 – clemens

+0

您是否設法使用嵌入在靜態庫中的mlmodel進行此項工作? –