커스텀 TTS 구현하기 - Tortoise tts를 활용하여

ksmedarl·2023년 5월 26일
1
post-thumbnail

들어가며

'아이들을 대상으로 한 동화책 tts 서비스'라는 주제로 졸업 프로젝트를 진행하고 있다. 나는 프로젝트의 뼈대가 되는 tts 기반의 여러 기술의 개발을 맡게 되었다. 우리에게 주어진 과제는 크게 세 가지이다.

- 매끄럽고 자연스러운 tts
- 내용에 따른 플로우 조절
- 감정에 따른 음성의 높낮이 조절

이들 중 가장 중심이 되는 마더기술은 당연 tts이다. 우리 팀은 1, 다양한 목소리 별로 다수의 음성 자료를 수집하기 힘들다 2, 이미 존재하는 수많은 라이브러리들을 활용하지 않을 이유가 없다 는 두 가지 사유로 기존 존재하는 tts 라이브러리 및 api를 활용하여 토대가 되는 tts를 개발하기로 결정하였다.

본격적으로 프로젝트를 진행하기 전에 tortoise tts 라이브러리를 사용하여 tts 모델 구현을 테스트해보고자 한다.

레퍼런스

Tortoise tts란?

이러한 기능의 Tortoise-tts를 사용하여 1. tts 파일 생성 2. 내 목소리로 이루어진 커스텀 tts 생성 두 가지를 진행해보고자 한다.

Tortoise-tts의 readme와 아래 두 영상을 참고하며 공부를 진행하였다.

Tortoise-TTS
PC에 비율 AI 복제 TTS 코팅기
Run Tortoise-TTS On Your Local Computer

시작하기 전

현재 사용하는 기기에서 제대로 된 코딩을 하는 것이 처음이었기에 git 연결부터 진행했다.

위와 같이 git 버전 확인 후, 기존에 사용하던 계정과 연동하였으며 공부를 위한 폴더를 새로 생성하여 initialize 해주었다.

multi-speaker-tacotron-tensorflow
개발을 위하여 위 git 링크를 해당 폴더에 pull 해왔고,

기존에 기기에 설치되어 있던 Python은 2.7.18 버전이었기에 Python3를 새로 설치했다.가장 최신 버전인 3.11.3을 설치하였다.성공적으로 설치 된 것을 확인!
(이후 3.9 버전으로 다운그레이드해주었다.)

기초 환경설정🤯

Tortoise-tts 리드미에 적힌대로 기본환경을 구축해준다.

Conda부터 설치해주었다. 패키지 버전 관리에 용이해 사용되는 듯 하다.
(best choice for your virtual environment assistent tool라고 한다...)

Conda

나는 miniconda를 설치해주었으며 위 링크를 통해 다운받을 수 있다. 터미널에 'conda list'라고 쳤을 때 위 사진처럼 알 수 없는 리스트가 주르륵 뜬다면 성공적으로 설치가 완료된 것이다.

git init
git clone https://github.com/neonbjb/tortoise-tts.git
cd tortoise-tts

원하는 폴더에 레포지토리 클론을 진행해준다.

이제 가상환경을 설정해준 뒤 필요한 패키지들과 모듈을 설치해줄 차례.

conda create -n tortoise python=3.11

-n 뒤에는 본인이 설정하고픈 이름을 임의로 작성해주면 된다. 나는 tortoise로 설정. python 뒤엔 현재 사용하는 python 버전을 적어주면 되는데, tortoise는 python 3.6 이상부터 사용이 가능하다. 가상환경까지 설정완료
터미널 창에 떴듯이, conda activate tortoise를 입력하여 base에서 tortoise로 이동한다. 지금부터 다운받는 모든 패키지 및 모듈은 tortoise환경에 설치된다.

그 다음, Pytorch 역시 설치해준다.
Start Locally | Pytorch
Pytorch 설치는 이곳에서
본인의 환경에 맞게 선택해준다. 나는 위와 같이 선택.
하단에 적힌 command를 터미널에서 실행한다. Pytorch까지 설치 완료!

이제 마지막으로 요구되는 모듈들을 설치 할 차례이다. Tortoise의 requirements.txt 파일을 열어 보면 어떤 모듈을 어떠한 버전으로 필요로하는지 알 수 있다. 버전 일치는 굉장히 중요하기에(conflict 발생하기에 최고 쉬움,,) 이에 유의하도록 하자말은 이렇게 장황하게 했지만 사실 우리는 이 한 줄만 터미널 창에 적어주면 된다.

python -m pip install -r ./requirements.txt

나의 경우에는 다음과 같은 오류가 발생하여 일일히 모듈을 하나씩 설치해주었다. 버전 다운그레이드 등 이 한 줄을 해결하기 위해 몇 시간을 쏟았으나...결국 노가다로 해결하게 된 오류(사실 몇몇 버전이 맞지 않는다. 이걸 해결이라 할 수 있나 싶지만 conflict가 발생할지 안할지 모르니 일단은 넘어간다.)

python setup.py install

setup.py까지 설치한다면 정말 기본 환경설정 끝

샘플 음성 생성🥲

simple test

기본 환경설정이 완료됐다면 이제 샘플 음성을 생성해보자!

python tortoise/do_tts.py --text "I'm going to speak this" --voice random --preset fast

터미널에 위 코드를 입력하면 tortoise에 기본 내장 돼 있는 목소리 중 랜덤으로 세 가지를 선택하여 샘플 음성을 생성한다. 텍스트는 임의로 변형하여 작성 가능하다. 나의 경우 우선 리드미에 작성된 그대로 I'm going to speak this를 사용해봤다. 결과물을 도출하기까지 상당한 시간이 걸린다.

결과물은 result 파일 내부에서 확인할 수 있다. 나의 경우 남성 두 명과 여성 한 명의 목소리로 이루어진 tts 파일이 완성됐다.

read text file

이번에는 코드로 읽어줄 텍스트를 입력하는 것이 아닌, txt 파일에 내용을 담아 tts를 생성해보고자 한다. 긴 양의 텍스트를 읽어줘야 할 때 사용하기 용이하다.


위 사진과 같이 작성한 speech.txt 파일을 tortoise-tts 폴더 내부에 저장해준다.

python tortoise/read.py --textfile speech--voice justamoment

위 코드를 사용하여 txt 파일을 읽어주는 tts 파일을 생성할 수 있다. 먼저 이루어진 테스트에서는 random한 목소리를 사용했기에 '--voice random'이라 적어주었지만 임의의 목소리를 사용하여 생성하고 싶다면 '--voice <목소리 데이터가 담긴 폴더명>'으로 수정한 코드를 사용하면 된다.

예를 들어, 나의 목소리 데이터셋이 담긴 'justamoment' 폴더를 생성해준다면 위 코드를 사용하여 내 목소리로 된 tts 파일을 생성할 수 있다.

내 목소리로 커스텀 tts 생성하기

본인의 목소리 혹은 원하는 목소리로 tts를 커스텀하고 싶다면 다음과 같은 과정을 따라야 한다.

  1. 10초 이상 분량이 되는 오디오 파일을 최소 3개 이상 준비
  2. 데이터의 개수는 많을수록 좋으며
  3. WAV 파일이어야 한다.
  4. 무조건 22,050HZ에 맞춰져 있어야 한다.

이러한 데이터셋을 원하는 이름의 폴더에 넣어준 뒤 위와 같은 코드를 작성하면 커스텀 tts가 생성된다.

파일 생성까지 아주아주 긴 시간이 걸린다.
longform 음성파일까지 생성 완료!
위 코드를 실행하면 result 폴더 내부에 longform 폴더가 새로 생성되며, 해당 폴더에서 longform tts result를 확인할 수 있다.
이렇게 내 목소리로 이루어진 tts가 완성되었다.

그 외 코드 옵션

python tortoise/do_tts.py --text "I'm going to speak this" --voice random --preset fast

preset 부분에 적용할 수 있는 옵션이 총 네 가지 존재한다.
'ultra_fast', 'fast', 'standard', 'high_quality'
이는 tts 파일 생성 속도와 퀄리티를 조절하는 옵션인데, 나는 두 번 모두 fast를 사용했다. High_quality 옵션은 해당 라이브러리 개발자 조차도 굳이 추천하지 않는 듯 했다. fast 옵션 만으로도 괜찮은 결과물을 얻어낼 수 있다.

마무리하며

위와 같은 과정을 거치면서, 기본적인 tts 구조와 개발 환경에 대한 이해를 얻을 수 있었다. 내가 생성한 건 아주 기초적인 단계의 모델이지만, 이를 구체화하고 코드를 수정하며 우리 팀이 tts 모델 생성에 사용하고자 하는 Tensorflow와 결합하고 적용한다면 꽤나 그럴듯한 결과물을 도출해낼 수 있을 것 같다는 생각이 들었다.

아직 우리 팀에게 남은 숙제는 너무나도 많지만 시작이 반이라는 생각과 함께 늦장부리지 않고 성실히 남은 기간동안 프로젝트를 진행해보고자 한다.

파면 팔수록 공부할 것들이 산더미처럼 나오는 분야이지만, 그렇기에 더욱 재밌는게 아닐까?

profile
존중하며 버티기

2개의 댓글

comment-user-thumbnail
2023년 6월 4일

잘 읽었어요~

답글 달기
comment-user-thumbnail
2024년 1월 20일

혹시 deepspeed 패키지 도 설치하셨나요?

답글 달기

관련 채용 정보