Intro

사내 프로젝트로 서비스를 만드는중.
어떤 서비스를 넣어야 차별점이 있을까… 를 고민하다가.
그래 나는 AI 기술을 배웠으니 AI를 접목해보면 좋겠다!
그리고 서비스에 어울리게 STT 모델을 넣어보면 어떨까? 라고 생각을 했다.



STT 란?

Speech To Text.
음성발화를 텍스트로 변환하는 기술을 의미한다.



SpeechRecognition

여러 STT 엔진을 직접 / 혹은 API 방식으로 쉽게 사용할 수 있다.
이미 학습된 모델을 사용하기 때문에, 모델을 학습시키지 않고도 편리하게 사용할 수 있다.

Install

1
2
3
4
5
6
7
$ pip install SpeechRecognition

----- 추가로 아래 라이브러리들도 사용 예정 -----
$ pip install librosa    # 음성파일에서 데이터 추출
$ pip install pydub      # WAV 파일로 변환
$ pip install ffmpeg     # pydub 의존성 라이브러리
$ pip install ffprob     # pydub 의존성 라이브러리

사용법

본 라이브러리는 Recognizer 라는 객체를 만들어 사용한다.

1
2
3
import speech_recognition as sr

r = sr.Recognizer()

다음으로는 사용할 STT 모델을 결정해야 한다. 여러 회사들이 STT 모델을 개발했는데, 구글, 마이크로소프트, IBM 등이 있다.

모델 설명 비고
recognize_google() 구글 웹 스피치 API  
recognize_google_cloud() 구글 클라우드 스피치  
recognize_bing() 마이크로소프트  
recognize_houndify() 사운드하운드  
recognize_ibm() IBM  
recognize_wit() Wit.ai  
recognize_sphinx() CMU Sphinx 다른 모델과 다르게 오프라인에서 구동 가능
recognize_amazon() 아마존  

또한 사용할 언어를 결정해야 한다.
언어는 HTML5 API 를 기반으로 설정해주면 되며, stack overflow의 답변에 잘 설명이 되어있어 링크를 첨부한다.

http://stackoverflow.com/a/14302134

코드 언어
ko-KR 한국어
en-US 영어(미국)
en-CA 영어(캐나다)
fr-FR 프랑스어
es-ES 스페인어(스페인)
1
2
3
# STT 작동

r.recognize_google(audio_data = "오디오파일 경로", language="언어")

지원하는 음원파일 종류는 아래와 같다.

  • WAV
  • AIFF
  • AIFF-C
  • FLAC


사용 예

실제 사용한 예시를 아래와 같이 첨부한다.
테스트 오디오 파일은 빅데이터협회.com 의 음원파일을 사용했다.

https://빅데이터협회.com/3541

1
2
3
4
5
6
7
8
9
10
11
import speech_recognition as sr
import librosa
import IPython.displat as ipd

korean_audio = sr.AudioFile("오디오파일")

with korean_audio as source:
    audio = r.record(source)

result = r.recognize_google(audio_data = audio, language="ko-KR")
print(result)
1
2
3
# 출력

>> 지금 수서 수서행 열차가 들어오고 있습니다 한글을 물라서 주시기 바랍니다



Reference

STT : https://www.youtube.com/watch?v=WZt2_-S261g
언어 표기법 : http://stackoverflow.com/a/14302134
테스트 음원 : https://xn–2n1bk9rtmh26jp7fdva.com/3541
파이썬 mp3 to wav : https://shonen-archive.tistory.com/5
음원 duration 추출 : https://choihk.tistory.com/18