---
# System prepended metadata

title: '[Faceswap](https://github.com/deepfakes/faceswap)構成調査'

---

# [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) クラス