LoginSignup
13
12

More than 1 year has passed since last update.

最短で画像判別アプリを作成する(Swift)

Last updated at Posted at 2022-01-11

雲を判別したい

素人が見た目から何の雲かを判別するのは難しい。
雲が分かれば現在の天気や今後の天気がわかる。
気象学的に雲は10種類に分けることができます。これを十種雲形と言います。

今回最小限の労力・最短での画像判別アプリ作成を目標とします。

スクリーンショット 2022-01-11 18.24.15.png
日本気協会HPより

CoreMLで雲画像の機械学習モデルを作成

CoreMLの詳細は下記の記事を参照。

https://qiita.com/PearlEarringMinion/items/a703eb3525e4aec6c46d

以下の分類でモデルを作成しました。
googleや気象研究者のtwitterから画像を収集し、1分類につき画像は15〜20枚学習させました。
スクリーンショット 2022-01-11 18.27.34.png

CoreML apple公式サンプルコードをDL

以下のappleデベロッパーサイトから画像判別アプリのサンプルコードをダウンロードします。

https://developer.apple.com/documentation/vision/classifying_images_with_vision_and_core_ml

サンプルコードに作成したモデルを組み込む

ダウンロードしたサンプルファイルをXcodeで開きます。
"Models"ファイルに"MobileNet"というCoreMLモデルがありますので、こちらを削除して、自身で作成した
モデルをドラッグします。

スクリーンショット 2022-01-11 18.33.00.png

"Image Predictor"フォルダに"ImagePredictor"ファイルがありますのでこちらのコードを一部変更します。  ImagePredictorクラス内の3行目のモデル名を自身で作成したモデル名称に変更します。

ImagePredictor.swift
    class ImagePredictor {
    /// - Tag: name
    static func createImageClassifier() -> VNCoreMLModel {
        // Use a default model configuration.
        let defaultConfig = MLModelConfiguration()

        // Create an instance of the image classifier's wrapper class.
        /*let imageClassifierWrapper = try? MobileNet(configuration: defaultConfig)*/

        //ここのコードのモデル名を変更する!!!!!!!!!!
        let imageClassifierWrapper = try? CloudMyImageClassifier2(configuration: defaultConfig)

        guard let imageClassifier = imageClassifierWrapper else {
            fatalError("App failed to create an image classifier model instance.")
        }

        // Get the underlying model instance.
        let imageClassifierModel = imageClassifier.model

        // Create a Vision instance using the image classifier's model instance.
        guard let imageClassifierVisionModel = try? VNCoreMLModel(for: imageClassifierModel) else {
            fatalError("App failed to create a `VNCoreMLModel` instance.")
        }

        return imageClassifierVisionModel
    } 

実機で試す

bundle IDを自分のものに変更して実機を繋いでテストしてみます。
まあまあ精度良く判別することに成功しました。
雲が存在しない場合は快晴と判別してくれます。
高積雲と巻積雲、高層雲と巻層雲は高度が違うだけで形が同じなので判別することが難しいみたいです

スクリーンショット 2022-01-11 18.50.19.png

疑問

公式サンプルコードをベースとしているので、これをアレンジしてappストアにリリースしても、
ガイドラインの"アプリの模倣"にあたりリジェクトされてしまうでしょうか?
デベロッパー登録料払っているので、そろそろストアにリリースしたいです。

全ソースコードとモデル

GitHub
https://github.com/PearlEarringMinion/CloudImageClassfyingApp

追記(2022年3月10日)

Apple Storeにリリースしました。
ダウンロードしてもらえたら嬉しいです。

ダウンロード

BE0BDF95-B791-47BA-9B54-586CBC74B055.jpeg

13
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12