Skip to main content

프롬프트해커 대니의 최신 소식 구독하기!

위스퍼(Whisper) 음성인식 API 사용법 - 오디오를 텍스트로 변환하는 간단 가이드

음성 데이터를 텍스트로 변환하는 것은 여러 분야에서 유용하게 활용될 수 있습니다. 회의록 작성, 강의 녹음 내용 정리, 콜센터 상담 내용 분석 등 다양한 시나리오에서 음성인식 기술이 큰 도움이 됩니다. 이번 글에서는 OpenAI에서 공개한 Whisper API를 사용해 손쉽게 오디오를 텍스트로 변환하는 방법을 소개합니다.

Whisper API 소개

Whisper API 란?

Whisper는 OpenAI에서 개발한 오픈소스 음성인식 모델입니다. 98개 언어를 지원하며, 큰 데이터셋으로 사전학습되어 높은 정확도를 자랑합니다. OpenAI는 Whisper 모델을 바탕으로 음성-텍스트 변환 API를 제공하고 있습니다.

Whisper API의 주요 기능은 다음과 같습니다:

  • 오디오 파일을 입력받아 해당 언어로 텍스트 변환 (transcription)
  • 오디오 파일을 입력받아 영어로 번역하며 텍스트 변환 (translation)
  • 다양한 오디오 포맷 지원 (mp3, mp4, mpeg, mpga, m4a, wav, webm)
  • 파일 크기는 최대 25MB까지 허용

Whisper API 사용법

Whisper API를 사용하려면 OpenAI 계정이 필요합니다. 계정을 생성하고 API Key를 발급받은 후, OpenAI Python 라이브러리를 설치합니다. 아래 명령어로 라이브러리를 설치할 수 있습니다.

pip install openai

설치가 완료되 었다면 아래와 같은 사례의 코드를 작성하여 Whisper API를 사용할 수 있습니다.

텍스트 변환 (Transcription)

먼저 OpenAI 라이브러리를 설치하고 API Key를 발급받아 환경변수로 설정합니다. 그런 다음 아래와 같이 코드를 작성하면 오디오 파일을 해당 언어의 텍스트로 변환할 수 있습니다.

from openai import OpenAI
client = OpenAI()

audio_file= open("/path/to/file/audio.mp3", "rb")
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)
print(transcription.text)

결과는 기본적으로 JSON 형식으로 반환되며, raw text가 포함됩니다. response_format 옵션을 "text"로 설정하면 텍스트만 반환받을 수 있습니다.

번역 (Translation)

Whisper API는 입력된 오디오를 영어로 번역하는 기능도 제공합니다. 코드는 transcription과 유사하며, translations.create() 메소드를 사용합니다.

from openai import OpenAI
client = OpenAI()

audio_file= open("/path/to/file/german.mp3", "rb")
translation = client.audio.translations.create(
model="whisper-1",
file=audio_file
)
print(translation.text)

위 예시처럼 독일어 오디오를 입력하면 영어 텍스트로 변환된 결과를 얻을 수 있습니다. 현재는 영어로의 번역만 지원됩니다.

지원 언어

Whisper API는 전 세계 주요 언어들을 폭넓게 지원합니다. 한국어, 영어, 중국어, 일본어, 스페인어, 프랑스어, 독일어 등 98개 이상의 언어에 대해 음성인식이 가능합니다.

다만 공식적으로는 단어 오류율(WER) 50% 이하의 정확도를 보이는 언어들만 API에서 사용할 수 있도록 하고 있습니다. 지원 언어 목록에 없는 언어도 입력은 가능하지만 인식 품질은 보장되지 않습니다.

정확도 향상 팁

프롬프트 활용

Whisper는 프롬프트(prompt)를 통해 인식 정확도를 높일 수 있습니다. 프롬프트에 인식하고자 하는 단어나 문장의 스타일을 미리 제시해주면, 해당 패턴에 가깝게 변환을 시도합니다.

transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
prompt="ZyntriQix, Digique Plus, CynapseFive, VortiQore V8"
)

위 코드처럼 prompt 파라미터에 단어 사전을 넣어주면, 모호한 발음도 정확한 스펠링으로 변환해줍니다. 다만 프롬프트의 최대 길이는 224토큰으로 제한되어 있습니다.

GPT-4를 활용한 후처리

변환 결과 텍스트를 GPT-4 모델에 입력해 한번 더 교정하는 방법도 있습니다. GPT-4의 강력한 언어 이해 능력을 활용해 문맥에 맞게 단어를 교정하고 문장을 다듬을 수 있습니다.

def generate_corrected_transcript(temperature, system_prompt, audio_file):    
response = client.chat.completions.create(
model="gpt-4",
temperature=temperature,
messages=[
{
"role": "system",
"content": system_prompt
},
{
"role": "user",
"content": transcribe(audio_file, "")
}
]
)

return completion.choices[0].message.content

corrected_text = generate_corrected_transcript(0, system_prompt, audio_file)

system_prompt를 통해 GPT-4가 어떤 방식으로 텍스트를 교정할지 가이드라인을 제시할 수 있습니다. GPT-4의 콘텍스트 윈도우 크기가 Whisper보다 크기 때문에 더 많은 정보를 활용할 수 있습니다.

긴 입력 값 처리

기본적으로 Whisper API는 25MB 미만의 파일만 지원합니다. 이보다 더 큰 오디오 파일이 있는 경우 25MB 이하의 청크로 나누거나 압축된 오디오 포맷을 사용해야 합니다. 최상의 성능을 얻기 위해서는 문장 중간에 오디오를 나누지 않도록 권장합니다. 문장 중간에 나누면 일부 문맥이 손실될 수 있습니다.

이를 처리하는 한 가지 방법은 PyDub 오픈 소스 Python 패키지를 사용하여 오디오를 분할하는 것입니다:

from pydub import AudioSegment

song = AudioSegment.from_mp3("good_morning.mp3")

# PyDub은 시간을 밀리초로 처리합니다.
ten_minutes = 10 * 60 * 1000

first_10_minutes = song[:ten_minutes]

first_10_minutes.export("good_morning_10.mp3", format="mp3")

결론

Whisper API를 사용하면 음성 데이터를 손쉽게 텍스트화하고 언어 장벽을 낮출 수 있습니다. 다양한 오디오 포맷과 언어를 지원하며, 사전학습된 강력한 음성인식 모델을 바탕으로 높은 인식률을 보장합니다.

음성 기반 서비스를 개발 중이거나, 음성 데이터 분석이 필요한 경우 Whisper API를 적극 활용해보시기 바랍니다. 코드 예제를 참고하여 쉽게 구현할 수 있으며, 프롬프트와 GPT-4를 활용한 팁도 참고하시면 더욱 쾌적한 경험을 얻을 수 있을 것입니다.

OpenAI Whisper API 공식 문서에서 구체적인 API 사용법을 확인할 수 있습니다.