LLM
OpenAI Key를 활용한 STT, TTS 호출
hyeeein
2024. 8. 8. 15:33
Chat Completions와 동일하게 API를 호출하고 시작한다.
1. STT (Speech-to-Text) 음성 인식 기술
- 인식에 사용할 언어와 음성 데이터를 입력받고 그에 맞는 인식 결과를 텍스트로 반환
- Audio API는 Whisper 모델을 transcriptions 기반으로 하는 두 개의 음성, 텍스트 엔드포인트 제공
- Whisper 범용 음성 인식 모델. 다양한 오디오로 구성된 대규모 데이터셋을 학습하고 다국어 음성 인식은 물론 음성 번역과 언어 식별까지 수행할 수 있는 멀티태스크 모델
- 파일 크기 제한: 25MB
- OpenAI 가이드
from openai import OpenAI
client = OpenAI()
# 오디오를 지정한 언어 텍스트로 변환
# umbrella는 셀프로 녹음한 녹음본 (~ 사는 사람인데 내일 우산을 가져가야 할까?)
audio_file= open("./sample/umbrella.mp3", "rb")
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
prompt='안녕 빼줘', # 말을 안 듣는데 ...?
temperature=0.2,
response_format="text"
)
transcription의 파라미터 값의 의미는 다음과 같다.
- file : 오디오 파일 (다음 형식으로 반환 mp3, aac, ac3, ogg, flac, wav, webm)
- model : 사용할 모델 아이디
- prompt : 모델에게 원하는 스타일을 가이드해 줄 수 있는 선택적인 텍스트 (단, 영어로 써야 함)
- response_format : 응답 형식 (json, text, srt, verbose_json, vtt)
- temperature : 0과 1 사이. 높은 값은 더 무작위로 만들고 낮은 값은 더 집중적이고 결정적으로 만듦. 0으로 설정하면 로그 확률로 특정 임계값에 도달할 때까지 온도 자동 증가
# GPT가 대답까지 하게 하기
gpt_assistant_prompt = input ("프롬프트 설정해 주세요:")
gpt_user_prompt = transcription
gpt_prompt = gpt_assistant_prompt, gpt_user_prompt
message=[{"role": "user", "content": gpt_assistant_prompt},
{"role": "user", "content": gpt_user_prompt}]
temperature=0.2
max_tokens=1024
frequency_penalty=0.0
response = client.chat.completions.create(
model="gpt-4-1106-preview", #4.0-Turbo
messages = message,
temperature=temperature,
max_tokens=max_tokens,
frequency_penalty=frequency_penalty,
)
print(response.choices[0].message.content)
출력 예시와 print 결과는 다음과 같다.
'''
출력 예시 (response_format 지정 안했을 때)
Transcription(text='안녕, 경기도 고양에 사는 사람이야. 내일 우산을 가지고 나가야 할까?')
print 결과
죄송합니다만, 저는 실시간 날씨 정보를 제공할 수 없습니다. 내일 경기도 고양의 날씨를 알고 싶다면,
가장 최신의 날씨 예보를 확인하기 위해 인터넷 검색을 하거나, 날씨 앱을 사용하거나, 현지 뉴스를 참조
하시는 것이 좋습니다. 날씨 예보는 시간에 따라 변할 수 있으므로, 계획을 세우기 전에 가장 최근의 정보를
확인하는 것이 중요합니다.
'''
2. TTS (Text-to-Speech) 음성 변환 기술
- 텍스트를 입력하면 음성으로 변환하여 출력시켜주는 기술
- TTS-1 실시간 텍스트 음성 사용 사례에 최적화, TTS-1-hd는 품질에 최적화되어 있음.
- 사용 예시: alloy "작성된 블로그 게시물을 설명하세요", "여러 언어로 음성 오디오 생성해보세요"
- OpenAI 가이드: https://platform.openai.com/docs/guides/text-to-speech
response 안에 들어가는 파라미터 값들은 아래 중 선택하여 지정할 수 있다.
- voice (원하는 목소리 선택 가능) : alloy, echo, fable, onyx, nova, shimmer
- 출력 형식 : mp3, opus(인터넷 스트리밍용), aac(유튜브, 안드로이드, iOS), wav(비디오), pcm(wav+원시샘플 포함)
- 지원 언어 : 가이드 내 'Supported languages' 참고 => 내가 테스트 할 것은 Chinese, English, Korean, Jananese
from openai import OpenAI
client = OpenAI()
# 입력 텍스트에서 음성 오디오 생성
# speech_file_path = './sample/chinese_alloy.mp3'
# speech_file_path = './sample/english_echo.mp3'
# speech_file_path = './sample/korean_fable.mp3'
speech_file_path = './sample/korean_nova.mp3'
# speech_file_path = './sample/eng_kor_jap_onyx.mp3'
chinese = '我听见雨滴落在青青草地 我听见远方下课钟声响起 可是我没有听见你的声音 认真 呼唤我姓名'
english = 'Ya dont you know how sweet it tastes how sweet it tastes'
korean = '사건은 다가와 아 오 에이 거세게 커져가 아 오 에이 댓 틱 댓 틱 틱 범 댓 틱 댓 틱 틱 범'
eng_kor_jap = 'I dont wanna weve done 되돌아 가기 싫어 もう知っている '
response = client.audio.speech.create(
model="tts-1",
voice="echo",
# input=chinese
# input=english
input=korean
# input=eng_kor_jap
)
response.stream_to_file(speech_file_path)
이렇게 하면, 지정한 폴더(sample)로 텍스트를 말하는 녹음본이 저장된다.