2017-08-06 6 views
1

アプリの拡張機能を使用してCoreMLモデルを共有しています。 Xcodeは、モデルのスウィフトコードを生成します。このコードを拡張機能で使用するには、同じモデルにアプリの拡張機能を追加する必要がありました。モデルをアプリに一度だけ追加し、アプリと拡張の両方に使用する方法はありますか?CoreMLモデルを拡張機能と共有するにはどうすればよいですか?

答えて

0

あなたのプロジェクトには、アプリケーションと拡張機能に含まれる共有フレームワークを作成する必要があります。モデルをフレームワークのリソースフォルダに置き、フレームワークのバンドル上でモデルへのパスまたはURLを作成できます。

EDIT:生成されたモデルクラスをフレームワークに配置すると、生成されたモデルは自動的にモデルデータを見つけるはずです。これは、(生成init方法を参照)クラスのバンドルからモデルのURLを作成する:フレームワークのクラスの場合

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

「フレームワークのバンドルを介してモデルへのパスまたはURLを作成できます」ということを明確にすることはできますか?生成された迅速なコードはどのようにURLを知るでしょうか? – Meanteacher

+0

私は自分の投稿を拡張しました。 – clemens

+0

静的ライブラリに埋め込まれたmlmodelを使用してこの作業を行うことはできましたか? –

関連する問題