🦁

イーロンマスクになりたい x Deep-Live-Cam

2024/08/15に公開

はじめに

なりたいですよね。なりましょう。
今回はDeep-Live-Camというオープンソースを使用してリアルタイムのフェイススワップを試してみました。

https://github.com/hacksider/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.

requiements.txt
--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