Spaces:
Running
Running
<div align="center"> | |
<h1>GPT-SoVITS-WebUI</h1> | |
์๋์ ๋ฐ์ดํฐ๋ก ์์ฑ ๋ณํ ๋ฐ ์์ฑ ํฉ์ฑ์ ์ง์ํ๋ ๊ฐ๋ ฅํ WebUI.<br><br> | |
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange)](https://github.com/RVC-Boss/GPT-SoVITS) | |
<img src="https://counter.seku.su/cmoe?name=gptsovits&theme=r34" /><br> | |
[![Open In Colab](https://img.shields.io/badge/Colab-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Boss/GPT-SoVITS/blob/main/colab_webui.ipynb) | |
[![License](https://img.shields.io/badge/LICENSE-MIT-green.svg?style=for-the-badge)](https://github.com/RVC-Boss/GPT-SoVITS/blob/main/LICENSE) | |
[![Huggingface](https://img.shields.io/badge/๐ค%20-Models%20Repo-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/GPT-SoVITS/tree/main) | |
[![Discord](https://img.shields.io/discord/1198701940511617164?color=%23738ADB&label=Discord&style=for-the-badge)](https://discord.gg/dnrgs5GHfG) | |
[**English**](../../README.md) | [**ไธญๆ็ฎไฝ**](../cn/README.md) | [**ๆฅๆฌ่ช**](../ja/README.md) | **ํ๊ตญ์ด** | [**Tรผrkรงe**](../tr/README.md) | |
</div> | |
--- | |
## ๊ธฐ๋ฅ: | |
1. **์ ๋ก์ท ํ ์คํธ ์์ฑ ๋ณํ (TTS):** 5์ด์ ์์ฑ ์ํ์ ์ ๋ ฅํ๋ฉด ์ฆ์ ํ ์คํธ๋ฅผ ์์ฑ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. | |
2. **์๋์ ๋ฐ์ดํฐ TTS:** 1๋ถ์ ํ๋ จ ๋ฐ์ดํฐ๋ง์ผ๋ก ๋ชจ๋ธ์ ๋ฏธ์ธ ์กฐ์ ํ์ฌ ์์ฑ ์ ์ฌ๋์ ์ค์ ๊ฐ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. | |
3. **๋ค๊ตญ์ด ์ง์:** ํ๋ จ ๋ฐ์ดํฐ์ ๊ณผ ๋ค๋ฅธ ์ธ์ด์ ์ถ๋ก ์ ์ง์ํ๋ฉฐ, ํ์ฌ ์์ด, ์ผ๋ณธ์ด, ์ค๊ตญ์ด๋ฅผ ์ง์ํฉ๋๋ค. | |
4. **WebUI ๋๊ตฌ:** ์์ฑ ๋ฐ์ฃผ ๋ถ๋ฆฌ, ์๋ ํ๋ จ ๋ฐ์ดํฐ์ ๋ถํ , ์ค๊ตญ์ด ์๋ ์์ฑ ์ธ์(ASR) ๋ฐ ํ ์คํธ ์ฃผ์ ๋ฑ์ ๋๊ตฌ๋ฅผ ํตํฉํ์ฌ ์ด๋ณด์๊ฐ ํ๋ จ ๋ฐ์ดํฐ์ ๊ณผ GPT/SoVITS ๋ชจ๋ธ์ ์์ฑํ๋ ๋ฐ ๋์์ ์ค๋๋ค. | |
**๋ฐ๋ชจ ๋น๋์ค๋ฅผ ํ์ธํ์ธ์! [demo video](https://www.bilibili.com/video/BV12g4y1m7Uw)** | |
๋ณด์ง ๋ชปํ ๋ฐํ์์ ํจ์ท(few-shot) ํ์ธํ๋ ๋ฐ๋ชจ: | |
https://github.com/RVC-Boss/GPT-SoVITS/assets/129054828/05bee1fa-bdd8-4d85-9350-80c060ab47fb | |
**์ฌ์ฉ์ ์ค๋ช ์: [็ฎไฝไธญๆ](https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e) | [English](https://rentry.co/GPT-SoVITS-guide#/)** | |
## ์ค์น | |
### ํ ์คํธ ํต๊ณผ ํ๊ฒฝ | |
- Python 3.9, PyTorch 2.0.1, CUDA 11 | |
- Python 3.10.13, PyTorch 2.1.2, CUDA 12.3 | |
- Python 3.9, Pytorch 2.2.2, macOS 14.4.1 (Apple Slilicon) | |
- Python 3.9, PyTorch 2.2.2, CPU ์ฅ์น | |
_์ฐธ๊ณ : numba==0.56.4 ๋ python<3.11 ์ ํ์๋ก ํฉ๋๋ค._ | |
### Windows | |
Windows ์ฌ์ฉ์๋ผ๋ฉด (win>=10์์ ํ ์คํธ๋จ), [ํตํฉ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋](https://huggingface.co/lj1995/GPT-SoVITS-windows-package/resolve/main/GPT-SoVITS-beta.7z?download=true)ํ ํ ์์ถ์ ํ๊ณ _go-webui.bat_ ํ์ผ์ ๋๋ธ ํด๋ฆญํ๋ฉด GPT-SoVITS-WebUI๋ฅผ ์์ํ ์ ์์ต๋๋ค. | |
### Linux | |
```bash | |
conda create -n GPTSoVits python=3.9 | |
conda activate GPTSoVits | |
bash install.sh | |
``` | |
### macOS | |
**์ฃผ์: Mac์์ GPU๋ก ํ๋ จ๋ ๋ชจ๋ธ์ ๋ค๋ฅธ OS์์ ํ๋ จ๋ ๋ชจ๋ธ์ ๋นํด ํ์ง์ด ๋ฎ์ต๋๋ค. ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ ๊น์ง MacOS์์ CPU๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ จ์ ์งํํฉ๋๋ค.** | |
1. `xcode-select --install`์ ์คํํ์ฌ Xcode ์ปค๋งจ๋๋ผ์ธ ๋๊ตฌ๋ฅผ ์ค์นํ์ธ์. | |
2. `brew install ffmpeg` ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ FFmpeg๋ฅผ ์ค์นํฉ๋๋ค. | |
3. ์์ ๋จ๊ณ๋ฅผ ์๋ฃํ ํ, ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ด ํ๋ก์ ํธ๋ฅผ ์ค์นํ์ธ์. | |
```bash | |
conda create -n GPTSoVits python=3.9 | |
conda activate GPTSoVits | |
pip install -r requirements.txt | |
``` | |
### ์๋ ์ค์น | |
#### ์์กด์ฑ ์ค์น | |
```bash | |
pip install -r requirements.txt | |
``` | |
#### FFmpeg ์ค์น | |
##### Conda ์ฌ์ฉ์ | |
```bash | |
conda install ffmpeg | |
``` | |
##### Ubuntu/Debian ์ฌ์ฉ์ | |
```bash | |
sudo apt install ffmpeg | |
sudo apt install libsox-dev | |
conda install -c conda-forge 'ffmpeg<7' | |
``` | |
##### Windows ์ฌ์ฉ์ | |
[ffmpeg.exe](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffmpeg.exe)์ [ffprobe.exe](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffprobe.exe)๋ฅผ GPT-SoVITS root ๋๋ ํ ๋ฆฌ์ ๋ฃ์ต๋๋ค. | |
##### Mac ์ฌ์ฉ์ | |
```bash | |
brew install ffmpeg | |
``` | |
### Docker์์ ์ฌ์ฉ | |
#### docker-compose.yaml ์ค์ | |
0. ์ด๋ฏธ์ง ํ๊ทธ: ์ฝ๋ ์ ์ฅ์๊ฐ ๋น ๋ฅด๊ฒ ์ ๋ฐ์ดํธ๋๊ณ ํจํค์ง๊ฐ ๋๋ฆฌ๊ฒ ๋น๋๋๊ณ ํ ์คํธ๋๋ฏ๋ก, ํ์ฌ ๋น๋๋ ์ต์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ [Docker Hub](https://hub.docker.com/r/breakstring/gpt-sovits)์์ ํ์ธํ๊ณ ํ์์ ๋ฐ๋ผ Dockerfile์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ์์ ๋น๋ํ ์ ์์ต๋๋ค. | |
1. ํ๊ฒฝ ๋ณ์: | |
- is_half: ๋ฐ์ ๋ฐ/๋ฐฐ์ ๋ฐ ์ ์ด. "SSL ์ถ์ถ" ๋จ๊ณ์์ 4-cnhubert/5-wav32k ๋๋ ํ ๋ฆฌ์ ๋ด์ฉ์ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑํ ์ ์๋ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก ์ด๊ฒ ๋๋ฌธ์ ๋๋ค. ์ค์ ์ํฉ์ ๋ฐ๋ผ True ๋๋ False๋ก ์กฐ์ ํ ์ ์์ต๋๋ค. | |
2. ๋ณผ๋ฅจ ์ค์ , ์ปจํ ์ด๋ ๋ด์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ฅผ /workspace๋ก ์ค์ ํฉ๋๋ค. ๊ธฐ๋ณธ docker-compose.yaml์๋ ์ค์ ์์ ๊ฐ ๋์ด๋์ด ์์ผ๋ฏ๋ก ์ ๋ก๋/๋ค์ด๋ก๋๋ฅผ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค. | |
3. shm_size: Windows์ Docker Desktop์ ๊ธฐ๋ณธ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๋ฌด ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ค์ ์ํฉ์ ๋ฐ๋ผ ์กฐ์ ํฉ๋๋ค. | |
4. deploy ์น์ ์ gpu ๊ด๋ จ ๋ด์ฉ์ ์์คํ ๋ฐ ์ค์ ์ํฉ์ ๋ฐ๋ผ ์กฐ์ ํฉ๋๋ค. | |
#### docker compose๋ก ์คํ | |
``` | |
docker compose -f "docker-compose.yaml" up -d | |
``` | |
#### docker ๋ช ๋ น์ผ๋ก ์คํ | |
์์ ๋์ผํ๊ฒ ์ค์ ์ํฉ์ ๋ง๊ฒ ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ ๋ค์ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค: | |
``` | |
docker run --rm -it --gpus=all --env=is_half=False --volume=G:\GPT-SoVITS-DockerTest\output:/workspace/output --volume=G:\GPT-SoVITS-DockerTest\logs:/workspace/logs --volume=G:\GPT-SoVITS-DockerTest\SoVITS_weights:/workspace/SoVITS_weights --workdir=/workspace -p 9880:9880 -p 9871:9871 -p 9872:9872 -p 9873:9873 -p 9874:9874 --shm-size="16G" -d breakstring/gpt-sovits:xxxxx | |
``` | |
## ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ | |
[GPT-SoVITS Models](https://huggingface.co/lj1995/GPT-SoVITS)์์ ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ๊ณ `GPT_SoVITS\pretrained_models`์ ๋ฃ์ต๋๋ค. | |
์ค๊ตญ์ด ์๋ ์์ฑ ์ธ์(ASR), ์์ฑ ๋ฐ์ฃผ ๋ถ๋ฆฌ ๋ฐ ์์ฑ ์ ๊ฑฐ๋ฅผ ์ํด [Damo ASR Model](https://modelscope.cn/models/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/files), [Damo VAD Model](https://modelscope.cn/models/damo/speech_fsmn_vad_zh-cn-16k-common-pytorch/files) ๋ฐ [Damo Punc Model](https://modelscope.cn/models/damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch/files)์ ๋ค์ด๋ก๋ํ๊ณ `tools/asr/models`์ ๋ฃ์ต๋๋ค. | |
UVR5(์์ฑ/๋ฐ์ฃผ ๋ถ๋ฆฌ ๋ฐ ์ํฅ ์ ๊ฑฐ)๋ฅผ ์ํด [UVR5 Weights](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/uvr5_weights)์์ ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ๊ณ `tools/uvr5/uvr5_weights`์ ๋ฃ์ต๋๋ค. | |
## ๋ฐ์ดํฐ์ ํ์ | |
ํ ์คํธ ์์ฑ ํฉ์ฑ(TTS) ์ฃผ์ .list ํ์ผ ํ์: | |
``` | |
vocal_path|speaker_name|language|text | |
``` | |
์ธ์ด ์ฌ์ : | |
- 'zh': ์ค๊ตญ์ด | |
- 'ja': ์ผ๋ณธ์ด | |
- 'en': ์์ด | |
์์: | |
``` | |
D:\GPT-SoVITS\xxx/xxx.wav|xxx|en|I like playing Genshin. | |
``` | |
## ํ ์ผ ๋ชฉ๋ก | |
- [ ] **์ต์ฐ์ ์์:** | |
- [x] ์ผ๋ณธ์ด ๋ฐ ์์ด ์ง์ญํ. | |
- [ ] ์ฌ์ฉ์ ๊ฐ์ด๋. | |
- [x] ์ผ๋ณธ์ด ๋ฐ ์์ด ๋ฐ์ดํฐ์ ๋ฏธ์ธ ์กฐ์ ํ๋ จ. | |
- [ ] **๊ธฐ๋ฅ:** | |
- [ ] ์ ๋ก์ท ์์ฑ ๋ณํ (5์ด) / ์๋์ ์์ฑ ๋ณํ (1๋ถ). | |
- [ ] TTS ์๋ ์ ์ด. | |
- [ ] ํฅ์๋ TTS ๊ฐ์ ์ ์ด. | |
- [ ] SoVITS ํ ํฐ ์ ๋ ฅ์ ๋จ์ด ํ๋ฅ ๋ถํฌ๋ก ๋ณ๊ฒฝํด ๋ณด์ธ์. | |
- [ ] ์์ด ๋ฐ ์ผ๋ณธ์ด ํ ์คํธ ํ๋ก ํธ ์๋ ๊ฐ์ . | |
- [ ] ์์ ํฌ๊ธฐ์ ํฐ ํฌ๊ธฐ์ TTS ๋ชจ๋ธ ๊ฐ๋ฐ. | |
- [x] Colab ์คํฌ๋ฆฝํธ. | |
- [ ] ํ๋ จ ๋ฐ์ดํฐ์ ํ์ฅ (2k ์๊ฐ์์ 10k ์๊ฐ). | |
- [ ] ๋ ๋์ sovits ๊ธฐ๋ณธ ๋ชจ๋ธ (ํฅ์๋ ์ค๋์ค ํ์ง). | |
- [ ] ๋ชจ๋ธ ๋ธ๋ ๋ฉ. | |
## (์ถ๊ฐ์ ์ธ) ๋ช ๋ น์ค์์ ์คํํ๋ ๋ฐฉ๋ฒ | |
๋ช ๋ น์ค์ ์ฌ์ฉํ์ฌ UVR5์ฉ WebUI ์ด๊ธฐ | |
``` | |
python tools/uvr5/webui.py "<infer_device>" <is_half> <webui_port_uvr5> | |
``` | |
๋ธ๋ผ์ฐ์ ๋ฅผ ์ด ์ ์๋ ๊ฒฝ์ฐ UVR ์ฒ๋ฆฌ๋ฅผ ์ํด ์๋ ํ์์ ๋ฐ๋ฅด์ญ์์ค. ์ด๋ ์ค๋์ค ์ฒ๋ฆฌ๋ฅผ ์ํด mdxnet์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. | |
``` | |
python mdxnet.py --model --input_root --output_vocal --output_ins --agg_level --format --device --is_half_precision | |
``` | |
๋ช ๋ น์ค์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ธํธ์ ์ค๋์ค ๋ถํ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. | |
``` | |
python audio_slicer.py \ | |
--input_path "<path_to_original_audio_file_or_directory>" \ | |
--output_root "<directory_where_subdivided_audio_clips_will_be_saved>" \ | |
--threshold <volume_threshold> \ | |
--min_length <minimum_duration_of_each_subclip> \ | |
--min_interval <shortest_time_gap_between_adjacent_subclips> | |
--hop_size <step_size_for_computing_volume_curve> | |
``` | |
๋ช ๋ น์ค์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ธํธ ASR ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค(์ค๊ตญ์ด๋ง ํด๋น). | |
``` | |
python tools/asr/funasr_asr.py -i <input> -o <output> | |
``` | |
ASR ์ฒ๋ฆฌ๋ Faster_Whisper(์ค๊ตญ์ด๋ฅผ ์ ์ธํ ASR ๋งํน)๋ฅผ ํตํด ์ํ๋ฉ๋๋ค. | |
(์งํ๋ฅ ํ์์ค ์์, GPU ์ฑ๋ฅ์ผ๋ก ์ธํด ์๊ฐ ์ง์ฐ์ด ๋ฐ์ํ ์ ์์) | |
``` | |
python ./tools/asr/fasterwhisper_asr.py -i <input> -o <output> -l <language> | |
``` | |
์ฌ์ฉ์ ์ ์ ๋ชฉ๋ก ์ ์ฅ ๊ฒฝ๋ก๊ฐ ํ์ฑํ๋์์ต๋๋ค. | |
## ๊ฐ์ฌ์ ๋ง | |
๋ค์ ํ๋ก์ ํธ์ ๊ธฐ์ฌ์๋ค์๊ฒ ํน๋ณํ ๊ฐ์ฌ๋๋ฆฝ๋๋ค: | |
### ์ด๋ก ์ฐ๊ตฌ | |
- [ar-vits](https://github.com/innnky/ar-vits) | |
- [SoundStorm](https://github.com/yangdongchao/SoundStorm/tree/master/soundstorm/s1/AR) | |
- [vits](https://github.com/jaywalnut310/vits) | |
- [TransferTTS](https://github.com/hcy71o/TransferTTS/blob/master/models.py#L556) | |
- [contentvec](https://github.com/auspicious3000/contentvec/) | |
- [hifi-gan](https://github.com/jik876/hifi-gan) | |
- [fish-speech](https://github.com/fishaudio/fish-speech/blob/main/tools/llama/generate.py#L41) | |
### ์ฌ์ ํ์ต ๋ชจ๋ธ | |
- [Chinese Speech Pretrain](https://github.com/TencentGameMate/chinese_speech_pretrain) | |
- [Chinese-Roberta-WWM-Ext-Large](https://huggingface.co/hfl/chinese-roberta-wwm-ext-large) | |
### ์ถ๋ก ์ฉ ํ ์คํธ ํ๋ก ํธ์๋ | |
- [paddlespeech zh_normalization](https://github.com/PaddlePaddle/PaddleSpeech/tree/develop/paddlespeech/t2s/frontend/zh_normalization) | |
- [LangSegment](https://github.com/juntaosun/LangSegment) | |
### WebUI ๋๊ตฌ | |
- [ultimatevocalremovergui](https://github.com/Anjok07/ultimatevocalremovergui) | |
- [audio-slicer](https://github.com/openvpi/audio-slicer) | |
- [SubFix](https://github.com/cronrpc/SubFix) | |
- [FFmpeg](https://github.com/FFmpeg/FFmpeg) | |
- [gradio](https://github.com/gradio-app/gradio) | |
- [faster-whisper](https://github.com/SYSTRAN/faster-whisper) | |
- [FunASR](https://github.com/alibaba-damo-academy/FunASR) | |
## ๋ชจ๋ ๊ธฐ์ฌ์๋ค์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค ;) | |
<a href="https://github.com/RVC-Boss/GPT-SoVITS/graphs/contributors" target="_blank"> | |
<img src="https://contrib.rocks/image?repo=RVC-Boss/GPT-SoVITS" /> | |
</a> | |