오늘은 Python을 사용해서 오디오 파일을 텍스트로 변환하는 방법에 대해 알아보려고 합니다. 음성 인식 기술은 요즘 다양한 분야에서 활용되고 있는데요, 저희도 한번 직접 구현해보는 시간을 가져보도록 하겠습니다. 특히 긴 오디오 파일을 처리하는 방법에 대해서도 살펴볼게요.
사용한 라이브러리
먼저, 음성 인식을 위해 필요한 몇 가지 라이브러리를 설치해야 해요. 아래 명령어로 필요한 라이브러리를 설치할 수 있습니다.
pip install SpeechRecognition pydub
pip install pyaudio
- SpeechRecognition: 이 라이브러리는 음성을 텍스트로 변환해주는 기능을 제공해요. 다양한 음성 인식 엔진과 API를 사용할 수 있어요.
- pydub: 오디오 파일을 쉽게 다룰 수 있도록 도와주는 라이브러리입니다. 파일 형식을 변환하거나, 오디오를 조각내는 등 다양한 작업을 할 수 있어요.
- PyAudio: 오디오 데이터 처리를 위한 라이브러리입니다. 이 라이브러리는 마이크 입력을 받아들이거나 오디오 데이터를 처리하는 데 필요합니다.
코드 설명
자, 이제 본격적으로 코드를 살펴보겠습니다. 아래 코드는 오디오 파일을 불러와서 텍스트로 변환하는 과정을 보여줍니다.
import speech_recognition as sr
from pydub import AudioSegment
from pydub.silence import split_on_silence
# 파일 경로 설정
audio_file_path = "second.m4a"
wav_file_path = "converted_audio.wav"
# 오디오 파일 변환 (m4a -> wav)
audio = AudioSegment.from_file(audio_file_path, format="m4a")
# 오디오 정규화
audio = audio.normalize()
# 오디오 증폭
audio += 6 # 6dB 증폭, 필요에 따라 조정 가능
audio.export(wav_file_path, format="wav")
# 음성 인식 초기화
recognizer = sr.Recognizer()
# 오디오 파일을 로드
audio = AudioSegment.from_wav(wav_file_path)
# 오디오 파일을 일정한 길이로 조각
chunks = split_on_silence(
audio,
min_silence_len=500, # 최소 침묵 길이 (500ms)
silence_thresh=-40, # 침묵 임계값
keep_silence=250 # 각 조각의 앞뒤에 남겨둘 침묵 길이
)
# 각 조각에 대해 음성 인식 수행
full_text = ""
for i, chunk in enumerate(chunks):
# 10ms의 침묵 추가
chunk_silent = AudioSegment.silent(duration=10)
audio_chunk = chunk_silent + chunk + chunk_silent
audio_chunk.export(f"chunk_{i}.wav", format="wav")
with sr.AudioFile(f"chunk_{i}.wav") as source:
recognizer.adjust_for_ambient_noise(source, duration=0.5) # 소음 조정 시간 증가
audio_data = recognizer.record(source)
# 음성 인식 재시도 로직
success = False
retry_count = 3
for attempt in range(retry_count):
try:
# 한국어 인식 설정
text = recognizer.recognize_google(audio_data, language='ko-KR')
full_text += text + " "
success = True
break
except sr.UnknownValueError:
print(f"오디오를 인식할 수 없습니다: chunk {i}")
break
except sr.RequestError as e:
print(f"Google Web Speech API 요청 중 오류 발생 (재시도 {attempt + 1}/{retry_count}): {e}")
if not success:
print(f"오디오 조각 {i} 변환 실패")
print("변환된 텍스트:", full_text)
코드 분석
- 오디오 파일 변환:
AudioSegment.from_file을 통해 m4a 파일을 wav 파일로 변환합니다. 이 과정에서 pydub를 사용하여 오디오 파일을 다루고 변환합니다. 이 단계는 wav 형식이 음성 인식 라이브러리와 더 호환성이 좋기 때문에 필요합니다. - 오디오 정규화:
오디오 볼륨을 표준화하기 위해 audio.normalize()를 사용합니다. 이로 인해 오디오의 모든 부분이 일정한 볼륨을 가지게 되어 인식 정확도가 높아질 수 있습니다. - 오디오 증폭:
audio += 6을 통해 오디오의 볼륨을 6dB 만큼 증폭합니다. 이는 음량이 작은 오디오의 인식률을 높이기 위한 방법입니다. - 오디오 조각화:
split_on_silence를 사용하여 오디오 파일을 침묵을 기준으로 나눕니다. 이렇게 하면 긴 파일도 쉽게 여러 조각으로 나누어 처리할 수 있습니다. - 음성 인식:
각 조각에 대해 Google Web Speech API를 사용하여 음성을 텍스트로 변환합니다. 이 과정에서 언어를 ko-KR로 설정하여 한국어 음성을 인식할 수 있게 합니다. 또한, 인식 실패 시 여러 번 재시도하는 로직을 통해 인식 성공률을 높입니다.
예상 결과
이 코드를 실행하면, 오디오 파일의 내용이 텍스트로 변환되어 출력됩니다. 특히 긴 오디오 파일을 작은 조각으로 나누어 각 조각을 개별적으로 처리하기 때문에 긴 파일도 효과적으로 처리할 수 있습니다.
코드를 개발한 배경
사실, 긴 음성 녹음 파일을 텍스트로 변환하는 무료 사이트가 있긴 합니다. 하지만 대부분 회원 가입을 요구하고, 카드 번호를 입력해야 하는 경우가 많아요. 무료 버전이 끝나면 유료 정액으로 전환되도록 결제를 유도하기 때문에, 직접 개발하게 되었습니다. 이렇게 코드를 통해 오디오를 직접 처리하면, 비용 걱정 없이 자유롭게 사용할 수 있어요!
마무리
이제 오디오 파일을 Python으로 쉽게 텍스트로 변환할 수 있게 되었습니다. 이 코드를 통해 다양한 음성 데이터를 다루고 분석할 수 있는 가능성을 열어보세요! 추가적으로 궁금한 점이나 어려운 부분이 있다면 언제든지 댓글로 남겨주세요. Happy coding!
'Coding 공부 > Python' 카테고리의 다른 글
파이썬 데이터 처리와 시각화의 필수 라이브러리: Numpy, Pandas, Matplotlib, Seaborn (0) | 2024.08.08 |
---|---|
Python으로 음성 인식 응용 프로그램 만들기 (0) | 2024.08.07 |
Numpy: Python의 강력한 과학 컴퓨팅 도구 (0) | 2024.07.24 |
YOLOv3와 ChatGPT를 이용한 이미지 객체 인식 및 영양 정보 분석 (9) | 2024.07.23 |
OpenCV 소개 (0) | 2024.07.22 |
댓글