FaceSwap は、もともとワルシャワ工科大学の「マルチメディアにおける数学」の学生向けの演習として私が作成したアプリです。このアプリは Python で書かれており、顔の位置合わせ、ガウス ニュートンの最適化、画像ブレンディングを使用して、カメラに映っている人の顔を、提供された画像内の人の顔と交換します。
以下のビデオでプログラムの機能を短いプレゼンテーションでご覧いただけます (クリックすると YouTube に移動します)。
プログラムを開始するには、zad2.py (演習 2 ではポーランド語) という名前の Python スクリプトを実行する必要があります。 Python 3 といくつかの追加ライブラリをインストールする必要があります。 Python がマシンにインストールされたら、リポジトリのルート ディレクトリでpip install -r requirements.txt
実行することで、ライブラリを自動的にインストールできるようになります。
また、顔の位置合わせモデルを http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2 からダウンロードし、メイン プロジェクト ディレクトリに解凍する必要があります。
FaceSwap のより高速で安定したバージョンは、Dropbox のこちらから入手できます。この新しいバージョンはディープ アライメント ネットワーク方式に基づいており、GPU で実行すると現在使用されている方式よりも高速で、より安定した、より正確な顔のランドマークを提供します。セットアップ手順については、Deep Alignment Network の GitHub リポジトリを参照してください。
近いうちに時間を見つけて、この高速バージョンをリポジトリ コードに含めたいと思っています。
この方法の大まかな概要は次のとおりです。
まず入力画像 (自分の顔を見たい人物の画像) を取得し、顔の領域とそのランドマークを見つけます。それができたら、3D モデルをこれらのランドマークに適合させます (詳細は後ほど)、画像空間に投影されたそのモデルの頂点がテクスチャ座標になります。
それが完了し、すべてが初期化されると、カメラは画像のキャプチャを開始します。キャプチャされた画像ごとに、次の手順が実行されます。
プロセス全体の中で最も重要な要素は、3D モデルのフィッティングです。モデル自体は次のもので構成されます。
モデルは、次の方程式を使用して画像空間に投影されます。
ここで、 sは投影されたシェイプ、 aはスケーリング パラメータ、 P は3D 顔のシェイプを回転する回転行列の最初の 2 行、 S_0はニュートラルな顔のシェイプ、 w_1 ~ nはブレンドシェイプの重み、 S_1 ~ nはブレンドシェイプ、 tは 2D 変換ベクトル、 n はブレンドシェイプの数です。
モデルのフィッティングは、投影された形状と局所的なランドマーク間の差異を最小限に抑えることによって達成されます。最小化は、ガウス ニュートン法を使用して、ブレンドシェイプの重み、スケーリング、回転、および平行移動に関して実行されます。
コードは MIT ライセンスに基づいてライセンスされており、プロジェクト内のデータの一部はサードパーティの Web サイトからダウンロードされます。
サポートが必要な場合、またはこのアプリが便利だと思われた場合は、遠慮なくお知らせください。
Marek Kowalski [email protected]、ホームページ: http://home.elka.pw.edu.pl/~mkowals6/