LLM

OpenAI Key를 활용한 STT, TTS 호출

hyeeein 2024. 8. 8. 15:33

Chat Completions와 동일하게 API를 호출하고 시작한다.

 

1. STT (Speech-to-Text) 음성 인식 기술

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)로 텍스트를 말하는 녹음본이 저장된다.