ML Kitを試してみる
こんにちは、今年初めてGoogle I/Oに参加してきました @kazutoyo です。
今回のGoogle I/OでFirebaseの機能の一つとして新たにML Kitが発表されました。
ML KitはAndroid/iOSに簡単に導入でき、デフォルトで次の機能を利用できます。
- テキスト認識
- 顔検出
- バーコードスキャン
- 画像ラベル付け
- ランドマーク認識
- Smart Reply (今後対応予定)
ML Kitでは端末内部にモデルをダウンロードして処理するモードと、Cloud上で処理するモードがあります。
端末上での場合は結果がすぐに取得でき、ネットワークがオフラインでも行えますが、Cloud版よりも認識できる文字の種類やラベルの数など限られたものしか認識できません。
Cloud版では逆にレスポンスは端末上で処理するよりも遅くなりますが、認識できる種類などが増えます。
ML KitのCloud版はCloud Visionを利用しているようなので、利用料金もCloud Visionと同じく現在は1000ユニット毎に$1.50となっています。(おそらく結果も同じ)
例えば、テキスト認識だと次のように端末上での処理はラテン語のみの認識となります。
それぞれの認識する範囲などは公式のドキュメントに詳細が書かれています。
端末上で得られる結果で十分であれば端末上で、より高度な認識が必要であればCloud版を使うのが良いかと思います。
ML Kitを使ってみる
では実際にAndroidでML Kitで画像のラベル付を試してみます。
まずbuild.gradleにML Kit用の依存関係を追加します。
"build.gradle(Module: app)"implementation 'com.google.firebase:firebase-core:15.0.0'
implementation 'com.google.firebase:firebase-ml-vision:15.0.0'
implementation 'com.google.firebase:firebase-ml-vision-image-label-model:15.0.0' // on-device model
また、Google Servicesを追加します。
"build.gradle(Project)"dependencies {
// ...
classpath 'com.google.gms:google-services:3.3.1'
}"build.gradle(Moduke: app)"// 一番下に追加
apply plugin: 'com.google.gms.google-services'
また、Cloud版を仕様する場合は、Firebaseのプロジェクトを従量課金のBlazeに変更し、google-services.jsonをプロジェクト内に設置する必要があります。 Cloud版を仕様するときはFirebase Consoleから設定を行いセットアップしておきましょう。
上記のセットアップが終われば実際に使うところでコードを書くだけです。
次のようにBitmapからFirebaseVision用のImageに変換し、使用するDetectorに渡すと結果が返ってくるという簡単な感じです。
val image = FirebaseVisionImage.fromBitmap(bitmap)val detector = FirebaseVision.getInstance()
.visionLabelDetector
detector.detectInImage(image)
.addOnSuccessListener {
it.forEach {
Log.d("VisionDetector", "label: ${it.label}")
}
}
.addOnFailureListener {
Log.e("VisionDetector","OnFailure", it)
}
Cloud版も同じように上記のDetector部分を次のようにCloud版に変えるだけです
val detector = FirebaseVision.getInstance()
.visionCloudLabelDetector
こちらを実行した結果が次のようになっています。 Cloud版のほうがより細かく多くの情報が取得できますね。
Custom Model
ML Kitでは現在6種類の機能を利用できますが、Tensorflow LiteのモデルをFirebase上にアップロードしてそのモデルを使うことも出来ます。 ML Kitで標準で用意されているものより使い方が複雑となっているのでここでは説明しませんが、Codelabsのほうで導入方法が説明されているのでそちらを参考にすると良さそうです。https://codelabs.developers.google.com/codelabs/mlkit-android-custom-model/
Custom ModelをML Kitで使う利点として、モデルをアプリ内にバンドルすることがなく、後からダウンロードできたり変更のアップデートを行うことが出来る点です。 これによりインストール時のアプリサイズを小さくすることができ、アプリのアップデートを行うことなくモデルを更新することができます。
また、FirebaseのRemote ConfigやA/B Testingと合わせて使うこともでき、ユーザによってモデルを分けて試すこともできます。
モデルの最適化
現在はまだ提供されていないようですが、アップロードしたCustom Modelを最適化をFirebase上で行ってくれる機能を開発中のようです。
Custom Modelはユーザがモデルを一度ダウンロードする必要があるので、この機能によりダウンロードするサイズを小さくすることができます。
まとめ
ML KitによってiOS/Androidで簡単にGoogleの提供する機械学習を利用できるようになりました。
Custom Modelを利用するのは少し敷居が高いですが、こちらも活用できればよりスマートなアプリが作れそうですね!
自分はまだ機械学習やTensorflowの知識が浅いので、これから深めていきたいと思いました…!