AI

음성 합성 AI - OpenVoice 사용법

codens 2024. 4. 30. 04:24

AI 음성 복제

Instant voice cloning by MyShell. 
https://github.com/myshell-ai/OpenVoice


//-------------------------------------
< 설치 ( linux, wsl ubuntu ) >

$  conda create -n openvoice python=3.9
$  conda activate openvoice
$  git clone https://github.com/myshell-ai/OpenVoice
$  cd OpenVoice
$  pip install -e .


     - checkpoint 다운로드
$  wget https://myshell-public-repo-hosting.s3.amazonaws.com/openvoice/checkpoints_v2_0417.zip
$  unzip checkpoints_v2_0417.zip


    - MeloTTS 설치
$  pip install git+https://github.com/myshell-ai/MeloTTS.git
$  python -m unidic download



//-------------------------------------
추가 설치
$ sudo apt install ffmpeg

https://github.com/SamuraiT/mecab-python3
$  pip install mecab-python3 cutlet unidic-lite  unidic



//-------------------------------------
    - sample code
https://github.com/myshell-ai/OpenVoice/blob/main/demo_part3.ipynb

import os
import torch
from openvoice import se_extractor
from openvoice.api import ToneColorConverter

# -------------------------------------
ckpt_converter = 'checkpoints_v2/converter'
device = "cuda:0" if torch.cuda.is_available() else "cpu"
output_dir = 'outputs_v2'

tone_color_converter = ToneColorConverter(f'{ckpt_converter}/config.json', device=device)
tone_color_converter.load_ckpt(f'{ckpt_converter}/checkpoint.pth')

os.makedirs(output_dir, exist_ok=True)

# -------------------------------------
reference_speaker = 'resources/example_reference.mp3' # This is the voice you want to clone
reference_speaker = 'resources/chim1.mp3'
target_se, audio_name = se_extractor.get_se(reference_speaker, tone_color_converter, vad=False)

# -------------------------------------
from melo.api import TTS

""" texts = {
    'EN_NEWEST': "Did you ever hear a folk tale about a giant turtle?",  # The newest English base speaker model
    'EN': "Did you ever hear a folk tale about a giant turtle?",
    'ES': "El resplandor del sol acaricia las olas, pintando el cielo con una paleta deslumbrante.",
    'FR': "La lueur dorée du soleil caresse les vagues, peignant le ciel d'une palette éblouissante.",
    'ZH': "在这次vacation中,我们计划去Paris欣赏埃菲尔铁塔和卢浮宫的美景。",
    'JP': "彼は毎朝ジョギングをして体を健康に保っています。",
    'KR': "안녕하세요! 오늘은 날씨가 정말 좋네요.",
} """

texts = {
    'KR': "안녕하세요! 오늘은 날씨가 정말 좋네요.",
}

src_path = f'{output_dir}/tmp.wav'

# Speed is adjustable
speed = 1.0

for language, text in texts.items():
    model = TTS(language=language, device=device)
    speaker_ids = model.hps.data.spk2id
    
    for speaker_key in speaker_ids.keys():
        speaker_id = speaker_ids[speaker_key]
        speaker_key = speaker_key.lower().replace('_', '-')
        
        source_se = torch.load(f'checkpoints_v2/base_speakers/ses/{speaker_key}.pth', map_location=device)
        model.tts_to_file(text, speaker_id, src_path, speed=speed)
        save_path = f'{output_dir}/output_v2_{speaker_key}.wav'

        # Run the tone color converter
        encode_message = "@MyShell"
        tone_color_converter.convert(
            audio_src_path=src_path, 
            src_se=source_se, 
            tgt_se=target_se, 
            output_path=save_path,
            message=encode_message)



//-----------------------------------------------------------------------------
에러 처리

 

//-------------------------------------
- 에러 메시지
[ifs] no such file or directory: /home/ubuntu/anaconda3/envs/openvoice/lib/python3.9/site-packages/unidic/dicdir/mecabrc

 

    - 해결방법1
$ python -m unidic download

    - 해결방법2 : unidic_litedicdirunidic 폴더에 복사
$ cp /home/ubuntu/anaconda3/envs/openvoice/lib/python3.9/site-packages/unidic_lite/dicdir /home/ubuntu/anaconda3/envs/openvoice/lib/python3.9/site-packages/unidic


//-------------------------------------
- 에러 메시지
Could not load library libcudnn_cnn_infer.so.8. Error: libcudnn_cnn_infer.so.8: cannot open shared object file: No such file or directory
Please make sure libcudnn_cnn_infer.so.8 is in your library path!

     - 해결방법 : cuDNN 설치하거나 libcudnn_cnn_infer.so.8 파일이 있는데도 에러가 난다면 해당 경로 환경 설정
        https://codens.tistory.com/2784

 

libcudnn_cnn_infer.so.8 파일이 있는 경로가 가  /nvidia/cudnn/lib 인 경우

$ export LD_LIBRARY_PATH=/nvidia/cudnn/lib:$LD_LIBRARY_PATH

 

반응형