イーロンマスクになりたい x Deep-Live-Cam
はじめに
なりたいですよね。なりましょう。
今回はDeep-Live-Camというオープンソースを使用してリアルタイムのフェイススワップを試してみました。
MacbookPro(M1)での動作確認方法についてまとめていきます。
対象読者
- 機械学習に興味があるエンジニア
- 顔交換技術に興味がある方
- M1 Macユーザー
技術スタック
- Python 3.10
- FFmpeg
- PyTorch
- tensorflow
概要
今回はM1チップのMacbookProでの検証になるため、その他の環境ではうまく動作しないかもしれません。
またCPUのみを使用した動作確認となっています。
READMEの記載をもとにセットアップを進めていきます。
今回フェイススワップに使用する画像はWikipediaのものを使用しました。
セットアップ
必要なツールやライブラリをインストールしていきます。
Deep-Live-CamをGithubからClone
git clone https://github.com/hacksider/Deep-Live-Cam.git
ffmpegをインストール
ffmpegは動画や音声の変換や再生ができるソフトウェアです。
Deep-Live-Camを動作させるにあたって必要なため、今回はbrewを使用してインストールしました。
brew install ffmpeg
モデルダウンロード
以下の学習されたモデルを使用するため、ダウンロードし、models
ディレクトリに配置します。
- GFPGANv1.4
- inswapper_128_fp16.onnx
curl -L -o models/GFPGANv1.4.pth https://huggingface.co/hacksider/deep-live-cam/resolve/main/GFPGANv1.4.pth
curl -L -o models/inswapper_128_fp16.onnx https://huggingface.co/hacksider/deep-live-cam/resolve/main/inswapper_128_fp16.onnx
ライブラリインストール
必要なライブラリはrequirements.txt
にすべて記載されているため、こちらをpip install
するだけです。
注意点として、Deep-Live-CamではPython3.10が推奨されているため、今回はpyenvを使用してバージョンを指定しています。
またvenvでの利用も推奨されているため、仮想環境をつくっておきます。
pyenv local 3.10
python -m venv venv
source venv/bin/activate
あとはpip installしていくだけなのですが、もともとのM1 Macで動作させる上で、requirements.txt
を一部書き換えています。
onnxruntime
を使用しているのですが、AppleシリコンのMacはonnxruntime-siliconがインストールされるように記載されています。
ただこちらは本家のREADMEに記載があるように、onnxruntime
が既に公式でAppleシリコンに対応されているようなのでonnxruntime
をそのままインストールするように変更しています。
The official ONNX Runtime now includes arm64 binaries for MacOS as well with Core ML support. Please use the official wheel package as this repository is no longer needed.
--extra-index-url https://download.pytorch.org/whl/cu118
numpy==1.23.5
opencv-python==4.8.1.78
onnx==1.16.0
insightface==0.7.3
psutil==5.9.8
tk==0.1.0
customtkinter==5.2.2
pillow==9.5.0
torch==2.0.1+cu118; sys_platform != 'darwin'
torch==2.0.1; sys_platform == 'darwin'
torchvision==0.15.2+cu118; sys_platform != 'darwin'
torchvision==0.15.2; sys_platform == 'darwin'
# onnxruntime==1.18.0; sys_platform == 'darwin' and platform_machine != 'arm64'
# onnxruntime-silicon==1.16.3; sys_platform == 'darwin' and platform_machine == 'arm64'
onnxruntime==1.18.0 # <- onnxruntimeをインストールするように変更
onnxruntime-gpu==1.18.0; sys_platform != 'darwin'
tensorflow==2.13.0rc1; sys_platform == 'darwin'
tensorflow==2.12.1; sys_platform != 'darwin'
opennsfw2==0.10.2
protobuf==4.23.2
tqdm==4.66.4
gfpgan==1.3.8
あとはインストールしてセットアップは終わりです。
pip install -r requirements.txt
動作確認
セットアップが終わったらさっそく試していきたいと思います。
以下のコマンドで実行します。(初実行時は少し時間がかかりました)
python run.py --execution-provider coreml
すると画面が表示されました!
CustomTkinterというライブラリでGUIは実装されてるみたいですね。
画像を選択して実行
Select a faceボタンを押して画像を選択しましょう。
あとはLiveボタンを押せば内蔵カメラでフェイススワップが開始されます。
フェイススワップ開始
すごい!!!!
完成度高いとおもうんですがどうでしょう。
僕はヒゲが生えてるのですが、口髭はほとんど消えてあごひげはちょっと残ってます。
まあ本家もヒゲは生えてるので個人的には違和感なし。
わざわざ深夜にいそいそと同じようなスーツに着替えてあるのはナイショの話です。
最後に
こんな手軽に、しかも高精度でフェイススワップできてしまうことにけっこう感動しました。
動画だけでなく、画像のフェイススワップもできるので色々活用できそう。
ただ悪用は絶対に厳禁です。
素晴らしい技術ですが、ディープフェイクと聞くとよくない印象を持たれている一般ユーザーもいるかとおもいます。
このライブラリはしっかり不適切な画像に対してはバリデーションがかかるようになっているようですが、使う側の倫理観はちゃんと持っておくべきだと思います。
Discussion