Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ML Kit (Auto ML Vison Edge)で写真から家族を検出する
Search
tsutou
April 27, 2020
Programming
86
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ML Kit (Auto ML Vison Edge)で写真から家族を検出する
tsutou
April 27, 2020
Other Decks in Programming
See All in Programming
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
180
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
110
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.7k
sbt 2.0: takeoff
eed3si9n
0
160
Kotlinの15年とServer-Side Kotlin
n_takehata
1
150
R8 の設定見直しでアプリサイズ削減
andpad
0
220
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
33k
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
710
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
The Invisible Side of Design
smashingmag
301
52k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
The SEO identity crisis: Don't let AI make you average
varn
0
590
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Thoughts on Productivity
jonyablonski
76
5.4k
Site-Speed That Sticks
csswizardry
13
1.6k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
The Language of Interfaces
destraynor
162
27k
Leo the Paperboy
mayatellez
10
2.4k
Transcript
ML Kit (Auto ML Vison Edge)で写真から家族を検 出する
Tsutou 辛い食べ物と、音楽が好きです。今年、子猫を二匹拾いました。 音楽業界 (エンジニアではない) -> nijibox(Android) -> Timers.inc (Android)
Fammとは
子供やペットの写真を、手軽にアップロードしてもらいたい 弊社のアプリ、Fammは家族アルバムアプリなので、写真/動画アップロード機能の対象となる写真は子供、 ペットの写真になります。 しかし、アップロード画面を表示した時、大抵は料理だったり、スクショだったり、風景だったり、データフォル ダには色々な画像がありますね。 もっと手軽に子供や犬、猫の写真だけ選択してもらいたい! 今回は、Famm Androidで、ML Kitを使用して、実現した際の事例を軽くご紹介したいと思います。
もっと詳しく見たい方は、弊社blogの方を参照いただけますと嬉しいです!
ML Kitをはじめる ML Kit -> Googleの機械学習にまつわる様々な機能(顔認証や、画像ラベリング、オブジェクト認識、 バーコードスキャン、翻訳と様々なもの)を、Firebaseを通してモバイルで実行できる様にするSDK群で す。(まだBeta版です 2020/4/23現在) 今回使用するAuto
ML Vision Edgeは、Firebaseのコンソール上で独自の画像分類モデルを作成でき、 形式を選んで簡単にアプリ上で使用できるものです。
データセットを用意する 早速、分類したい画像のデータセットを用意し、追加していきます。(単一ラベル、複数ラベルを選びます) 以下のような形式を圧縮してzip形式で登録します。(登録済みのデータセットは、エクスポートできるCSVを 元にGCSからインポートできます。一回、1GB以下でないとエラーになってしまうので注意)
じっくりコトコト学習させる オプションを指定し、学習時間を指定します。 レイテンシ ❏ 下限レイテンシ - 軽量、高速、低精度 ❏ 汎用 -
中間 ❏ 高精度 - 大きめ、低速、高精度
結果 中々の精度です!
運用方法を決める(ローカル/リモート/両刀) ローカル ❏ メリット ❏ アプリをダウンロードするだけで使える ❏ デメリット ❏ アプリサイズ増
❏ モデルの更新にリリースが必要 リモート ❏ メリット ❏ アプリサイズ変わらない ❏ リリースせずにモデルを更新可能 ❏ リモートコンフィグなどと組み合わせて、ABテストなどもコントロールできる ❏ デメリット ❏ モデルがダウンロードできるまで機能は使えない ❏ 通信が行われる前提なので、コード量が増える
依存関係の追加 難読化回避(ローカルモデル使用時のみ) aaptOptions { noCompress "tflite" }
build.gradle implementation 'com.google.firebase:firebase-ml-vision:24.0.2' implementation 'com.google.firebase:firebase-ml-vision-automl:18.0.4'
ローカルのモデル assetsディレクトリを用意し、コンソールからダウンロードしたモデルを配置します。 ❏ /assets/automl/dict.txt ❏ /assets/automl/manifest.json
❏ /assets/automl/model.tflite val localModel = FirebaseAutoMLLocalModel .Builder() .setAssetFilePath( "automl/manifest.json" ) .build()
リモートのモデル コンソールから、モデルを公開し、モデル名をアプリ側で指定します。 ダウンロードや、フラグの取得は Tasks APIになっているので、ハンドリングが必要になります。 val remoteModel =
FirebaseAutoMLRemoteModel .Builder(BuildConfig.AUTO_ML_MODEL_NAME) .build() val conditions = FirebaseModelDownloadConditions.Builder().build() val downloadTask = FirebaseModelManager .getInstance() .download(remoteModel, conditions) .addOnSuccessListener { //ダウンロード成功時にしたい処理 } fun isModelDownloaded() = Tasks.await( FirebaseModelManager.getInstance().isModelDownloaded( remoteModel ) )
画像を認識させる 設定したラベルを用意します。 const val CATS = "cats" const val
KIDS = "kids" const val ADULT = "adults" const val DOGS = "dogs" const val OTHERS = "others" モデルを用意し、オプションを設定して、画像のラベラーを用意します (FirebaseVisionOnDeviceAutoMLImageLabelerOptions では、信頼度が調整できます。デフォルトは50%) val mlModel = if (isModelDownloaded()) { remoteModel } else { localModel } val labeler = FirebaseVision.getInstance().getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions .Builder(mlModel) .setConfidenceThreshold(0.7f) .build() )
画像からラベルを検出する 画像から取得できるラベルのテキストを元に、子供、大人、犬、猫、その他を判別していきます。FirebaseVisionImage は、アプリ によって画像の取り扱いを変えていくのがいいと思います。 val targetBitmap = getTargetBitmap(context, uri)
val image = try { FirebaseVisionImage.fromBitmap(targetBitmap) } catch (e: IOException) { Timber.e("$e") } try { val labels = synchronized( this) { Tasks.await(labeler.processImage(image)) } labels.forEach { when (it.text) { ADULT, OTHERS -> return false CATS, KIDS, DOGS -> return true } } } catch (e: ExecutionException) { Timber.e( "$e") } catch (e: InterruptedException) { Timber.e( "$e") }
結果 犬猫子供と、大人やその他を区別してくれるようになりました。 最初は、機械学習と聞くと少し身構えてしまいましたが、高精度のモデ ルを作成し、ユーザーニーズの高い機能を、結果とても簡単にアプリに 導入することができました。 Firebaseを通してモデルの更新をかけて育 てていけるし、APIの柔軟性もとても高く、今後の進化がとても楽しみで す。
None