2017-01-24

顔の入れ替えを試してみた【Ubuntu】

ふとしたきっかけで画像の顔だけを入れ替える(正確にはある画像の顔を別の人の顔にする)というプログラムが公開されているのを知ったので、いつも利用しているPCにインストールして試してみました。
思ったより簡単にインストールできたので興味のある方はぜひ試してみてください。

【実行環境】 Ubuntu 16.04


※顔の入れ替えにはPythonが利用されています。もしPythonがインストールされていない場合はインストールしておいてください。


【手順1】 まず、メインとなるPythonプログラムは GitHub で公開されています。
そのため、まずこのプログラムを以下のようにしてダウンロードしましょう。


ダウンロードしたら適当な場所に展開しましょう。


【手順2】 そして、ついでにもうひとつダウンロードする必要があるので以下のようにGitHubのリンク(SourceForge)からダウンロードして中身を展開しておきます。


【手順3】 以下のURLへアクセスし、ページ中央からdlib C++ Libraryをダウンロード、これも展開しておきましょう。



展開したらそのフォルダにターミナルで移動し、以下の順番でコンパイルします。

cd examples
mkdir build
cd build
cmake ..
cmake --build . --config Release

そして、またdlibトップフォルダに戻り、setup.py を実行します。

sudo python setup.py install


【手順4】そして、Pyhon用の OpenCV もインストールしましょう。

sudo apt-get install python-opencv
 
 
では次に【手順1】で展開したフォルダの中に入って「faceswap.py」を
テキストエディタで開くと、

PREDICTOR_PATH = "/home/matt/dlib-18.16/shape_predictor_68_face_landmarks.dat"
 
という行があるはずなので、このパスを【手順2】でダウンロードしたファイルを指定します。

※私の環境では以下のようになりました。

PREDICTOR_PATH = "/home/sukohi/Downloads/shape_predictor_68_face_landmarks.dat"


【顔の入れ替えを実行】
では準備が完了したので実際に試してみましょう。
画像は以下の2枚をPixabay からダウンロードしてきました。

 face.jp

head.jpg

うまくいくと、head.jpg の顔が face.jpg の顔と入れ替えになります。

では、この2つの画像を【手順1】で作成した faceswap のフォルダの中に保存し、
以下のコマンドを実行しましょう。

sudo ./faceswap.py head.jpg face.jpg

うまくいくと output.jpg という画像が作成されているはずです。
上の画像を使って実際に作成されたは以下になります。



どうでしょう、すごくないですか?
お気づきかと思いますが、face.jpg 顔の暗い部分も元画像に適用されて
一枚の写真になっています。
こんなプログラムが公開されているなんてすごい時代になりましたね。

※ちなみに、入れ替えたい顔の目や口元などに髪の毛がかかってしまっていると
あまりうまくいかないパターンもありました。
また、背景にいろいろとものが写っていたりすると顔を検出できないパターンや、
まれなケースでは全く別の部分に顔が移植されてしまうこともありましたので
まだ完璧ではないようですが、こういうのを作る人ってすごいですよね。

今回は以上です。