컴퓨터/Python

Python (16) - TTS와 STT를 구현하자 (pyttsx3, Speech Recogition)

달서비 2023. 5. 10. 16:15

KT - 기가지니2

군대에서 기가지니라는 인공지능 스피커를 처음 사용하였습니다. 최근에 인공지능 스피커에 대하여 관심을 가지기 시작하였는데 여기에서 핵심기술이 텍스트와 음성 간의 관계라고 생각합니다. 두 관계를 해결해야지 사람과 기계가 소통할 수 있기 때문입니다. 그래서 이번에는 사람과 기계가 소통하는 방법 TTS와 STT에 대하여 알아보겠습니다.   

 

STT (Speech to Text)

"기가지니?"라고 우리가 말하면 기가지니는 "네?"라고 반응합니다. 어떻게 기가지니라고 말하는 것을 컴퓨터가 알아들었을까요? 이것은 STT라는 기술을 이용하여 음성을 분석하여 텍스트로 바꾸어 주기 때문입니다. 발음마다 매질이 달라 일일이 분석하여 해당 소리를 낼 수도 있지만 해당 과정은 몹시 어렵습니다. 그래서 파이썬에 패키지를 이용하려고 합니다. 

파이썬에서는 Speech Recognition이라는 패키지를 사용하였습니다.

 

해당 패키지를 사용하기 전 pip를 이용하여 설치하도록 합니다.

pip install SpeechRecognition

 

패키지만 설치하면 바로 사용할 수 있습니다.

 

사용 방법

1) 패키지 선언 및 Recognizer 클래스를 선언합니다.

import speech_recognition as sr

r = sr.Recognizer()

Speech Recognition에서 모든 작업은 Recognizer 클래스에서 이루어지기 때문에 클래스를 선언해 줍니다.

 

2) 마이크를 이용하여 음성을 듣고 음성 인식 API를 가져와 분석합니다 

r = sr.Recognizer()
with sr.Microphone() as source:
	r.adjust_for_ambient_noise(source)
    print("do it")
    audio = r.listen(source)
    try:
        text = r.recognize_google(audio, language='ko-KR')
        print(text)
        return text
    except:
        return ''

해당 방법은 마이크를 이용하여 소리를 듣고 API를 이용하여 분석하는 방법입니다. 각 줄에 관해 설명하자면 마이크를 이용하기 때문에 adjust_for_ambient_noise 메서드를 이용하여 주변 소리를 녹음하여 잡음을 제거해 줍니다. 그 후 listen메서드를 이용하여 소리를 녹음합니다. 그리고 이 소리를 recognize_google메서드를 이용하여 음성을 분석해 주는 방식입니다.

 

여기서 저는 Google Web Speech API를 이용하여 작업을 하였습니다. 해당 API는 기본 API 키가 있기 때문에 간단하게 사용할 수 있습니다. 다른 API는 API 키를 가져와 인식하여야 합니다. 추가로 Recognizer 클래스에 내장된 API메서드는 아래와 같습니다.

  • recognize_bing(): Microsoft Bing Speech
  • recognize_google(): Google Web Speech API
  • recognize_google_cloud(): Google Cloud Speech
  • recognize_houndify(): Houndify by SoundHound
  • recognize_ibm(): IBM Speech to Text
  • recognize_sphinx(): CMU Sphinx
  • recognize_wit(): Wit.ai

여기서는 마이크를 이용한 방법을 설명하였습니다. 오디오 파일을 이용한 방법 또한 있으니 필요한 경우 검색해 주시면 감사합니다. 

 

TTS (Text to Speech)

스피커를 이용하여 TTS 소리를 들을수 있다 - pixabay

기가지니가 "네"라고 반응할 때 해당 발음은 어떻게 구현하는 걸까요? 가장 기본적인 방식은 성우가 가나다라 등 여러 글자를 녹음한 소리를 일일이 매핑시키는 방식을 사용합니다. 해당 방식을 이용하여 시각적으로 말하는 것이 아닌 여담으로 요즘은 AI를 훈련하여 자연스러운 TTS 소리를 이용할 수 있습니다. STT와 마찬가지로 파이썬의 패키지를 이용하여 구현하려고 합니다. pyttsx3라는 패키지를 이용하여 구현해 보겠습니다. 

 

해당 패키지도 마찬가지로 pip를 이용하여 다운로드 하도록 합니다.

pip install pyttsx3

 

사용 방법

import pyttsx3

engine = pyttsx3.init()
engine.setProperty('rate', 200)
engine.say("Hello World")
engine.runAndWait()

위에는 TTS를 사용하는 예시 코드입니다. 한 줄씩 설명하자면 다음과 같습니다.

engine = pyttsx3.init()

- 먼저 pyttsx3 엔진을 선언합니다.
engine.setProperty('rate', 200)

- 분당(rate) 200글자를 말하도록 TTS 속도를 설정해 줍니다. 
engine.say("Hello World")

- "Hello World"를 말합니다

engine.runAndWait()

- 동기화해 줍니다. 

 

이를 통하여 파이썬을 이용하여 음성과 텍스트를 이용할 수 있습니다.