Upgrade to Pro — share decks privately, control downloads, hide ads and more …

new ML Kit feature

new ML Kit feature

Yuki Anzai

May 17, 2019
Tweet

More Decks by Yuki Anzai

Other Decks in Technology

Transcript

  1. new ML Kit feature
    Yuki Anzai (@yanzm)

    View Slide

  2. Yuki Anzai
    • Android App Developer (2009~)
    • CEO of uPhyca Inc. (2011~)
    • Google Developer Expert for Android
    • Organizer of GTUG Girls and droid girls
    • Twitter : @yanzm

    View Slide

  3. ML Kit とは
    • Firebase の機能の⼀つ
    • 機械学習を利⽤する機能をアプリに簡単に組み込むためのモバイル SDK
    • 現在は β
    • iOS と Android で使える
    • https://firebase.google.com/docs/ml-kit/

    View Slide

  4. on-device vs Cloud
    • on-device API
    • ローカルで動作、速い
    • Firebase が機械学習のモデルをあらかじめダウンロードしてくれる
    • Cloud API
    • サーバーで処理、⾼機能
    • ネットワーク接続が必要

    View Slide

  5. いままでの機能
    on-device Cloud
    Text recognition : テキスト認識 O O
    Face detection : 顔検出 O -
    Barcode scanning : バーコードスキャン O -
    Image labeling : 画像のラベル付け O O
    Landmark recognition : ランドマーク認識 - O
    Custom model inference : カスタムモデル推論 O -

    View Slide

  6. 新しく追加された機能
    • Object Detection and Tracking
    • on-device Translation
    • ML Kit: Machine Learning for Mobile with Firebase (Google I/O'19)
    • https://www.youtube.com/watch?v=QwHD36bhXZA

    View Slide

  7. on-device Translation API
    • 59 ⾔語間の翻訳が可能
    • https://firebase.google.com/docs/ml-kit/translation-language-
    support
    • Google Translate の offline mode と同じモデル
    • 完全に device 上で動作 = offline で動く
    • 無料

    View Slide

  8. Language Pack
    • Each language pack : 25~35 MB
    • Language packs は動的にダウンロードされる
    • 59 language → ~3000 pairs
    • English を中間⾔語として利⽤
    • 例) Dutch → English → Chinese

    View Slide

  9. Limitations
    • intended for casual and simple translations
    • 翻訳の質は⾔語に依存する
    • より⾼い忠実度が必要なときは Cloud Translation API を試す
    • https://cloud.google.com/translate/

    View Slide

  10. Usage guidelines
    • Usage Guidelines for ML Kit On-device Translation を読むこと
    • https://firebase.google.com/docs/ml-kit/translation-terms

    View Slide

  11. Providing feedback
    • 不適切な翻訳を⾒つけた時は Firebase support から feedback を送る
    • https://firebase.google.com/support

    View Slide

  12. Setup
    dependencies {
    ...
    implementation "com.google.firebase:firebase-ml-natural-language:19.0.0"
    implementation "com.google.firebase:firebase-ml-natural-language-translate-model:19.0.0"
    }

    View Slide

  13. val options = FirebaseTranslatorOptions.Builder()
    .setSourceLanguage(FirebaseTranslateLanguage.EN)
    .setTargetLanguage(FirebaseTranslateLanguage.JA)
    .build()
    val translator = FirebaseNaturalLanguage.getInstance().getTranslator(options)
    実際に translate する前にモデルがダウンロードされているか確認する
    val conditions =
    FirebaseModelDownloadConditions.Builder()
    .requireWifi()
    .build()
    translator.downloadModelIfNeeded(conditions)
    .addOnSuccessListener {
    }
    .addOnFailureListener {
    }

    View Slide

  14. enJaTranslator.translate(text)
    .addOnSuccessListener {
    }
    .addOnFailureListener {
    }

    View Slide

  15. Explicitly manage translation models
    • ML Kit's translation model management API
    • 事前にモデルをダウンロード
    • 不要なモデルを削除

    View Slide

  16. val modelManager = FirebaseTranslateModelManager.getInstance()
    // デバイスに保存されている翻訳モデルを取得する
    modelManager.getAvailableModels(FirebaseApp.getInstance())
    .addOnSuccessListener { models: Set ->
    // ...
    }
    .addOnFailureListener {
    // Error.
    }

    View Slide

  17. val modelManager = FirebaseTranslateModelManager.getInstance()
    // ⽇日本語モデルを(デバイスに保存されていれば)削除する
    val jaModel = FirebaseTranslateRemoteModel.Builder(FirebaseTranslateLanguage.JA)
    .build()
    modelManager.deleteDownloadedModel(jaModel)
    .addOnSuccessListener {
    // Model deleted.
    }
    .addOnFailureListener {
    // Error.
    }

    View Slide

  18. val modelManager = FirebaseTranslateModelManager.getInstance()
    // ⽇日本語モデルを明示的にダウンロードする
    val conditions = FirebaseModelDownloadConditions.Builder()
    .requireWifi()
    .build()
    val jaModel = FirebaseTranslateRemoteModel.Builder(FirebaseTranslateLanguage.JA)
    .setDownloadConditions(conditions)
    .build()
    modelManager.downloadRemoteModelIfNeeded(jaModel)
    .addOnSuccessListener {
    // Model downloaded.
    }
    .addOnFailureListener {
    // Error.
    }

    View Slide

  19. Object Detection and Tracking
    • 画像からオブジェクトを検出
    • 単⼀検出 or 複数検出
    • カテゴリ分類(6種類)あり or なし
    • on-device
    • 無料

    View Slide

  20. View Slide

  21. Codelab
    • Detect objects in images with ML Kit for Firebase: Android
    • https://codelabs.developers.google.com/codelabs/mlkit-android-
    odt/index.html
    • 静⽌画からオブジェクトを検出

    View Slide

  22. Stream or Single Image
    • STREAM_MODE
    • low latency (最初の数回の呼び出しで不完全な結果が返ることがある)
    • tracking ID
    • 動画プレビュー向け
    • SINGLE_IMAGE_MODE
    • STREAM_MODE よりは latency が⾼くなりがち
    • 静⽌画向け

    View Slide

  23. 複数検出
    • 最⼤5個まで検出

    View Slide

  24. カテゴリ
    • home goods
    • fashion goods
    • food
    • plants
    • places
    • unknown

    View Slide

  25. Setup
    dependencies {
    ...
    implementation "com.google.firebase:firebase-ml-vision:20.0.0"
    implementation "com.google.firebase:firebase-ml-vision-object-detection-model:16.0.0"
    }

    View Slide

  26. val options = FirebaseVisionObjectDetectorOptions.Builder()
    .setDetectorMode(FirebaseVisionObjectDetectorOptions.STREAM_MODE)
    // or SINGLE_IMAGE_MODE
    .enableClassification() // Optional : 複数検出
    .enableMultipleObjects() // Optional : カテゴリ
    .build()
    val detector = FirebaseVision.getInstance().getOnDeviceObjectDetector(options)

    View Slide

  27. val image = FirebaseVisionImage.fromMediaImage(mediaImage, rotation)
    val image = FirebaseVisionImage.fromBitmap(bitmap)
    detector.processImage(image)
    .addOnSuccessListener { results ->
    for (obj in results) {
    val entityId: String = obj.entityId
    val box: Rect = obj.boundingBox
    val category: Int = obj.classificationCategory
    val confidence: Float? = obj.classificationConfidence
    val trackingId: Int? = obj.trackingId
    ...
    }
    }
    .addOnFailureListener {
    ...
    }

    View Slide

  28. Improving usability and performance
    • 視覚的特徴が少ないオブジェクトだと、オブジェクトが画像の⼤部分を占
    めないと検出されないことがあるので、うまく検出できるようにユーザー
    に適切なガイダンスを提供するとよい
    • カテゴリ分類を有効にして、特定のカテゴリのオブジェクトだけ対象にす
    るようなユースケースでは、unknown に配慮する

    View Slide

  29. 動画プレビューで最良のフレームレートを達成するには
    • 複数検出を使わない
    • 不要な場合はカテゴリ分類を無効にする
    • detector の実⾏中に利⽤可能になった新しいフレームはドロップする
    • Camera 2 API を使⽤している場合は ImageFormat.YUV_420_888形式
    で、古い Camera API を使⽤している場合は ImageFormat.NV21形式で
    画像をキャプチャする

    View Slide

  30. Patterns for machine learning-powered features
    • Material Design
    • https://material.io/collections/machine-learning/
    • サンプルアプリ
    • https://github.com/firebase/mlkit-material-android

    View Slide

  31. Custom Image Classifier
    • データセット収集、ラベル付け、学習(ML Kit の AutoML Vision
    Edge)、モデルのテストができる便利 Flutter アプリ
    • https://github.com/firebase/mlkit-custom-image-classifier

    View Slide

  32. CameraX で ObjetDetection したい
    • https://github.com/yanzm/CameraXObjectDetection

    View Slide

  33. Thank you

    View Slide