雲を判別したい
素人が見た目から何の雲かを判別するのは難しい。
雲が分かれば現在の天気や今後の天気がわかる。
気象学的に雲は10種類に分けることができます。これを十種雲形と言います。
今回最小限の労力・最短での画像判別アプリ作成を目標とします。
CoreMLで雲画像の機械学習モデルを作成
CoreMLの詳細は下記の記事を参照。
https://qiita.com/PearlEarringMinion/items/a703eb3525e4aec6c46d
以下の分類でモデルを作成しました。
googleや気象研究者のtwitterから画像を収集し、1分類につき画像は15〜20枚学習させました。
CoreML apple公式サンプルコードをDL
以下のappleデベロッパーサイトから画像判別アプリのサンプルコードをダウンロードします。
https://developer.apple.com/documentation/vision/classifying_images_with_vision_and_core_ml
サンプルコードに作成したモデルを組み込む
ダウンロードしたサンプルファイルをXcodeで開きます。
"Models"ファイルに"MobileNet"というCoreMLモデルがありますので、こちらを削除して、自身で作成した
モデルをドラッグします。
"Image Predictor"フォルダに"ImagePredictor"ファイルがありますのでこちらのコードを一部変更します。 ImagePredictorクラス内の3行目のモデル名を自身で作成したモデル名称に変更します。
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を自分のものに変更して実機を繋いでテストしてみます。
まあまあ精度良く判別することに成功しました。
雲が存在しない場合は快晴と判別してくれます。
高積雲と巻積雲、高層雲と巻層雲は高度が違うだけで形が同じなので判別することが難しいみたいです
疑問
公式サンプルコードをベースとしているので、これをアレンジしてappストアにリリースしても、
ガイドラインの"アプリの模倣"にあたりリジェクトされてしまうでしょうか?
デベロッパー登録料払っているので、そろそろストアにリリースしたいです。
全ソースコードとモデル
GitHub
https://github.com/PearlEarringMinion/CloudImageClassfyingApp
追記(2022年3月10日)
Apple Storeにリリースしました。
ダウンロードしてもらえたら嬉しいです。