관리 메뉴

개발자비행일지

파이썬 프로젝트, 음성 파일 텍스트로 변환하기 본문

▶ Python

파이썬 프로젝트, 음성 파일 텍스트로 변환하기

Cyber0946 2023. 7. 25. 15:07

먼저 음성 파일을 텍스트로 변환하기 위해서는 음성 인식 기술을 사용해야 합니다.

Python에서 음성 파일을 텍스트로 변환하기 위해 SpeechRecognition 라이브러리를 사용할 수 있습니다. 맞춤법 검사를 위해서는 py-hanspell 라이브러리를 사용하고, 개행 문자를 제거하기 위해 간단히 문자열 처리를 수행하면 됩니다.

자 이제 먼저 필요한 라이브러리를 설치합니다:

pip install SpeechRecognition pyaudio py-hanspell

 

이제 필요한 라이브러리 설치는 완료되었습니다. 

[참고]

speech_recognition 라이브러리는 여러 오디오 포맷을 지원하며, 대부분의 일반적인 확장자를 사용할 수 있습니다. pyaudio 라이브러리를 사용하는 경우 WAV 파일(.wav) 형식을 사용하는 것이 일반적입니다.

다양한 오디오 형식의 지원을 위해 pyaudio 라이브러리를 설치했다면, 대부분의 오디오 형식을 사용할 수 있습니다. 일반적으로 지원되는 오디오 형식은 다음과 같습니다:

  • WAV (.wav)
  • MP3 (.mp3)
  • FLAC (.flac)
  • OGG (.ogg)
  • AAC (.aac)
  • WMA (.wma)
  • AIFF (.aiff, .aif)
  • AU (.au)

만약 오디오 파일의 확장자가 위의 형식 중 하나이면, speech_recognition 라이브러리를 사용하여 음성 파일을 텍스트로 변환할 수 있습니다. 만약 다른 형식의 오디오 파일을 사용해야 한다면, 해당 오디오 형식을 지원하는 라이브러리를 사용하여 오디오를 먼저 변환해야 합니다.

이를 이용해 스크립트를 작성하면 다음과 같습니다. 

import speech_recognition as sr
from hanspell import spell_checker

def speech_to_text(audio_file):
    recognizer = sr.Recognizer()

    with sr.AudioFile(audio_file) as source:
        audio_data = recognizer.record(source)

    try:
        text = recognizer.recognize_google(audio_data, language='ko-KR')
        return text
    except sr.UnknownValueError:
        print("음성을 인식할 수 없습니다.")
    except sr.RequestError:
        print("Google Web API에 접근할 수 없습니다.")
    
    return None

def correct_spell(text):
    result = spell_checker.check(text)
    corrected_text = result.checked
    return corrected_text

def remove_newlines(text):
    return text.replace("\n", " ").replace("\r", "")

if __name__ == "__main__":
    audio_file = "your_audio_file.wav"  # 음성 파일 경로
    text = speech_to_text(audio_file)

    if text:
        print("음성을 텍스트로 변환했습니다:")
        print(text)

        corrected_text = correct_spell(text)
        print("맞춤법 검사 결과:")
        print(corrected_text)

        cleaned_text = remove_newlines(corrected_text)
        print("개행 문자 제거 결과:")
        print(cleaned_text)

코드를 각각 분석해 보겠습니다. 

import speech_recognition as sr
import re
from hanspell import spell_checker

speech_recognition 라이브러리를 sr로 가져오고, 정규표현식 모듈 re를 가져오고, hanspell 라이브러리의 spell_checker 모듈을 가져옵니다.

def recognize_speech(audio_file):
    recognizer = sr.Recognizer()

recognize_speech 함수를 정의합니다. 오디오 파일을 받아 음성을 인식하는 기능을 구현할 것입니다. speech_recognition 라이브러리의 Recognizer 객체를 생성합니다.

    with sr.AudioFile(audio_file) as source:
        audio = recognizer.listen(source)

오디오 파일을 열고 AudioFile 객체를 생성합니다. AudioFile 객체를 source로 지정하고, listen 메서드를 사용하여 오디오를 녹음합니다.

    try:
        recognized_text = recognizer.recognize_google(audio, language='ko-KR')

try 블록 안에서 recognize_google 메서드를 사용하여 녹음된 오디오를 음성 인식하여 텍스트로 변환합니다. language='ko-KR' 인자를 사용하여 한국어로 인식합니다.

        return recognized_text

인식된 텍스트를 반환합니다.

def remove_newlines(text):
    return re.sub(r'\n', ' ', text)

remove_newlines 함수를 정의합니다. 문자열에서 개행 문자를 공백으로 대체하여 제거하는 기능을 구현합니다.

def correct_spelling(text):
    result = spell_checker.check(text)
    return result.checked

correct_spelling 함수를 정의합니다. hanspell 라이브러리의 spell_checker.check 메서드를 사용하여 텍스트의 맞춤법을 검사하고, 수정된 결과를 반환합니다.