概要
ML-Kit For FirebaseでTensorFlow Liteを使ってAndroidアプリに組み込みこもうと、なにか良いネタないかと考え
コロナで旅行行けないので、家で旅行写真とれたらいいんじゃないかと思い付き、勢いで作ってしまいました
人物の写真を撮ると、背景がどこかの観光スポットの写真にいれかわります
※背景はフリー画像素材を使用しています
※ライブラリから背景画像を指定することも可能です
例のごとく、作成したはいいが、半年くらい放置しており、もったいないので、動作原理、開発手順等、簡単に説明をのこしておきます
下記で公開しています(Android 9以上)
https://play.google.com/store/apps/details?id=com.e.ittatumoricamera
動作原理・技術情報
予想は付くと思いますが、大まかな動きとししては、以下の手順を踏んでいます
1.人物写真撮影
2.人物画像範囲特定
撮影画像に対しセグメンテーションを掛け人物の箇所を特定
・セグメンテーションはDeepLabを使用
・モバイルから学習済みモデルの読み込みはML-Kit For Firebaseを使用
3.人物画像マスク作成
人物が写っている箇所を切り抜くためのマスクを作成
OpenCVを使用しセグメンテーションされた画像からマスク画像を作成
4.背景合成写真を作成
背景写真に対し、「3.」で作成した人物のマスク画像を使用し人物画像を合成
その他
Android開発について画像系まわりは特に初めて取り組んだため、かなり苦労しました
下記は開発の際に特にハマった箇所なので、後々記事を書ければと思っています
・Android(9以降)の画像ライブラへのリアクセス
・プライバシーポリシーのファイル配置場所
参考技術情報
セグメンテーション実施手順
https://www.tensorflow.org/lite/models/segmentation/overview
Android StudioへのOpenCVライブラリインポート手順
https://qiita.com/denjin-m/items/8b2f30b98ef4529b8f1f
ML KitにTensorFlowLiteを組みこむ手順
https://firebase.google.com/docs/ml-kit/android/use-custom-models?hl=ja