見出し画像

SwiftUIでCoreML。- Swift Playgrounds

まず必要なもの、CoreMLの機械学習モデル(MobileNetV2FP16を使います)、UIImageな拡張ファイル(UIimageExtension.swift)、以下参考。

https://note.com/dngri/n/nbc7f10190cea

前回のCoreMLのXcode版の方にも方法を乗っけていますが、同じファイルを使えます(ファイルの中身をコピペでできます)。

Swift Playgroundsで同じことやるには少し手を加えないといけないので、そのへんをやってみます。

import PlaygroundSupport

そして最後に表示させるため

let content =  ContentView()
PlaygroundPage.current.liveView = UIHostingController(rootView: content)

MobileNetV2FP16を取り込みます。

let model = MobileNetV2FP16()

このままではこの"MobileNetV2FP16"が使えません。Xcodeで変換したものを使います。変換方法は以下。

画像1

"MobileNetV2FP16"を選んで、右側の赤丸部分を押すと、

画像2

こんな感じでコードが出てくるのでこれをコピーして、Swift Playgroundsのモジュールにファイルを作って先ほどコピーしたものをペーストします。今回はclassfication.swiftというファイルを作ってペーストしています。

画像3

このファイルの"class"や"func" や"init"の前に"public"をまずつけていきます。publicをつけることと、モデル全体を読み込ませる方法が必要のようです。

で無料配布の"動作確認版(無料)"を参考にさせてもらいました。あとは以下のコードに修正しました。​

class var urlOfModelInThisBundle : URL {
       
   return try! MLModel.compileModel(at: URL(fileReferenceLiteralResourceName: "MobileNetV2FP16.mlmodel" ))
withExtension:"mlmodelc")!

このコードでMobileNetV2FP16.mlmodelを使えるようにしているようです。

モジュールとしては以上の2つ、UIImageの拡張のファイル、MobileNetV2FP16.mlmodelを読み込ませるファイルを置いています。

これで準備終了ですあと実行してみます。

基本的には前のコードと同じでうまくいきますが、画像の表示ができません。認識はしてるみたいなので認識は問題ないです。

この記事が気に入ったらサポートをしてみませんか?