18
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonで画像処理。Face Swap 入門

Posted at

Face Swap 入門

英語圏のオンラインコミュニティ「reddit」(日本における2ちゃんねるのような掲示板)に、AIを用いて顔の画像を自動変換する 「FakeApp」というツールが投稿され、そのツールで作られたフェイク動画が拡散され問題になっていたようです。

そこで、どのような基礎技術を利用すれば同様の仕組みが作成できるのか考えてみました。

世の中でもっともパロディで利用されている女性の美術絵画はモナ・リザだそうです。
オイラは一番かわいい女性はエビちゃんだと思っているのでエビちゃんをモナ・リザにしてしまいます。

前提

python,opencv環境が構築されていて、numpy,dlib がインストール済であること。

インストールしていない場合は

pip install numpy
pip install dlib

を実行する。

faceswap の入手と変更

python OSS に faceswap というもがあるようです。
既存のモデルファイルを流用すれば簡単に顔の変更ができます。

ソースコードの取得先

モデルファイルの取得先

DL後解凍し、faceswap から読み取れるようにしておくこと。

faceswap.py ソースコードの修正

モデルファイルのパスを修正する。

PREDICTOR_PATH = "./shape_predictor_68_face_landmarks.dat"

実行

python faceswap.py 画像1 画像2 

を実行すると

output.jpg

が出力されます。

試しに、画像1にモナ・リザの画像(Mona_Lisa_detail_face.jpg)
Mona_Lisa_detail_face.jpg

画像2にエビちゃんの画像(ebi-chan.jpg)
ebi-chan.jpg

で実行してみた。

python faceswap.py Mona_Lisa_detail_face.jpg ebi-chan.jpg

実行結果
output_1.jpg

うげ!
モナ・リザの画像とエビちゃんの画像の向きが違うのでものすごく変。
心霊写真のようだ・・・

そのため、エビちゃんの画像を左右変換を行う必要がありそうです。
ちなみにpythonで画像の左右入れ替え(ミラーリング)のソースコードはたったこれだけです。

from PIL import Image, ImageOps

im = Image.open('ebi-chan.jpg')
im_mirror = ImageOps.mirror(im)
im_mirror.save('ebi-chan_mirror.jpg', quality=95)

で、左右変換を実行してみた。
ebi-chan_mirror.jpg

左右入れ替えた後のFaceSwapの実行結果
output.jpg

髪の毛部分も認識されていますがカナリ自然?な感じです。
なんかちょっとコワイけど…

それでは、ガンダム世代のオジサンに人気のセイラさんだとどうなるでしょうか?

入力したセイラさん
seira.jpg

セイラさんでのFaceSwapの実行結果
output_seira.jpg

うむぅ。

最後に画像処理の世界ではお決まりのレナさんで・・・
rena.jpg

そのままの画像だとやっぱり顔の向きが逆でなので変ですね。
output2.jpg

ミラーリングして左右入れ替えて
rena_mirror.jpg

実行したらこうなりました。
output_rena.jpg

輪郭が残っててコワイな・・・

動画対応は今後の検討

動画で対応するには、顔がどちらを向いているか?ということを判定しながら1フレームずつ入れ替える対象の画像を変更していけば問題ないでしょう。鼻、口、目の位置の比を取って入れ替えていけばなんとかなりそうですね。
DeepLearningを用いてどの画像と似ているか?と判断しながら変換していくのもよさそうです。

なお今回利用したこのモジュールはGPUを利用しておらずミラー処理を含めないで、

ファイルの読み取り→変換→ファイル保存

の処理時間は、マックスくんのPC( Corei7-7700HQ/GeForce GTX 1060)で約0.12秒でした。
1秒間に30フレームの動画のリアルタイム変換だと遅延してカクカクする動画におそらくなると思われます。

昔はアイコラ職人と呼ばれる人がいて、有名人の顔の画像とポルノ画像を入れ替え掲示板に掲載などして問題になっていましたが、この種のツールを利用すれば簡単に顔の入れ替えができます。
SNSなどに顔の画像をUPして不特定多数の人からアクセスできる状態になっている人は気を付けたほうがいいかもしれません。

以上です。

18
21
0

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
18
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?