From 2fb611ce1fe914760859a9696e4ca13cc07c4e3d Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:41:12 +0800 Subject: [PATCH 01/16] Update README.md --- README.md | 287 ++++++++++++++++++++++-------------------------------- 1 file changed, 115 insertions(+), 172 deletions(-) diff --git a/README.md b/README.md index d8e004f..59f04e8 100644 --- a/README.md +++ b/README.md @@ -1,179 +1,122 @@ -![demo-gif](demo.gif) - - -## Disclaimer -This software is meant to be a productive contribution to the rapidly growing AI-generated media industry. It will help artists with tasks such as animating a custom character or using the character as a model for clothing etc. - -The developers of this software are aware of its possible unethical applications and are committed to take preventative measures against them. It has a built-in check which prevents the program from working on inappropriate media including but not limited to nudity, graphic content, sensitive material such as war footage etc. We will continue to develop this project in the positive direction while adhering to law and ethics. This project may be shut down or include watermarks on the output if requested by law. - -Users of this software are expected to use this software responsibly while abiding the local law. If face of a real person is being used, users are suggested to get consent from the concerned person and clearly mention that it is a deepfake when posting content online. Developers of this software will not be responsible for actions of end-users. - -## How do I install it? - - -### Basic: It is more likely to work on your computer but it will also be very slow. You can follow instructions for the basic install (This usually runs via **CPU**) -#### 1.Setup your platform -- python (3.10 recommended) -- pip -- git -- [ffmpeg](https://www.youtube.com/watch?v=OlNWCpFdVMA) -- [visual studio 2022 runtimes (windows)](https://visualstudio.microsoft.com/visual-cpp-build-tools/) -#### 2. Clone Repository +**免责声明** +**这个分支经过 NITSC 的修改,只经过我们(NITSC)的电脑验证,没有经过大众验证。** +这款软件旨在为蓬勃发展的AI生成媒体行业做出积极贡献,帮助艺术家完成动画自定义角色、使用角色作为服装模型等任务。 +开发人员意识到该软件可能存在不道德的应用,并承诺采取预防措施。它内置了检查功能,防止程序在包括裸露、图形内容、战争画面等在内的不适当媒体上运行。我们将继续积极开发该项目,并遵守法律和道德规范。如果法律要求,该项目可能会关闭或在输出中包含水印。 +用户应负责任地使用该软件,并遵守当地法律。如果使用真实人物的面孔,建议用户从相关人员那里获得许可,并在在线发布内容时明确说明这是深度伪造视频。该软件的开发人员不承担最终用户行为的责任。 +**如何安装**? +### 基本安装 (CPU) +1. **设置平台**: + - python (推荐使用 3.10) + - pip + - git + - [ffmpeg](https://www.youtube.com/watch?v=OlNWCpFdVMA) + - [visual studio 2022 runtimes (windows)](https://visualstudio.microsoft.com/visual-cpp-build-tools/) +2. **克隆仓库**: + ``` https://github.com/hacksider/Deep-Live-Cam.git - -#### 3. Download Models - - 1. [GFPGANv1.4](https://huggingface.co/hacksider/deep-live-cam/resolve/main/GFPGANv1.4.pth) - 2. [inswapper_128_fp16.onnx](https://huggingface.co/hacksider/deep-live-cam/resolve/main/inswapper_128_fp16.onnx) - -Then put those 2 files on the "**models**" folder - -#### 4. Install dependency -We highly recommend to work with a `venv` to avoid issues. -``` -pip install -r requirements.txt -``` -##### DONE!!! If you dont have any GPU, You should be able to run roop using `python run.py` command. Keep in mind that while running the program for first time, it will download some models which can take time depending on your network connection. - -### *Proceed if you want to use GPU Acceleration -### CUDA Execution Provider (Nvidia)* - -1. Install [CUDA Toolkit 11.8](https://developer.nvidia.com/cuda-11-8-0-download-archive) + ``` +3. **下载模型**: + 1. [GFPGANv1.4](https://huggingface.co/hacksider/deep-live-cam/resolve/main/GFPGANv1.4.pth) + 2. [inswapper_128_fp16.onnx](https://huggingface.co/hacksider/deep-live-cam/resolve/main/inswapper_128_fp16.onnx) + 然后将这两个文件放在“**models**”文件夹中。 +4. **安装依赖项**: + 我们强烈建议使用 `venv` 以避免问题。 + ``` + pip install -r requirements.txt + ``` + 完成 !!! 如果您没有 GPU,您应该能够使用 `python run.py` 命令运行 roop。请注意,在首次运行程序时,它将下载一些模型,这可能会根据您的网络连接花费一些时间。 +### GPU 加速 +#### CUDA 执行提供程序 (Nvidia) +1. 安装 [CUDA Toolkit 11.8](https://developer.nvidia.com/cuda-11-8-0-download-archive) -2. Install dependencies: - - -``` -pip uninstall onnxruntime onnxruntime-gpu -pip install onnxruntime-gpu==1.16.3 - -``` - -3. Usage in case the provider is available: - -``` -python run.py --execution-provider cuda - -``` - -### [](https://github.com/s0md3v/roop/wiki/2.-Acceleration#coreml-execution-provider-apple-silicon)CoreML Execution Provider (Apple Silicon) - -1. Install dependencies: - -``` -pip uninstall onnxruntime onnxruntime-silicon -pip install onnxruntime-silicon==1.13.1 - -``` - -2. Usage in case the provider is available: - -``` -python run.py --execution-provider coreml - -``` - -### [](https://github.com/s0md3v/roop/wiki/2.-Acceleration#coreml-execution-provider-apple-legacy)CoreML Execution Provider (Apple Legacy) - -1. Install dependencies: - -``` -pip uninstall onnxruntime onnxruntime-coreml -pip install onnxruntime-coreml==1.13.1 - -``` - -2. Usage in case the provider is available: - -``` -python run.py --execution-provider coreml - -``` - -### [](https://github.com/s0md3v/roop/wiki/2.-Acceleration#directml-execution-provider-windows)DirectML Execution Provider (Windows) - -1. Install dependencies: - -``` -pip uninstall onnxruntime onnxruntime-directml -pip install onnxruntime-directml==1.15.1 - -``` - -2. Usage in case the provider is available: - -``` -python run.py --execution-provider directml - -``` - -### [](https://github.com/s0md3v/roop/wiki/2.-Acceleration#openvino-execution-provider-intel)OpenVINO™ Execution Provider (Intel) - -1. Install dependencies: - -``` -pip uninstall onnxruntime onnxruntime-openvino -pip install onnxruntime-openvino==1.15.0 - -``` - -2. Usage in case the provider is available: - -``` -python run.py --execution-provider openvino -``` - -## How do I use it? -> Note: When you run this program for the first time, it will download some models ~300MB in size. - -Executing `python run.py` command will launch this window: +2. 安装依赖项: + ``` + pip uninstall onnxruntime onnxruntime-gpu + pip install onnxruntime-gpu==1.16.3 + ``` +3. 如果提供程序可用,则使用: + ``` + python run.py --execution-provider cuda + ``` +#### CoreML 执行提供程序 (Apple Silicon) +1. 安装依赖项: + ``` + pip uninstall onnxruntime onnxruntime-silicon + pip install onnxruntime-silicon==1.13.1 + ``` +2. 如果提供程序可用,则使用: + ``` + python run.py --execution-provider coreml + ``` +#### CoreML 执行提供程序 (Apple Legacy) +1. 安装依赖项: + ``` + pip uninstall onnxruntime onnxruntime-coreml + pip install onnxruntime-coreml==1.13.1 + ``` +2. 如果提供程序可用,则使用: + ``` + python run.py --execution-provider coreml + ``` +#### DirectML 执行提供程序 (Windows) +1. 安装依赖项: + ``` + pip uninstall onnxruntime onnxruntime-directml + pip install onnxruntime-directml==1.15.1 + ``` +2. 如果提供程序可用,则使用: + ``` + python run.py --execution-provider directml + ``` +#### OpenVINO™ 执行提供程序 (Intel) +1. 安装依赖项: + ``` + pip uninstall onnxruntime onnxruntime-openvino + pip install onnxruntime-openvino==1.15.0 + ``` +2. 如果提供程序可用,则使用: + ``` + python run.py --execution-provider openvino + ``` +**如何使用**? +> 注意:首次运行此程序时,它将下载一些模型,大小约为 300MB。 +执行 `python run.py` 命令将启动以下窗口: ![gui-demo](instruction.png) - -Choose a face (image with desired face) and the target image/video (image/video in which you want to replace the face) and click on `Start`. Open file explorer and navigate to the directory you select your output to be in. You will find a directory named `` where you can see the frames being swapped in realtime. Once the processing is done, it will create the output file. That's it. - -## For the webcam mode -Just follow the clicks on the screenshot -1. Select a face -2. Click live -3. Wait for a few seconds (it takes a longer time, usually 10 to 30 seconds before the preview shows up) - +选择一个面部 (包含所需面部的图像) 和目标图像/视频 (您想要替换面部的图像/视频),然后单击“开始”。打开文件资源管理器,导航到您选择的输出目录。您将找到名为 `` 的目录,其中可以实时查看交换的帧。处理完成后,它将创建输出文件。就这样。 +**网络摄像头模式** +只需按照屏幕截图上的步骤操作: +1. 选择一个面部 +2. 单击“实时” +3. 等待几秒钟 (通常需要 10 到 30 秒才能显示预览) ![demo-gif](demo.gif) - -Just use your favorite screencapture to stream like OBS -> Note: In case you want to change your face, just select another picture, the preview mode will then restart (so just wait a bit). - - -Additional command line arguments are given below. To learn out what they do, check [this guide](https://github.com/s0md3v/roop/wiki/Advanced-Options). - +只需使用您喜欢的屏幕录制软件进行直播,例如 OBS。 +> 注意:如果您想更改您的面部,只需选择另一张图片,预览模式将重新启动 (所以只需等待一会儿)。 +以下是一些额外的命令行参数。要了解它们的功能,请查看 [此指南](https://github.com/s0md3v/roop/wiki/Advanced-Options)。 ``` options: - -h, --help show this help message and exit - -s SOURCE_PATH, --source SOURCE_PATH select an source image - -t TARGET_PATH, --target TARGET_PATH select an target image or video - -o OUTPUT_PATH, --output OUTPUT_PATH select output file or directory - --frame-processor FRAME_PROCESSOR [FRAME_PROCESSOR ...] frame processors (choices: face_swapper, face_enhancer, ...) - --keep-fps keep original fps - --keep-audio keep original audio - --keep-frames keep temporary frames - --many-faces process every face - --video-encoder {libx264,libx265,libvpx-vp9} adjust output video encoder - --video-quality [0-51] adjust output video quality - --max-memory MAX_MEMORY maximum amount of RAM in GB - --execution-provider {cpu} [{cpu} ...] available execution provider (choices: cpu, ...) - --execution-threads EXECUTION_THREADS number of execution threads - -v, --version show program's version number and exit + -h, --help 显示此帮助消息并退出 + -s SOURCE_PATH, --source SOURCE_PATH 选择源图像 + -t TARGET_PATH, --target TARGET_PATH 选择目标图像或视频 + -o OUTPUT_PATH, --output OUTPUT_PATH 选择输出文件或目录 + --frame-processor FRAME_PROCESSOR [FRAME_PROCESSOR ...] 帧处理器 (choices: face_swapper, face_enhancer, ...) + --keep-fps 保持原始 fps + --keep-audio 保持原始音频 + --keep-frames 保留临时帧 + --many-faces 处理每个面部 + --video-encoder {libx264,libx265,libvpx-vp9} 调整输出视频编码器 + --video-quality [0-51] 调整输出视频质量 + --max-memory MAX_MEMORY 最大 RAM 量 (GB) + --execution-provider {cpu} [{cpu} ...] 可用的执行提供程序 (choices: cpu, ...) + --execution-threads EXECUTION_THREADS 执行线程数 + -v, --version 显示程序的版本号并退出 ``` - -Looking for a CLI mode? Using the -s/--source argument will make the run program in cli mode. - -## Want the Next Update Now? -If you want the latest and greatest build, or want to see some new great features, go to our [experimental branch](https://github.com/hacksider/Deep-Live-Cam/tree/experimental) and experience what the contributors have given. - -## Credits - -- [ffmpeg](https://ffmpeg.org/): for making video related operations easy -- [deepinsight](https://github.com/deepinsight): for their [insightface](https://github.com/deepinsight/insightface) project which provided a well-made library and models. -- [havok2-htwo](https://github.com/havok2-htwo) : for sharing the code for webcam -- [GosuDRM](https://github.com/GosuDRM/nsfw-roop) : for uncensoring roop -- and [all developers](https://github.com/hacksider/Deep-Live-Cam/graphs/contributors) behind libraries used in this project. -- Foot Note: [This is originally roop-cam, see the full history of the code here.](https://github.com/hacksider/roop-cam) Please be informed that the base author of the code is [s0md3v](https://github.com/s0md3v/roop) +想要 CLI 模式?使用 -s/--source 参数将使 run 程序以 CLI 模式运行。 +**想要立即获得下一个更新**? +如果您想要最新的构建版本或想体验一些新的功能,请转到我们的 [experimental branch](https://github.com/hacksider/Deep-Live-Cam/tree/experimental) 并体验贡献者带来的功能。 +**致谢** +- [ffmpeg](https://ffmpeg.org/): 让视频相关操作变得容易 +- [deepinsight](https://github.com/deepinsight): 他们的 [insightface](https://github.com/deepinsight/insightface) 项目提供了一个制作精良的库和模型。 +- [havok2-htwo](https://github.com/havok2-htwo) : 分享用于网络摄像头的代码 +- [GosuDRM](https://github.com/GosuDRM/nsfw-roop) : 解除 roop 的审查 +- 以及 [所有开发者](https://github.com/hacksider/Deep-Live-Cam/graphs/contributors) 在该项目中使用的库背后的所有开发者。 +- 脚注:[这原本是 roop-cam,请在此处查看代码的完整历史。](https://github.com/hacksider/roop-cam) 请注意,代码的基础作者是 [s0md3v](https://github.com/s0md3v/roop) From 58c911d23642c11fe9cb69ea524f98452cfa40da Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:41:31 +0800 Subject: [PATCH 02/16] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 59f04e8..cff94bc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ **免责声明** + **这个分支经过 NITSC 的修改,只经过我们(NITSC)的电脑验证,没有经过大众验证。** 这款软件旨在为蓬勃发展的AI生成媒体行业做出积极贡献,帮助艺术家完成动画自定义角色、使用角色作为服装模型等任务。 开发人员意识到该软件可能存在不道德的应用,并承诺采取预防措施。它内置了检查功能,防止程序在包括裸露、图形内容、战争画面等在内的不适当媒体上运行。我们将继续积极开发该项目,并遵守法律和道德规范。如果法律要求,该项目可能会关闭或在输出中包含水印。 From 6881dd8c49b3f913285597af0e6087fc69ec84bc Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:41:44 +0800 Subject: [PATCH 03/16] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cff94bc..ce47203 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ 这款软件旨在为蓬勃发展的AI生成媒体行业做出积极贡献,帮助艺术家完成动画自定义角色、使用角色作为服装模型等任务。 开发人员意识到该软件可能存在不道德的应用,并承诺采取预防措施。它内置了检查功能,防止程序在包括裸露、图形内容、战争画面等在内的不适当媒体上运行。我们将继续积极开发该项目,并遵守法律和道德规范。如果法律要求,该项目可能会关闭或在输出中包含水印。 用户应负责任地使用该软件,并遵守当地法律。如果使用真实人物的面孔,建议用户从相关人员那里获得许可,并在在线发布内容时明确说明这是深度伪造视频。该软件的开发人员不承担最终用户行为的责任。 + **如何安装**? ### 基本安装 (CPU) 1. **设置平台**: From 840c2a12b7fa754856811aa5d8c3d4229a64de44 Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:43:12 +0800 Subject: [PATCH 04/16] Rename requirements.txt to orginal_requirements.txt --- requirements.txt => orginal_requirements.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename requirements.txt => orginal_requirements.txt (100%) diff --git a/requirements.txt b/orginal_requirements.txt similarity index 100% rename from requirements.txt rename to orginal_requirements.txt From 248f43ff969af7401bdbdd6bf71bd4213cb1b75c Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:46:26 +0800 Subject: [PATCH 05/16] Create requirements.txt --- requirements.txt | 108 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..fcbeff7 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,108 @@ +absl-py==2.1.0 +addict==2.4.0 +albucore==0.0.13 +albumentations==1.4.13 +annotated-types==0.7.0 +astunparse==1.6.3 +basicsr==1.4.2 +beautifulsoup4==4.12.3 +certifi==2024.7.4 +charset-normalizer==3.3.2 +colorama==0.4.6 +coloredlogs==15.0.1 +contourpy==1.2.1 +customtkinter==5.2.2 +cycler==0.12.1 +Cython==3.0.11 +darkdetect==0.8.0 +easydict==1.13 +eval_type_backport==0.2.0 +facexlib==0.3.0 +filelock==3.15.4 +filterpy==1.4.5 +flatbuffers==24.3.25 +fonttools==4.53.1 +fsspec==2024.6.1 +future==1.0.0 +gast==0.6.0 +gdown==5.2.0 +gfpgan==1.3.8 +google-pasta==0.2.0 +grpcio==1.65.4 +h5py==3.11.0 +humanfriendly==10.0 +idna==3.7 +imageio==2.34.2 +importlib_metadata==8.2.0 +insightface==0.7.3 +Jinja2==3.1.4 +joblib==1.4.2 +keras==3.5.0 +kiwisolver==1.4.5 +lazy_loader==0.4 +libclang==18.1.1 +llvmlite==0.43.0 +lmdb==1.5.1 +Markdown==3.6 +markdown-it-py==3.0.0 +MarkupSafe==2.1.5 +matplotlib==3.9.1.post1 +mdurl==0.1.2 +ml-dtypes==0.4.0 +mpmath==1.3.0 +namex==0.0.8 +networkx==3.3 +numba==0.60.0 +numpy==1.26.4 +onnx==1.16.0 +onnxruntime==1.18.0 +opencv-python==4.8.1.78 +opencv-python-headless==4.10.0.84 +opennsfw2==0.10.2 +opt-einsum==3.3.0 +optree==0.12.1 +packaging==24.1 +Pillow==9.5.0 +platformdirs==4.2.2 +prettytable==3.11.0 +protobuf==4.23.2 +psutil==5.9.8 +pydantic==2.8.2 +pydantic_core==2.20.1 +Pygments==2.18.0 +pyparsing==3.1.2 +pyreadline3==3.4.1 +PySocks==1.7.1 +python-dateutil==2.9.0.post0 +PyYAML==6.0.2 +realesrgan==0.3.0 +requests==2.32.3 +rich==13.7.1 +scikit-image==0.24.0 +scikit-learn==1.5.1 +scipy==1.14.0 +setuptools==72.1.0 +six==1.16.0 +soupsieve==2.5 +sympy==1.13.2 +tb-nightly==2.18.0a20240812 +tensorboard==2.17.0 +tensorboard-data-server==0.7.2 +tensorflow==2.17.0 +tensorflow-intel==2.17.0 +termcolor==2.4.0 +threadpoolctl==3.5.0 +tifffile==2024.8.10 +tk==0.1.0 +tomli==2.0.1 +torch==2.2.0 +torchvision==0.17.0 +tqdm==4.66.4 +typing_extensions==4.12.2 +urllib3==2.2.2 +wcwidth==0.2.13 +Werkzeug==3.0.3 +wheel==0.44.0 +wrapt==1.16.0 +yapf==0.40.2 +zipp==3.20.0 From 7398858344ff5d25c032c71b499867ed3a434c76 Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:47:36 +0800 Subject: [PATCH 06/16] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index ce47203..a4ac470 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,10 @@ 然后将这两个文件放在“**models**”文件夹中。 4. **安装依赖项**: 我们强烈建议使用 `venv` 以避免问题。 + ```(适用于 Python3.12.x) + pip install -r requirements.txt ``` + ```(适用于 Python3.10.x) pip install -r requirements.txt ``` 完成 !!! 如果您没有 GPU,您应该能够使用 `python run.py` 命令运行 roop。请注意,在首次运行程序时,它将下载一些模型,这可能会根据您的网络连接花费一些时间。 From 61175537b8ad5b10f1f8b4a3b14143ab3bb051d7 Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:47:56 +0800 Subject: [PATCH 07/16] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a4ac470..e2a97a8 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ pip install -r requirements.txt ``` ```(适用于 Python3.10.x) - pip install -r requirements.txt + pip install -r orginal_requirements.txt ``` 完成 !!! 如果您没有 GPU,您应该能够使用 `python run.py` 命令运行 roop。请注意,在首次运行程序时,它将下载一些模型,这可能会根据您的网络连接花费一些时间。 ### GPU 加速 From f3e2fc2384d4146d621d2382ffa4622fc519232e Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:48:25 +0800 Subject: [PATCH 08/16] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e2a97a8..328c084 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,12 @@ 然后将这两个文件放在“**models**”文件夹中。 4. **安装依赖项**: 我们强烈建议使用 `venv` 以避免问题。 - ```(适用于 Python3.12.x) + (适用于 Python3.12.x) + ``` pip install -r requirements.txt ``` - ```(适用于 Python3.10.x) + (适用于 Python3.10.x) + ``` pip install -r orginal_requirements.txt ``` 完成 !!! 如果您没有 GPU,您应该能够使用 `python run.py` 命令运行 roop。请注意,在首次运行程序时,它将下载一些模型,这可能会根据您的网络连接花费一些时间。 From c6ebcadb0b38ccf21ab77105fce20180e9f95d10 Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:48:38 +0800 Subject: [PATCH 09/16] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 328c084..d67ee93 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ 然后将这两个文件放在“**models**”文件夹中。 4. **安装依赖项**: 我们强烈建议使用 `venv` 以避免问题。 + (适用于 Python3.12.x) ``` pip install -r requirements.txt From f43b2b82fbbb8036436e24a0500156f81e0de6ea Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:49:10 +0800 Subject: [PATCH 10/16] Update run.py --- run.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/run.py b/run.py index 31bc6da..95d679c 100644 --- a/run.py +++ b/run.py @@ -2,5 +2,8 @@ from modules import core +import os +os.environ['KERAS_BACKEND'] = 'tensorflow' + if __name__ == '__main__': core.run() From 30dea823e6d615a76f06efcfa553f4c180109fa5 Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:51:51 +0800 Subject: [PATCH 11/16] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index d67ee93..2a59c1d 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,15 @@ - git - [ffmpeg](https://www.youtube.com/watch?v=OlNWCpFdVMA) - [visual studio 2022 runtimes (windows)](https://visualstudio.microsoft.com/visual-cpp-build-tools/) + - C:\Users\<用户名>\.keras\keras.json 改为以下内容: + ``` + { + "image_data_format": "channels_last", + "epsilon": 1e-07, + "floatx": "float32", + "backend": "tensorflow" + } + ``` 2. **克隆仓库**: ``` https://github.com/hacksider/Deep-Live-Cam.git From 0cb849af20adf6692ff068574a170d7caddbe3a2 Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 14:32:33 +0800 Subject: [PATCH 12/16] =?UTF-8?q?=E6=94=B9=E4=B8=BA=E4=B8=AD=E6=96=87?= =?UTF-8?q?=EF=BC=9A=20ui.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ui.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/modules/ui.py b/modules/ui.py index 1d0bb69..cd69c22 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -61,47 +61,47 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C target_label = ctk.CTkLabel(root, text=None) target_label.place(relx=0.6, rely=0.1, relwidth=0.3, relheight=0.25) - source_button = ctk.CTkButton(root, text='Select a face', cursor='hand2', command=lambda: select_source_path()) + source_button = ctk.CTkButton(root, text='选择一个面部', cursor='hand2', command=lambda: select_source_path()) source_button.place(relx=0.1, rely=0.4, relwidth=0.3, relheight=0.1) - target_button = ctk.CTkButton(root, text='Select a target', cursor='hand2', command=lambda: select_target_path()) + target_button = ctk.CTkButton(root, text='选择一个目标', cursor='hand2', command=lambda: select_target_path()) target_button.place(relx=0.6, rely=0.4, relwidth=0.3, relheight=0.1) keep_fps_value = ctk.BooleanVar(value=modules.globals.keep_fps) - keep_fps_checkbox = ctk.CTkSwitch(root, text='Keep fps', variable=keep_fps_value, cursor='hand2', command=lambda: setattr(modules.globals, 'keep_fps', not modules.globals.keep_fps)) + keep_fps_checkbox = ctk.CTkSwitch(root, text='保持帧率', variable=keep_fps_value, cursor='hand2', command=lambda: setattr(modules.globals, 'keep_fps', not modules.globals.keep_fps)) keep_fps_checkbox.place(relx=0.1, rely=0.6) keep_frames_value = ctk.BooleanVar(value=modules.globals.keep_frames) - keep_frames_switch = ctk.CTkSwitch(root, text='Keep frames', variable=keep_frames_value, cursor='hand2', command=lambda: setattr(modules.globals, 'keep_frames', keep_frames_value.get())) + keep_frames_switch = ctk.CTkSwitch(root, text='保留镜框', variable=keep_frames_value, cursor='hand2', command=lambda: setattr(modules.globals, 'keep_frames', keep_frames_value.get())) keep_frames_switch.place(relx=0.1, rely=0.65) # for FRAME PROCESSOR ENHANCER tumbler: enhancer_value = ctk.BooleanVar(value=modules.globals.fp_ui['face_enhancer']) - enhancer_switch = ctk.CTkSwitch(root, text='Face Enhancer', variable=enhancer_value, cursor='hand2', command=lambda: update_tumbler('face_enhancer',enhancer_value.get())) + enhancer_switch = ctk.CTkSwitch(root, text='面部优化', variable=enhancer_value, cursor='hand2', command=lambda: update_tumbler('face_enhancer',enhancer_value.get())) enhancer_switch.place(relx=0.1, rely=0.7) keep_audio_value = ctk.BooleanVar(value=modules.globals.keep_audio) - keep_audio_switch = ctk.CTkSwitch(root, text='Keep audio', variable=keep_audio_value, cursor='hand2', command=lambda: setattr(modules.globals, 'keep_audio', keep_audio_value.get())) + keep_audio_switch = ctk.CTkSwitch(root, text='保留音频', variable=keep_audio_value, cursor='hand2', command=lambda: setattr(modules.globals, 'keep_audio', keep_audio_value.get())) keep_audio_switch.place(relx=0.6, rely=0.6) many_faces_value = ctk.BooleanVar(value=modules.globals.many_faces) - many_faces_switch = ctk.CTkSwitch(root, text='Many faces', variable=many_faces_value, cursor='hand2', command=lambda: setattr(modules.globals, 'many_faces', many_faces_value.get())) + many_faces_switch = ctk.CTkSwitch(root, text='多脸', variable=many_faces_value, cursor='hand2', command=lambda: setattr(modules.globals, 'many_faces', many_faces_value.get())) many_faces_switch.place(relx=0.6, rely=0.65) nsfw_value = ctk.BooleanVar(value=modules.globals.nsfw) nsfw_switch = ctk.CTkSwitch(root, text='NSFW', variable=nsfw_value, cursor='hand2', command=lambda: setattr(modules.globals, 'nsfw', nsfw_value.get())) nsfw_switch.place(relx=0.6, rely=0.7) - start_button = ctk.CTkButton(root, text='Start', cursor='hand2', command=lambda: select_output_path(start)) + start_button = ctk.CTkButton(root, text='开始', cursor='hand2', command=lambda: select_output_path(start)) start_button.place(relx=0.15, rely=0.80, relwidth=0.2, relheight=0.05) - stop_button = ctk.CTkButton(root, text='Destroy', cursor='hand2', command=lambda: destroy()) + stop_button = ctk.CTkButton(root, text='充值', cursor='hand2', command=lambda: destroy()) stop_button.place(relx=0.4, rely=0.80, relwidth=0.2, relheight=0.05) - preview_button = ctk.CTkButton(root, text='Preview', cursor='hand2', command=lambda: toggle_preview()) + preview_button = ctk.CTkButton(root, text='预览', cursor='hand2', command=lambda: toggle_preview()) preview_button.place(relx=0.65, rely=0.80, relwidth=0.2, relheight=0.05) - live_button = ctk.CTkButton(root, text='Live', cursor='hand2', command=lambda: webcam_preview()) + live_button = ctk.CTkButton(root, text='实时', cursor='hand2', command=lambda: webcam_preview()) live_button.place(relx=0.40, rely=0.86, relwidth=0.2, relheight=0.05) status_label = ctk.CTkLabel(root, text=None, justify='center') @@ -120,7 +120,7 @@ def create_preview(parent: ctk.CTkToplevel) -> ctk.CTkToplevel: preview = ctk.CTkToplevel(parent) preview.withdraw() - preview.title('Preview') + preview.title('预览') preview.configure() preview.protocol('WM_DELETE_WINDOW', lambda: toggle_preview()) preview.resizable(width=False, height=False) @@ -146,7 +146,7 @@ def select_source_path() -> None: global RECENT_DIRECTORY_SOURCE, img_ft, vid_ft PREVIEW.withdraw() - source_path = ctk.filedialog.askopenfilename(title='select an source image', initialdir=RECENT_DIRECTORY_SOURCE, filetypes=[img_ft]) + source_path = ctk.filedialog.askopenfilename(title='选择源图像', initialdir=RECENT_DIRECTORY_SOURCE, filetypes=[img_ft]) if is_image(source_path): modules.globals.source_path = source_path RECENT_DIRECTORY_SOURCE = os.path.dirname(modules.globals.source_path) @@ -161,7 +161,7 @@ def select_target_path() -> None: global RECENT_DIRECTORY_TARGET, img_ft, vid_ft PREVIEW.withdraw() - target_path = ctk.filedialog.askopenfilename(title='select an target image or video', initialdir=RECENT_DIRECTORY_TARGET, filetypes=[img_ft, vid_ft]) + target_path = ctk.filedialog.askopenfilename(title='选择目标图像或视频', initialdir=RECENT_DIRECTORY_TARGET, filetypes=[img_ft, vid_ft]) if is_image(target_path): modules.globals.target_path = target_path RECENT_DIRECTORY_TARGET = os.path.dirname(modules.globals.target_path) @@ -181,9 +181,9 @@ def select_output_path(start: Callable[[], None]) -> None: global RECENT_DIRECTORY_OUTPUT, img_ft, vid_ft if is_image(modules.globals.target_path): - output_path = ctk.filedialog.asksaveasfilename(title='save image output file', filetypes=[img_ft], defaultextension='.png', initialfile='output.png', initialdir=RECENT_DIRECTORY_OUTPUT) + output_path = ctk.filedialog.asksaveasfilename(title='保存输出图像', filetypes=[img_ft], defaultextension='.png', initialfile='output.png', initialdir=RECENT_DIRECTORY_OUTPUT) elif is_video(modules.globals.target_path): - output_path = ctk.filedialog.asksaveasfilename(title='save video output file', filetypes=[vid_ft], defaultextension='.mp4', initialfile='output.mp4', initialdir=RECENT_DIRECTORY_OUTPUT) + output_path = ctk.filedialog.asksaveasfilename(title='保存输出视频', filetypes=[vid_ft], defaultextension='.mp4', initialfile='output.mp4', initialdir=RECENT_DIRECTORY_OUTPUT) else: output_path = None if output_path: @@ -293,4 +293,4 @@ def webcam_preview(): ROOT.update() cap.release() - PREVIEW.withdraw() # Close preview window when loop is finished \ No newline at end of file + PREVIEW.withdraw() # Close preview window when loop is finished From 6c0b6e166cb3aa8d5ad4809e9d932e81a17f2c28 Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 15:47:54 +0800 Subject: [PATCH 13/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E4=B8=AD=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ui.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/ui.py b/modules/ui.py index cd69c22..dd5c71b 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -95,7 +95,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C start_button = ctk.CTkButton(root, text='开始', cursor='hand2', command=lambda: select_output_path(start)) start_button.place(relx=0.15, rely=0.80, relwidth=0.2, relheight=0.05) - stop_button = ctk.CTkButton(root, text='充值', cursor='hand2', command=lambda: destroy()) + stop_button = ctk.CTkButton(root, text='关闭', cursor='hand2', command=lambda: destroy()) stop_button.place(relx=0.4, rely=0.80, relwidth=0.2, relheight=0.05) preview_button = ctk.CTkButton(root, text='预览', cursor='hand2', command=lambda: toggle_preview()) @@ -293,4 +293,4 @@ def webcam_preview(): ROOT.update() cap.release() - PREVIEW.withdraw() # Close preview window when loop is finished + PREVIEW.withdraw() # Close preview window when loop is finished \ No newline at end of file From f5be662452ec28025ccc57f9514d3b286713ae12 Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 16:20:14 +0800 Subject: [PATCH 14/16] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a59c1d..4716e17 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ ``` 2. 如果提供程序可用,则使用: ``` - python run.py --execution-provider directml + python run.py --execution-provider dml ``` #### OpenVINO™ 执行提供程序 (Intel) 1. 安装依赖项: From 1c8aa7ce5e81da193a58a4d8d501692332079195 Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 20:47:58 +0800 Subject: [PATCH 15/16] Rename README.md to README-Fixed.md --- README.md => README-Fixed.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename README.md => README-Fixed.md (100%) diff --git a/README.md b/README-Fixed.md similarity index 100% rename from README.md rename to README-Fixed.md From 398304f0ca8b64210e07c6bc3a3eb2aa69aca65f Mon Sep 17 00:00:00 2001 From: Dean of NITSC <138109564+nitsc@users.noreply.github.com> Date: Tue, 13 Aug 2024 20:48:23 +0800 Subject: [PATCH 16/16] Create README.md --- README.md | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..f108125 --- /dev/null +++ b/README.md @@ -0,0 +1,179 @@ +![demo-gif](demo.gif) + + +## Disclaimer +This software is meant to be a productive contribution to the rapidly growing AI-generated media industry. It will help artists with tasks such as animating a custom character or using the character as a model for clothing etc. + +The developers of this software are aware of its possible unethical applications and are committed to take preventative measures against them. It has a built-in check which prevents the program from working on inappropriate media including but not limited to nudity, graphic content, sensitive material such as war footage etc. We will continue to develop this project in the positive direction while adhering to law and ethics. This project may be shut down or include watermarks on the output if requested by law. + +Users of this software are expected to use this software responsibly while abiding by local laws. If the face of a real person is being used, users are required to get consent from the concerned person and clearly mention that it is a deepfake when posting content online. Developers of this software will not be responsible for actions of end-users. + +## How do I install it? + + +### Basic: It is more likely to work on your computer but it will also be very slow. You can follow instructions for the basic install (This usually runs via **CPU**) +#### 1.Setup your platform +- python (3.10 recommended) +- pip +- git +- [ffmpeg](https://www.youtube.com/watch?v=OlNWCpFdVMA) +- [visual studio 2022 runtimes (windows)](https://visualstudio.microsoft.com/visual-cpp-build-tools/) +#### 2. Clone Repository + https://github.com/hacksider/Deep-Live-Cam.git + +#### 3. Download Models + + 1. [GFPGANv1.4](https://huggingface.co/hacksider/deep-live-cam/resolve/main/GFPGANv1.4.pth) + 2. [inswapper_128_fp16.onnx](https://huggingface.co/hacksider/deep-live-cam/resolve/main/inswapper_128_fp16.onnx) + +Then put those 2 files on the "**models**" folder + +#### 4. Install dependency +We highly recommend to work with a `venv` to avoid issues. +``` +pip install -r requirements.txt +``` +##### DONE!!! If you dont have any GPU, You should be able to run roop using `python run.py` command. Keep in mind that while running the program for first time, it will download some models which can take time depending on your network connection. + +### *Proceed if you want to use GPU Acceleration +### CUDA Execution Provider (Nvidia)* + +1. Install [CUDA Toolkit 11.8](https://developer.nvidia.com/cuda-11-8-0-download-archive) + +2. Install dependencies: + + +``` +pip uninstall onnxruntime onnxruntime-gpu +pip install onnxruntime-gpu==1.16.3 + +``` + +3. Usage in case the provider is available: + +``` +python run.py --execution-provider cuda + +``` + +### [](https://github.com/s0md3v/roop/wiki/2.-Acceleration#coreml-execution-provider-apple-silicon)CoreML Execution Provider (Apple Silicon) + +1. Install dependencies: + +``` +pip uninstall onnxruntime onnxruntime-silicon +pip install onnxruntime-silicon==1.13.1 + +``` + +2. Usage in case the provider is available: + +``` +python run.py --execution-provider coreml + +``` + +### [](https://github.com/s0md3v/roop/wiki/2.-Acceleration#coreml-execution-provider-apple-legacy)CoreML Execution Provider (Apple Legacy) + +1. Install dependencies: + +``` +pip uninstall onnxruntime onnxruntime-coreml +pip install onnxruntime-coreml==1.13.1 + +``` + +2. Usage in case the provider is available: + +``` +python run.py --execution-provider coreml + +``` + +### [](https://github.com/s0md3v/roop/wiki/2.-Acceleration#directml-execution-provider-windows)DirectML Execution Provider (Windows) + +1. Install dependencies: + +``` +pip uninstall onnxruntime onnxruntime-directml +pip install onnxruntime-directml==1.15.1 + +``` + +2. Usage in case the provider is available: + +``` +python run.py --execution-provider directml + +``` + +### [](https://github.com/s0md3v/roop/wiki/2.-Acceleration#openvino-execution-provider-intel)OpenVINO™ Execution Provider (Intel) + +1. Install dependencies: + +``` +pip uninstall onnxruntime onnxruntime-openvino +pip install onnxruntime-openvino==1.15.0 + +``` + +2. Usage in case the provider is available: + +``` +python run.py --execution-provider openvino +``` + +## How do I use it? +> Note: When you run this program for the first time, it will download some models ~300MB in size. + +Executing `python run.py` command will launch this window: +![gui-demo](instruction.png) + +Choose a face (image with desired face) and the target image/video (image/video in which you want to replace the face) and click on `Start`. Open file explorer and navigate to the directory you select your output to be in. You will find a directory named `` where you can see the frames being swapped in realtime. Once the processing is done, it will create the output file. That's it. + +## For the webcam mode +Just follow the clicks on the screenshot +1. Select a face +2. Click live +3. Wait for a few seconds (it takes a longer time, usually 10 to 30 seconds before the preview shows up) + +![demo-gif](demo.gif) + +Just use your favorite screencapture to stream like OBS +> Note: In case you want to change your face, just select another picture, the preview mode will then restart (so just wait a bit). + + +Additional command line arguments are given below. To learn out what they do, check [this guide](https://github.com/s0md3v/roop/wiki/Advanced-Options). + +``` +options: + -h, --help show this help message and exit + -s SOURCE_PATH, --source SOURCE_PATH select an source image + -t TARGET_PATH, --target TARGET_PATH select an target image or video + -o OUTPUT_PATH, --output OUTPUT_PATH select output file or directory + --frame-processor FRAME_PROCESSOR [FRAME_PROCESSOR ...] frame processors (choices: face_swapper, face_enhancer, ...) + --keep-fps keep original fps + --keep-audio keep original audio + --keep-frames keep temporary frames + --many-faces process every face + --video-encoder {libx264,libx265,libvpx-vp9} adjust output video encoder + --video-quality [0-51] adjust output video quality + --max-memory MAX_MEMORY maximum amount of RAM in GB + --execution-provider {cpu} [{cpu} ...] available execution provider (choices: cpu, ...) + --execution-threads EXECUTION_THREADS number of execution threads + -v, --version show program's version number and exit +``` + +Looking for a CLI mode? Using the -s/--source argument will make the run program in cli mode. + +## Want the Next Update Now? +If you want the latest and greatest build, or want to see some new great features, go to our [experimental branch](https://github.com/hacksider/Deep-Live-Cam/tree/experimental) and experience what the contributors have given. + +## Credits + +- [ffmpeg](https://ffmpeg.org/): for making video related operations easy +- [deepinsight](https://github.com/deepinsight): for their [insightface](https://github.com/deepinsight/insightface) project which provided a well-made library and models. +- [havok2-htwo](https://github.com/havok2-htwo) : for sharing the code for webcam +- [GosuDRM](https://github.com/GosuDRM/nsfw-roop) : for uncensoring roop +- and [all developers](https://github.com/hacksider/Deep-Live-Cam/graphs/contributors) behind libraries used in this project. +- Foot Note: [This is originally roop-cam, see the full history of the code here.](https://github.com/hacksider/roop-cam) Please be informed that the base author of the code is [s0md3v](https://github.com/s0md3v/roop)