TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 Gen AI>

[Gen AI] 음성 변환 기술 구현해보기(STT, TTS)

by 기록자_Recordian 2024. 12. 19.
728x90
반응형
이전 내용
 

[Gen AI] 그라디오 챗봇 업그레이드

그라디오로 제작한 챗봇 시리즈 [Gen AI] 그라디오로 챗봇 제작하기 - 1 (상담봇)이전 내용 [Gen AI] 그라디오(Gradio)이전 내용 [Gen AI] OpenAI API 사용해보기 (로컬, 주피터노트북)이전 내용 [Gen AI] OpenA

puppy-foot-it.tistory.com


위스퍼(Whisper) 설치

 

Whisper AI는 OpenAI가 개발한 강력한 음성 인식 모델이다. 다양한 오디오로 구성된 대규모 데이터셋을 학습하고 다국어 음성 인식은 물론 음성 번역과 언어 식별까지 수행할 수 있는 멀티태스크 모델이다. 이 모델을 사용하려면 whisper 라이브러리를 설치해야 한다. 필자의 경우, anaconda prompt(+가상환경)를 통해 설치하고자 한다.

 

1. PyTorch 설치
Whisper 모델은 PyTorch를 필요로 한다. 다음 명령어를 입력하여 적절한 버전의 PyTorch를 설치한다.

#CUDA를 지원하는 GPU가 있는 경우:
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
#CUDA가 없거나 CPU 버전을 설치하려는 경우:
conda install pytorch torchvision torchaudio cpuonly -c pytorch

 

2. Whisper 설치
whisper 라이브러리를 설치한다. Whisper는 pip를 통해 설치할 수 있다.

pip install git+https://github.com/openai/whisper.git 
# 또는
pip install openai-whisper

 

3. FFmpeg 설치
Whisper는 FFmpeg를 필요로 한다.

conda install -c conda-forge ffmpeg

※ FFmpeg란? (출처: 위키백과)

FFmpeg은 디지털 음성 스트림과 영상 스트림에 대해서 다양한 종류의 형태로 기록하고 변환하는 컴퓨터 프로그램이다. FFmpeg은 명령어를 직접 입력하는 방식으로 동작하며 여러 가지 자유 소프트웨어와 오픈 소스 라이브러리로 구성되어 있다. 이 프로젝트의 이름은 MPEG 영상 표준화 그룹에서 유래했고, "mpeg" 앞에 붙은 "FF"는 패스트 포워드(fast forward)를 의미한다.
FFmpeg은 리눅스 기반으로 개발되었지만, 애플, 윈도우, 아미가OS 등 대부분의 운영 체제에서 컴파일이 가능하다.

 

4. 설치 확인
다음 명령어를 통해 Whisper가 제대로 설치되었는지 확인한다

python -c "import whisper; model = whisper.load_model('base'); print('Whisper 설치 성공')"

이 명령어를 실행하면 Whisper 모델을 로드하고 "Whisper 설치 성공"이라는 메시지를 출력한다.

 

이제 주피터 노트북을 실행하고, 새로운 셀을 만든 후 API 키를 로드하고 위스퍼를 실행해본다.

먼저, 음성을 텍스트로 변환하기 위해 하단의 사이트에서 음성 파일을 먼저 만들었다.

https://ttsmaker.com/ko


위스퍼로 음성 변환 기술 구현해보기
STT(Speech to Text)

 

audio transcriptions 를 활용해 텍스트로 변환 가능하다.

import os
import openai

# 환경변수에서 OpenAI API 키를 읽어옴.
openai_api_key = os.getenv('OPENAI_API_KEY')

# API 키가 환경변수에 설정되어 있는지 확인.
if not openai_api_key:
    raise ValueError("환경변수 'OPENAI_API_KEY'가 설정되지 않았습니다.")

# OpenAI API 키를 설정.
openai.api_key = openai_api_key

# OpenAI 클라이언트를 생성.
client = openai.OpenAI()

speech_output_path="./roller_voice.mp3"

audio_file = open(speech_output_path, "rb")
transcript=client.audio.transcriptions.create(
    model="whisper-1",
    file=audio_file
)
print(transcript.text)

▶ 먼저 Openai 키를 설정한 후 client.audio.transcriptions.create() 객체를 생성하게 된다. 이때 모델을 model="whisper-1"과 같이 설정해 주어야 한다. file도 설정하여 음성을 손쉽게 텍스트로 변환할 수 있다.

 

◆ 위스퍼 모델 직접 실행

위스퍼 모델을 직접 실행할 수도 있다.

이를 위해선 먼저 transformers 를 설치해줘야 한다.

pip install transformers

 

import torch
from transformers import pipeline, WhisperProcessor, WhisperForConditionalGeneration

device="cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "openai/whisper-large-v2"
model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-large-v2")
model.config.forced_decoder_ids = None
model.to(device)
processor = WhisperProcessor.from_pretrained(model_id)

pipe = pipeline(
    "automatic-speech-recognition",
    model=model,
    tokenizer=processor.tokenizer,
    feature_extractor=processor.feature_extractor,
    max_new_tokens=128,
    chunk_length_s=30,
    batch_size=16,
    return_timestamps=True,
    torch_dtype=torch_dtype,
    device=device,
)
# 파일 변환
speech_output_path="./roller_voice.mp3"
result_openai = pipe(speech_output_path)
print(result_openai["text"])

음성 번역도 가능하다.

result_trans = pipe(speech_output_path, generate_kwargs={"task":"translate"})
print(result_trans)

 

[참고하면 좋은 사이트]

https://huggingface.co/openai/whisper-large-v2

 

openai/whisper-large-v2 · Hugging Face

Whisper Whisper is a pre-trained model for automatic speech recognition (ASR) and speech translation. Trained on 680k hours of labelled data, Whisper models demonstrate a strong ability to generalise to many datasets and domains without the need for fine-t

huggingface.co


TTS(Text to Speech)

 

텍스트를 음성으로 변환할 때 대표적으로 활용 가능한 것은 구글의 gtts와 Openai의 TTS 변환 기술, 네이버 클로바의 API가 있다. 여기서는 gtts와 Openai의 TTS를 활용해 본다.

 

◆ gTTS(Google Text to Speech)

구글에서 제공하는 모듈로, 텍스트를 기반으로 음성 파일로 변환할 수 있다.

먼저 gTTS를 설치해야 한다 (필자의 경우는 anaconda prompt + 가상 환경)

pip install gTTS

 

gTTS에 메시지와 lang을 지정해 준다. (한국어의 경우 'ko') 생성된 tts 객체를 저장하여 음성 파일로 쉽게 변환할 수 있다.

from gtts import gTTS

message = "안녕하세요, 오늘부터 영하 10도의 추운 겨울이 시작된대요. 감기 조심하세요."
tts = gTTS(message, lang="ko")
speech_output_path="./gtts_output.mp3"
tts.save(speech_output_path)

저장 경로로 설정한 폴더에 'gtts_output.mp3' 파일이 생성되었다.

 

★ 파이썬에서 음성 파일을 재생하려면 IPython을 이용하면 된다.

먼저 anaconda prompt에서 IPython을 설치하고, 주피터노트북에서 모듈을 import 한다.

pip install ipython
from IPython.display import Audio, display
audio_widget = Audio(speech_output_path)
display(audio_widget)


◆ OpenAI TTS 모델

OpenAI 에서도 TTS API의 형태로 제공하고 있다. 유료이긴 하나, 보이스 형태를 여러 가지로 지정할 수 있다.

https://platform.openai.com/docs/guides/text-to-speech

import os
import openai

# 환경변수에서 OpenAI API 키를 읽어옴.
openai_api_key = os.getenv('OPENAI_API_KEY')

# API 키가 환경변수에 설정되어 있는지 확인.
if not openai_api_key:
    raise ValueError("환경변수 'OPENAI_API_KEY'가 설정되지 않았습니다.")

# OpenAI API 키를 설정.
openai.api_key = openai_api_key

# OpenAI 클라이언트를 생성.
client = openai.OpenAI()

message = "추운 겨울 감기 조심하세요! 메리 크리스마스~"

response = client.audio.speech.create(
    model="tts-1",
    voice="fable",
    input=message,
)
speech_out_path="./openai_tts_output.mp3"
with open(speech_out_path, "wb") as audio_file:
    audio_file.write(response.content)

지정한 경로에 mp3 파일이 생성되었다.

 

마찬가지로, IPython을 통해 재생해본다.

 


다음 내용

 

[Gen AI] 문서 요약 프롬프트 제작

이전 내용 [Gen AI] 음성 변환 기술 구현해보기(STT, TTS)이전 내용 [Gen AI] 그라디오 챗봇 업그레이드그라디오로 제작한 챗봇 시리즈 [Gen AI] 그라디오로 챗봇 제작하기 - 1 (상담봇)이전 내용 [Gen AI]

puppy-foot-it.tistory.com


[출처]

Hey, 파이썬! 생성형 AI 활용 앱 만들어줘

생성 AI 활용기: 챗GPT(ChatGPT)로 이런 일도 할 수 있다

위키백과

허깅페이스 홈페이지

OpenAI 홈페이지

728x90
반응형