今回はGoogleのCMみたいに
写真に映り込んだオブジェクトを
消しちゃうプログラムのご紹介です。

解説動画はこちら



GoogleのCMのやつは
Google Pixel6の「消しゴムマジック」
という機能のことかと思います。

画像に映り込んだオブジェクトを
背景に同化させるように消す機能が
搭載されているようです。

この手の技術は
Image Inpainting(画像修復)
というもので、不定形に塗りつぶされた
画像を修復させるというタスクになります。

マスクした部分を
その周りから元に戻すような感じですね。

なので、マスクした部分を消すことが
できるということになります。


早速この機能を試すことができる
デモサイトを見つけたのでご紹介です。


DeepFillV2

スクリーンショット 2022-04-09 15.21.52



こちらの使い方を解説すると、まず
SETUP
Run this cell for setup
の部分のコードを実行して
ライブラリなどをダウンロードします。
スクリーンショット 2022-04-09 15.21.58




次に
Change to the code directory
の部分のコードを実行しておきます。
スクリーンショット 2022-04-09 15.22.08




その次は画像のアップロードです。

INPUTS AND MASKS
Run to upload the input image and generate/upload masks
の部分のコードを実行するとアップロードできます。

スクリーンショット 2022-04-09 15.22.13

実行してすぐにファイル選択ボタンが出ます
1つ目はベースの画像をアップして

スクリーンショット 2022-04-09 15.21.19

その後3つのボタンが表示されます。

スクリーンショット 2022-04-09 15.21.37

これでuploadをクリックしてしばらくすると
マスク画像のファイル選択が出るので
これをクリックしてマスク画像を
アップロードしましょう。


それでは早速試してみましょう。
画像を取り込んでみます。

1つめは元の画像
1


もう1つはそれに対応するマスク画像が必要です。
1-1



両方の画像のサイズは同じものを使い
マスクする部分を白で塗っておきましょう。

画像の生成は
INPAINT!!
Run to trigger inpainting.
の部分のコードを実行します。
スクリーンショット 2022-04-09 15.22.24



1回目はすごく時間かかりますが
2回目以降は10秒程度で終わります。


画像の生成が終わったら
OUTPUT COMPARISION
Run to check the output.
の部分のコードを実行して
画像を見比べてみましょう。

スクリーンショット 2022-04-09 15.22.33


download-1

色彩が違うのはopencvの色彩をmatplotlibで
そのまま表示させちゃってるからなので
気にする必要はないですが
マスク部分のオブジェクトは綺麗に消えていますね!!

出来上がった画像自体は
outputフォルダの中に
inpainted_img.pngというファイルがあるので
これをダウンロードしましょう。

こちらは色彩は元のままです。


最後にクロちゃんでもやってみましょう。
kuro1
kuro3
うまく消し去ることができるでしょうか?
結果は?!?!?!?!

download

うううううーーーんんん
魂が残ってしまっていますねー

このプログラムは
オブジェクトが大きいと
うまくいかないようです。

比較的小さめのオブジェクトであれば
うまく消すことができるので
皆さんも色々なものを消して
遊んでみてください。

今回はこれまでです
それでは。