LoginSignup
4
2

More than 3 years have passed since last update.

セグメンテーション(Deeplab)を使用し撮影写真の背景を変えられるスマホアプリを作ってみた

Last updated at Posted at 2020-12-26

概要

ML-Kit For FirebaseでTensorFlow Liteを使ってAndroidアプリに組み込みこもうと、なにか良いネタないかと考え
コロナで旅行行けないので、家で旅行写真とれたらいいんじゃないかと思い付き、勢いで作ってしまいました
人物の写真を撮ると、背景がどこかの観光スポットの写真にいれかわります
※背景はフリー画像素材を使用しています
※ライブラリから背景画像を指定することも可能です

例のごとく、作成したはいいが、半年くらい放置しており、もったいないので、動作原理、開発手順等、簡単に説明をのこしておきます

下記で公開しています(Android 9以上)
https://play.google.com/store/apps/details?id=com.e.ittatumoricamera

ざっくりのアプリの動作は以下のとおりです
image.png

動作原理・技術情報

予想は付くと思いますが、大まかな動きとししては、以下の手順を踏んでいます

1.人物写真撮影

モバイルアプリから人物写真を撮影
image.png

2.人物画像範囲特定

撮影画像に対しセグメンテーションを掛け人物の箇所を特定
・セグメンテーションはDeepLabを使用
・モバイルから学習済みモデルの読み込みはML-Kit For Firebaseを使用

image.png

3.人物画像マスク作成

人物が写っている箇所を切り抜くためのマスクを作成
OpenCVを使用しセグメンテーションされた画像からマスク画像を作成

image.png

4.背景合成写真を作成

背景写真に対し、「3.」で作成した人物のマスク画像を使用し人物画像を合成

image.png

 その他

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

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2