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