# [Faceswap](https://github.com/deepfakes/faceswap)構成調査 ## 1. faceswap/faceswap.py faceswap実行時にまず呼ばれるスクリプト。configファイルがない場合作成し、引数によって呼ぶクラスを振り分ける。 - extractを含む場合、ExtractArgsを呼び出し - trainを含む場合、TrainArgsを呼び出し - convertCを含む場合、onvertArgsを呼び出し - guiを含む場合、GuiArgsを呼び出し - 無効なパラメーターが指定された場合、終了。 対応するクラスを呼び出し引数の解析を行った後、`ScriptExecutor.execute_script` を実行。 https://github.com/deepfakes/faceswap/blob/c049fed42effac53dde6699866fa074399900f09/lib/cli/args.py#L103 ↓ https://github.com/deepfakes/faceswap/blob/c049fed42effac53dde6699866fa074399900f09/lib/cli/launcher.py#L161 ## 2. faceswap/lib/cli/args.py 与えられた引数の解析に使用するクラスが格納されている。 ## 3. faceswap/lib/cli/launcher.py [ScriptExecutor](https://github.com/deepfakes/faceswap/blob/c049fed42effac53dde6699866fa074399900f09/lib/cli/launcher.py#L18)クラスが格納されている。 その名の通り、スクリプトの実行に使用している。 [ScriptExecutor._import_script](https://github.com/deepfakes/faceswap/blob/c049fed42effac53dde6699866fa074399900f09/lib/cli/launcher.py#L33) 引数で指定した内容に関連するスクリプトモジュール(`scripts`以下もしくは`tools.py`)をロードする ↓ ロードしたスクリプトを実行 https://github.com/deepfakes/faceswap/blob/c049fed42effac53dde6699866fa074399900f09/lib/cli/launcher.py#L182 ## 4. faceswap/scripts/以下 もしくは faceswap/tools.py ロード対象のスクリプトが格納されている。 https://github.com/deepfakes/faceswap/blob/c049fed42effac53dde6699866fa074399900f09/scripts/convert.py#L147 など ## 5. faceswap/lib/以下 ロードしたスクリプト内でlib内のモジュールを使用している。 ### faceswap/lib/gui/ GUI関連の機能に使用 ### faceswap/lib/model/ モデルの初期化・学習に使用 ### faceswap/lib/aligner.py 画像の配置調整に使用 ### faceswap/lib/alignments.py シリアル化されたアライメントファイル(.fsa)内のデータを読み書きするためのクラス。 このファイルでは、各フレームに表示される顔のリスト、ビデオメタ情報を保持する。 ### faceswap/lib/config.py 設定ファイル生成・読み込みのためのクラス・関数 ### faceswap/lib/gpu_stats.py 使用可能なGPU(NvidiaとAMDGPU)に関する情報を収集して返すためのクラス・関数 ### faceswap/lib/face_filter.py 顔要素を抽出するためのフィルタークラス ### faceswap/lib/image.py 画像や動画を操作するためのユーティリティクラス・関数 ### faceswap/lib/keypress.py 標準のキーイベント取得関数であるKBHITを実装するクラス ### faceswap/lib/logger.py ログ出力のためのクラス・関数群 ### faceswap/lib/multithreading.py 並列化処理のためのライブラリ ### faceswap/lib/plaidml_tools.py PlaidML関連のクラス・関数。AMDデバイスにおけるPlaidMLを用いた統計処理及びセットアップに使用。 ### faceswap/lib/plaidml_utils.py PlaidML関連のユーティリティ関数 ### faceswap/lib/queue_manager.py プロセス間で利用できるようにキューを管理するためのクラス ### faceswap/lib/serializer.py Pythonオブジェクトのシリアライズに使用するクラス・関数 ### faceswap/lib/training_data.py Faceswapモデルに使用する学習データのオーギュメンテーション(拡張)に使用するクラス ### faceswap/lib/umeyama.py [scikit-image / skimage / transform /_geometric.py](https://github.com/scikit-image/scikit-image/blob/5277aeeb8b4a0f683ad5b2e92a52caf3642f6fb2/skimage/transform/_geometric.py#L72)の`_umeyama`関数 ### faceswap/lib/utils.py すべてのスクリプトで利用しているユーティリティクラス・関数 ### faceswap/lib/vgg_face.py [OpenCV-DNN](https://docs.opencv.org/master/d2/d58/tutorial_table_of_content_dnn.html)を使用した[VGG_Face](https://github.com/eglxiang/vgg_face) クラス