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

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でどこまでできそうか
 

Recently uploaded

Recently uploaded (10)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

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