SlideShare a Scribd company logo
1 of 31
Download to read offline
2019-05-15 potatotips #61 @cattaka_net
CameraXとMLKitの関係や如何に!?
Takao Sumitomo
@cattaka_net
2019-05-15 potatotips #61 @cattaka_net
自己紹介
●
住友 孝郎(Takao Sumitomo)
●
Wantedly, Inc. 所属
●
Androidアプリを主に担当
●
@cattaka_net
(アイコンは気分で変わる)
2019-05-15 potatotips #61 @cattaka_net
Google I/O 2019行ってきたよ
2019-05-15 potatotips #61 @cattaka_net
Codelabsで
CameraXとFirebase MLKitを
触ったよ
2019-05-15 potatotips #61 @cattaka_net
Codelabsって? https://codelabs.developers.google.com/
2019-05-15 potatotips #61 @cattaka_net
楽しかったのでその話
2019-05-15 potatotips #61 @cattaka_net
そもそもCameraXの何が嬉しいの?
2019-05-15 potatotips #61 @cattaka_net
Camera 2 APIの辛み
2019-05-15 potatotips #61 @cattaka_net
Camera 2 APIの辛み
カメラを開く
openCamera
2019-05-15 potatotips #61 @cattaka_net
Camera 2 APIの辛み
カメラを開く
openCamera
出力先の準備
ImageReader
TextureView
2019-05-15 potatotips #61 @cattaka_net
Camera 2 APIの辛み
カメラを開く
openCamera
出力先の準備
ImageReader
TextureView
セッションを作る
createCaptureSession
2019-05-15 potatotips #61 @cattaka_net
Camera 2 APIの辛み
カメラを開く
openCamera
出力先の準備
ImageReader
TextureView
セッションを作る
createCaptureSession
キャプチャー開始
startCaptureRequest
2019-05-15 potatotips #61 @cattaka_net
Camera 2 APIの辛み
カメラを開く
openCamera
出力先の準備
ImageReader
TextureView
セッションを作る
createCaptureSession
キャプチャー開始
startCaptureRequest
全部コールバック!
2019-05-15 potatotips #61 @cattaka_net
Camera 2 APIの辛み
カメラを開く
openCamera
出力先の準備
ImageReader
TextureView
セッションを作る
createCaptureSession
キャプチャー開始
startCaptureRequest
全部コールバック!
順序関係あり!
依存
依
存依
存
2019-05-15 potatotips #61 @cattaka_net
Camera 2 APIの辛み
カメラを開く
openCamera
出力先の準備
ImageReader
TextureView
セッションを作る
createCaptureSession
キャプチャー開始
startCaptureRequest
全部コールバック!
順序関係あり!
依存
依
存依
存
画面のライフサイクルにも依存
画面のレイアウトが
完了していないといけない
2019-05-15 potatotips #61 @cattaka_net
おわかり頂けただろうか?
2019-05-15 potatotips #61 @cattaka_net
Camera Xは設定すれば、
後はLifecycleに乗せてくれる
カメラを開く
openCamera
出力先の準備
ImageReader
TextureView
セッションを作る
createCaptureSession
キャプチャー開始
startCaptureRequest
ここだけ設定する
2019-05-15 potatotips #61 @cattaka_net
コード例
// プレビューの設定をする
val previewConfig = PreviewConfig.Builder().apply {
setTargetResolution(Size(640, 640))
}.build()
val preview = Preview(previewConfig)
// 準備ができたときに、Viewへ出力するように指示
preview.setOnPreviewOutputUpdateListener {
// To update the SurfaceTexture, we have to remove it and re-add it
val parent = viewFinder.parent as ViewGroup
parent.removeView(viewFinder)
parent.addView(viewFinder, 0)
viewFinder.surfaceTexture = it.surfaceTexture
updateTransform()
}
// ライフサイクルにバインド
CameraX.bindToLifecycle(this, preview)
2019-05-15 potatotips #61 @cattaka_net
便利!
✌('ω' )✌ 三✌('ω')✌三( 'ω')✌ ✌
2019-05-15 potatotips #61 @cattaka_net
Firebase MLKitの何が嬉しいの?
2019-05-15 potatotips #61 @cattaka_net
機械学習をアプリに
組み込むのは面倒くさい
●
モデルやデータのフォーマット
●
エンジンの設定
●
Inputの定義
●
Outputの定義
2019-05-15 potatotips #61 @cattaka_net
Firebase MLKitは
インターフェースがシンプル
●
ユースケースに合わせて予め定義されたAPI
●
Firebase ML Vision
●
顔認識: Face Model
●
オブジェクト認識: Object Detection Model
●
イメージラベル: Image Label Model
●
カスタム: AutoML
2019-05-15 potatotips #61 @cattaka_net
良しなにやってくれる
●
例:テキストの認識
// 画像を準備
val image = FirebaseVisionImage.fromMediaImage(src, rotation)
// 認識機の準備
val recognizer = FirebaseVision.getInstance()
.onDeviceTextRecognizer
// 認識の開始
recognizer.processImage(image)
.addOnSuccessListener { texts -> continuation.resume(texts) }
.addOnFailureListener { e -> continuation.resumeWithException(e) }
2019-05-15 potatotips #61 @cattaka_net
便利!
✌('ω' )✌ 三✌('ω')✌三( 'ω')✌ ✌
2019-05-15 potatotips #61 @cattaka_net
Codelabsはそれぞれ
30分〜1時間でこなせる量
https://codelabs.developers.google.com/
2019-05-15 potatotips #61 @cattaka_net
くっつけてみた
2019-05-15 potatotips #61 @cattaka_net
Object Detection Model
https://drive.google.com/file/d/1LXBsgIRMeNSpB3zV1MmAcGGPjqlakTo2/view?usp=sharing
2019-05-15 potatotips #61 @cattaka_net
Image Label Model
https://drive.google.com/file/d/1DUszdyxs5T5RLEH3QiXOnO8u7BLuHyRn/view?usp=sharing
2019-05-15 potatotips #61 @cattaka_net
CameraX と Firebase MLKit
の組み合わせ、楽しい
2019-05-15 potatotips #61 @cattaka_net
コードはこちら
https://github.com/cattaka/CameraXMLKit
2019-05-15 potatotips #61 @cattaka_net
ご清聴ありがとうございました
Takao Sumitomo
@cattaka_net

More Related Content

More from Takao Sumitomo

Viewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチViewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチTakao Sumitomo
 
プロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれることプロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれることTakao Sumitomo
 
AdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にするAdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にするTakao Sumitomo
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことTakao Sumitomo
 
Wantedlyのテスト事情
Wantedlyのテスト事情Wantedlyのテスト事情
Wantedlyのテスト事情Takao Sumitomo
 
用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法Takao Sumitomo
 
potatotips (iOS/Android開発Tips共有会) 第19回 資料
potatotips (iOS/Android開発Tips共有会) 第19回 資料potatotips (iOS/Android開発Tips共有会) 第19回 資料
potatotips (iOS/Android開発Tips共有会) 第19回 資料Takao Sumitomo
 
SQLiteDatabaseを無理矢理覗く
SQLiteDatabaseを無理矢理覗くSQLiteDatabaseを無理矢理覗く
SQLiteDatabaseを無理矢理覗くTakao Sumitomo
 
開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程Takao Sumitomo
 
テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜Takao Sumitomo
 
勉強会資料 データ構造とアルゴリズム
勉強会資料 データ構造とアルゴリズム勉強会資料 データ構造とアルゴリズム
勉強会資料 データ構造とアルゴリズムTakao Sumitomo
 
勉強会資料 Uml概要
勉強会資料 Uml概要勉強会資料 Uml概要
勉強会資料 Uml概要Takao Sumitomo
 
Firefox OSの何が嬉しいか
Firefox OSの何が嬉しいかFirefox OSの何が嬉しいか
Firefox OSの何が嬉しいかTakao Sumitomo
 
HTML5でFirefox OSアプリを作ろう
HTML5でFirefox OSアプリを作ろうHTML5でFirefox OSアプリを作ろう
HTML5でFirefox OSアプリを作ろうTakao Sumitomo
 
フォクすけロボ開発進捗報告
フォクすけロボ開発進捗報告フォクすけロボ開発進捗報告
フォクすけロボ開発進捗報告Takao Sumitomo
 
今更ながらCSS3を試してみた
今更ながらCSS3を試してみた今更ながらCSS3を試してみた
今更ながらCSS3を試してみたTakao Sumitomo
 
Crystalskullを改造してみる
Crystalskullを改造してみるCrystalskullを改造してみる
Crystalskullを改造してみるTakao Sumitomo
 
もしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったら
もしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったらもしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったら
もしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったらTakao Sumitomo
 
アンドロイダー的にHTML5でどこまでできそうか
アンドロイダー的にHTML5でどこまでできそうかアンドロイダー的にHTML5でどこまでできそうか
アンドロイダー的にHTML5でどこまでできそうかTakao Sumitomo
 

More from Takao Sumitomo (20)

Viewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチViewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチ
 
プロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれることプロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれること
 
AdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にするAdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にする
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったこと
 
Wantedlyのテスト事情
Wantedlyのテスト事情Wantedlyのテスト事情
Wantedlyのテスト事情
 
用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法
 
Uml速習会
Uml速習会Uml速習会
Uml速習会
 
potatotips (iOS/Android開発Tips共有会) 第19回 資料
potatotips (iOS/Android開発Tips共有会) 第19回 資料potatotips (iOS/Android開発Tips共有会) 第19回 資料
potatotips (iOS/Android開発Tips共有会) 第19回 資料
 
SQLiteDatabaseを無理矢理覗く
SQLiteDatabaseを無理矢理覗くSQLiteDatabaseを無理矢理覗く
SQLiteDatabaseを無理矢理覗く
 
開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程
 
テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜
 
勉強会資料 データ構造とアルゴリズム
勉強会資料 データ構造とアルゴリズム勉強会資料 データ構造とアルゴリズム
勉強会資料 データ構造とアルゴリズム
 
勉強会資料 Uml概要
勉強会資料 Uml概要勉強会資料 Uml概要
勉強会資料 Uml概要
 
Firefox OSの何が嬉しいか
Firefox OSの何が嬉しいかFirefox OSの何が嬉しいか
Firefox OSの何が嬉しいか
 
HTML5でFirefox OSアプリを作ろう
HTML5でFirefox OSアプリを作ろうHTML5でFirefox OSアプリを作ろう
HTML5でFirefox OSアプリを作ろう
 
フォクすけロボ開発進捗報告
フォクすけロボ開発進捗報告フォクすけロボ開発進捗報告
フォクすけロボ開発進捗報告
 
今更ながらCSS3を試してみた
今更ながらCSS3を試してみた今更ながらCSS3を試してみた
今更ながらCSS3を試してみた
 
Crystalskullを改造してみる
Crystalskullを改造してみるCrystalskullを改造してみる
Crystalskullを改造してみる
 
もしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったら
もしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったらもしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったら
もしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったら
 
アンドロイダー的にHTML5でどこまでできそうか
アンドロイダー的にHTML5でどこまでできそうかアンドロイダー的にHTML5でどこまでできそうか
アンドロイダー的にHTML5でどこまでできそうか
 

CameraXとMLKitの関係や如何に!?

  • 1. 2019-05-15 potatotips #61 @cattaka_net CameraXとMLKitの関係や如何に!? Takao Sumitomo @cattaka_net
  • 2. 2019-05-15 potatotips #61 @cattaka_net 自己紹介 ● 住友 孝郎(Takao Sumitomo) ● Wantedly, Inc. 所属 ● Androidアプリを主に担当 ● @cattaka_net (アイコンは気分で変わる)
  • 3. 2019-05-15 potatotips #61 @cattaka_net Google I/O 2019行ってきたよ
  • 4. 2019-05-15 potatotips #61 @cattaka_net Codelabsで CameraXとFirebase MLKitを 触ったよ
  • 5. 2019-05-15 potatotips #61 @cattaka_net Codelabsって? https://codelabs.developers.google.com/
  • 6. 2019-05-15 potatotips #61 @cattaka_net 楽しかったのでその話
  • 7. 2019-05-15 potatotips #61 @cattaka_net そもそもCameraXの何が嬉しいの?
  • 8. 2019-05-15 potatotips #61 @cattaka_net Camera 2 APIの辛み
  • 9. 2019-05-15 potatotips #61 @cattaka_net Camera 2 APIの辛み カメラを開く openCamera
  • 10. 2019-05-15 potatotips #61 @cattaka_net Camera 2 APIの辛み カメラを開く openCamera 出力先の準備 ImageReader TextureView
  • 11. 2019-05-15 potatotips #61 @cattaka_net Camera 2 APIの辛み カメラを開く openCamera 出力先の準備 ImageReader TextureView セッションを作る createCaptureSession
  • 12. 2019-05-15 potatotips #61 @cattaka_net Camera 2 APIの辛み カメラを開く openCamera 出力先の準備 ImageReader TextureView セッションを作る createCaptureSession キャプチャー開始 startCaptureRequest
  • 13. 2019-05-15 potatotips #61 @cattaka_net Camera 2 APIの辛み カメラを開く openCamera 出力先の準備 ImageReader TextureView セッションを作る createCaptureSession キャプチャー開始 startCaptureRequest 全部コールバック!
  • 14. 2019-05-15 potatotips #61 @cattaka_net Camera 2 APIの辛み カメラを開く openCamera 出力先の準備 ImageReader TextureView セッションを作る createCaptureSession キャプチャー開始 startCaptureRequest 全部コールバック! 順序関係あり! 依存 依 存依 存
  • 15. 2019-05-15 potatotips #61 @cattaka_net Camera 2 APIの辛み カメラを開く openCamera 出力先の準備 ImageReader TextureView セッションを作る createCaptureSession キャプチャー開始 startCaptureRequest 全部コールバック! 順序関係あり! 依存 依 存依 存 画面のライフサイクルにも依存 画面のレイアウトが 完了していないといけない
  • 16. 2019-05-15 potatotips #61 @cattaka_net おわかり頂けただろうか?
  • 17. 2019-05-15 potatotips #61 @cattaka_net Camera Xは設定すれば、 後はLifecycleに乗せてくれる カメラを開く openCamera 出力先の準備 ImageReader TextureView セッションを作る createCaptureSession キャプチャー開始 startCaptureRequest ここだけ設定する
  • 18. 2019-05-15 potatotips #61 @cattaka_net コード例 // プレビューの設定をする val previewConfig = PreviewConfig.Builder().apply { setTargetResolution(Size(640, 640)) }.build() val preview = Preview(previewConfig) // 準備ができたときに、Viewへ出力するように指示 preview.setOnPreviewOutputUpdateListener { // To update the SurfaceTexture, we have to remove it and re-add it val parent = viewFinder.parent as ViewGroup parent.removeView(viewFinder) parent.addView(viewFinder, 0) viewFinder.surfaceTexture = it.surfaceTexture updateTransform() } // ライフサイクルにバインド CameraX.bindToLifecycle(this, preview)
  • 19. 2019-05-15 potatotips #61 @cattaka_net 便利! ✌('ω' )✌ 三✌('ω')✌三( 'ω')✌ ✌
  • 20. 2019-05-15 potatotips #61 @cattaka_net Firebase MLKitの何が嬉しいの?
  • 21. 2019-05-15 potatotips #61 @cattaka_net 機械学習をアプリに 組み込むのは面倒くさい ● モデルやデータのフォーマット ● エンジンの設定 ● Inputの定義 ● Outputの定義
  • 22. 2019-05-15 potatotips #61 @cattaka_net Firebase MLKitは インターフェースがシンプル ● ユースケースに合わせて予め定義されたAPI ● Firebase ML Vision ● 顔認識: Face Model ● オブジェクト認識: Object Detection Model ● イメージラベル: Image Label Model ● カスタム: AutoML
  • 23. 2019-05-15 potatotips #61 @cattaka_net 良しなにやってくれる ● 例:テキストの認識 // 画像を準備 val image = FirebaseVisionImage.fromMediaImage(src, rotation) // 認識機の準備 val recognizer = FirebaseVision.getInstance() .onDeviceTextRecognizer // 認識の開始 recognizer.processImage(image) .addOnSuccessListener { texts -> continuation.resume(texts) } .addOnFailureListener { e -> continuation.resumeWithException(e) }
  • 24. 2019-05-15 potatotips #61 @cattaka_net 便利! ✌('ω' )✌ 三✌('ω')✌三( 'ω')✌ ✌
  • 25. 2019-05-15 potatotips #61 @cattaka_net Codelabsはそれぞれ 30分〜1時間でこなせる量 https://codelabs.developers.google.com/
  • 26. 2019-05-15 potatotips #61 @cattaka_net くっつけてみた
  • 27. 2019-05-15 potatotips #61 @cattaka_net Object Detection Model https://drive.google.com/file/d/1LXBsgIRMeNSpB3zV1MmAcGGPjqlakTo2/view?usp=sharing
  • 28. 2019-05-15 potatotips #61 @cattaka_net Image Label Model https://drive.google.com/file/d/1DUszdyxs5T5RLEH3QiXOnO8u7BLuHyRn/view?usp=sharing
  • 29. 2019-05-15 potatotips #61 @cattaka_net CameraX と Firebase MLKit の組み合わせ、楽しい
  • 30. 2019-05-15 potatotips #61 @cattaka_net コードはこちら https://github.com/cattaka/CameraXMLKit
  • 31. 2019-05-15 potatotips #61 @cattaka_net ご清聴ありがとうございました Takao Sumitomo @cattaka_net