728x90
반응형
Whisper 모델로 음성을 텍스트로 변환하기
음성을 텍스트로 변환하는 기술, 즉 음성 인식(Speech Recognition)은 인공지능 분야에서 꾸준히 발전해 왔습니다. 그 중에서도 OpenAI에서 개발한 Whisper 모델은 최근 주목받고 있는 강력한 도구입니다.
Whisper 모델이란?
Whisper는 OpenAI에서 2022년 9월에 공개한 오픈소스 음성 인식 모델입니다. 이 모델은 다음과 같은 특징을 가지고 있습니다:
- 다국어 지원: 영어뿐만 아니라 한국어를 포함한 다양한 언어를 인식할 수 있습니다.
- 강력한 성능: 노이즈가 있는 환경에서도 우수한 인식 성능을 보여줍니다.
- 다목적성: 음성 인식, 번역, 언어 식별 등 다양한 작업을 수행할 수 있습니다.
- 오픈소스: 누구나 자유롭게 사용하고 개선할 수 있습니다.
애플리케이션 구현하기
이제 실제로 애플리케이션을 구현해 보겠습니다. 먼저, 필요한 라이브러리를 설치해야 합니다.
라이브러리 설치
다음 명령어를 사용하여 필요한 라이브러리를 설치합니다:
pip install streamlit torch transformers pydub moviepy
전체 코드
다음은 애플리케이션의 전체 코드입니다. 이 코드를 app.py
파일에 저장합니다.
import os
import streamlit as st
import torch
from transformers import WhisperForConditionalGeneration, WhisperProcessor, pipeline
from pydub import AudioSegment
from moviepy.editor import VideoFileClip
import tempfile
import io
# 모델 관련 상수
MODEL_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'models', 'whisper-large-v3')
MODEL_ID = "openai/whisper-large-v3"
@st.cache_resource
def load_model():
"""모델 로드 함수"""
try:
model = WhisperForConditionalGeneration.from_pretrained(MODEL_PATH, local_files_only=True)
processor = WhisperProcessor.from_pretrained(MODEL_PATH, local_files_only=True)
st.success("로컬에서 모델을 로드했습니다.")
except Exception as e:
st.warning(f"로컬 모델 로드 실패: {e}. Hugging Face에서 모델을 다운로드합니다.")
model = WhisperForConditionalGeneration.from_pretrained(MODEL_ID)
processor = WhisperProcessor.from_pretrained(MODEL_ID)
os.makedirs(os.path.dirname(MODEL_PATH), exist_ok=True)
model.save_pretrained(MODEL_PATH)
processor.save_pretrained(MODEL_PATH)
st.success(f"모델을 {MODEL_PATH}에 저장했습니다.")
return model, processor
def process_audio(file, file_type):
"""오디오 파일 처리 함수"""
temp_wav = tempfile.NamedTemporaryFile(delete=False, suffix='.wav')
temp_wav_path = temp_wav.name
try:
if file_type == 'wav':
# WAV 파일 내용을 직접 읽고 씁니다
temp_wav.write(file.getvalue())
temp_wav.flush()
elif file_type == 'mp3':
audio = AudioSegment.from_mp3(io.BytesIO(file.getvalue()))
audio.export(temp_wav_path, format="wav")
elif file_type == 'mp4':
with tempfile.NamedTemporaryFile(delete=False, suffix='.mp4') as temp_video:
temp_video.write(file.getvalue())
temp_video.flush()
video = VideoFileClip(temp_video.name)
video.audio.write_audiofile(temp_wav_path, verbose=False, logger=None)
video.close()
os.unlink(temp_video.name)
finally:
temp_wav.close()
return temp_wav_path
def run_stt(model, processor, wav_file):
"""STT 실행 함수"""
pipe = pipeline(
"automatic-speech-recognition",
model=model,
tokenizer=processor.tokenizer,
feature_extractor=processor.feature_extractor,
chunk_length_s=30,
device=torch.device("cuda" if torch.cuda.is_available() else "cpu")
)
return pipe(wav_file, batch_size=8)["text"]
# Streamlit 앱 시작
st.title("음성을 텍스트로 변환 (STT)")
model, processor = load_model()
uploaded_file = st.file_uploader("오디오 파일 선택 (WAV, MP3 또는 MP4)", type=['wav', 'mp3', 'mp4'])
if uploaded_file:
file_type = uploaded_file.name.split('.')[-1].lower()
if file_type in ['wav', 'mp3']:
st.audio(uploaded_file, format=f'audio/{file_type}')
elif file_type == 'mp4':
st.video(uploaded_file, format='video/mp4')
if st.button("텍스트로 변환"):
with st.spinner("오디오 처리 및 변환 중..."):
wav_file = process_audio(uploaded_file, file_type)
result = run_stt(model, processor, wav_file)
st.success("변환 완료!")
st.write(result)
os.remove(wav_file)
st.markdown("---")
st.write("이 앱은 OpenAI의 Whisper 모델을 사용합니다.")
애플리케이션 실행하기
코드를 저장한 후, 다음 명령어로 애플리케이션을 실행합니다:
streamlit run app.py
브라우저에서 로컬 URL(보통 http://localhost:8501)을 열면 애플리케이션을 사용할 수 있습니다.
이러한 음성-텍스트 변환 기술은 다양한 분야에서 활용될 수 있습니다: Whisper 모델과 같은 강력한 AI 도구들이 계속해서 발전함에 따라, 우리의 일상 생활과 업무 환경은 더욱 편리해질 것입니다. 음성 인식 기술에 관심이 있으시다면, 다음의 링크들을 참고해 보시기 바랍니다:
728x90
반응형
'언어모델 LLM > 모델 및 프레임워크' 카테고리의 다른 글
Gemma2 모델을 Ollama와 Streamlit으로 테스트하기 (0) | 2024.07.20 |
---|---|
한국어 잘하는 로컬모델로 챗봇 만들기 (1) | 2024.07.20 |
oneMinTTS: 오픈소스 음성 합성 프로젝트 소개 (0) | 2024.07.09 |
Piper TTS: 설치 및 사용 가이드 (0) | 2024.07.08 |
'24년 7월 현재 ollama 모델 리스트 (0) | 2024.07.06 |