Tech Study/ASR/STT2020. 3. 16. 00:34

윈도용(가장 중요한 포인트) 음성 인식 장난감 프로젝트에 사용할 라이브러리를 찾고 있는 중이다. 앞서, Kaldi로 삽질을 좀 한 후...

두 번째로 도전해 보는 라이브러리가 바로 이 CMUSphinx 이다. 일전에 작성한 문서와 비슷한 방식으로 풀어 나가 볼까 한다.

 

Site

https://cmusphinx.github.io/wiki/download/

위 사이트에 보면 인터페이스로써 JAVA(Sphinx4)와 C(PocketSphinx)를 지원하는 것을 알 수 있다. 본인은 진성 C/C++ 개발자이므로, 당연히 PocketSphinx를 선택.

 

Logo

https://github.com/cmusphinx <- 깃헙에서 긁어 옴

진짜 로고인지는...

 

The name CMUSphinx

CMU는 카네기 멜론 대학교의 약자이다. 즉, 카네기멜론대의 연구진들이 주축인 프로젝트라고 할 수 있다.

Sphinx는 글자 그대로 스핑크스인데, 유래를 찾을 수는 없었다. 하지만, 스핑크스 설화를 통해 추측은 가능한데, 위 로고에서 보듯이 설화 속에서 사람이 석상(스핑크스)과 대화를 한다. 이는 기계가 음성인식을 한다 뭐 이렇게 비유해볼 수 있지 않겠는가? 즉, 개발팀은 스핑크스를 만든다는 재미난 상상력으로 네이밍을 한 것 같다. 아니면 말고.

 

Build

아래의 튜터리얼 사이트에 각종 가이드가 포함되어 있다. 기본개념 / 빌드 / 실행 등을 총망라 하였는데, 나같은 문외한은 낯선 용어들 때문에 이해하기가 너무 힘들다.(그 낯선 용어를 이해하려고 한 바닥씩 공부를 해야 하고, 그 공부를 위해 또 다른 공부...) 이 분야 조예가 없는 분이시라면 적당한 타협점을 찾으시길 바란다.

 

CMUSphinx Tutorial For Developers

CMUSphinx is an open source speech recognition system for mobile and server applications. Supported languages: C, C++, C#, Python, Ruby, Java, Javascript. Supported platforms: Unix, Windows, IOS, Android, hardware.

cmusphinx.github.io

 

기본개념을 성공적으로 익혔다 치고, 빌드 가이드를 따라가 보았다.

 

Building an application with PocketSphinx

CMUSphinx is an open source speech recognition system for mobile and server applications. Supported languages: C, C++, C#, Python, Ruby, Java, Javascript. Supported platforms: Unix, Windows, IOS, Android, hardware.

cmusphinx.github.io

 

Installation

download 페이지에서 sphinxbase와 pocketsphinx를 받아서 같은 폴더에 압축을 풀어 놓는다.

D:\CMU에 푼다고 치면

    D:\CMU\sphinxbase

    D:\CMU\pocketsphinx

이렇게 두 개의 폴더가 생기도록 한다.

 

Installation - Windows

sphinxbase -> pocketsphinx 순으로 빌드를 한다. 각각의 폴더에 들어 있는 sln 파일을 열어서 컴파일을 하면 된다. VS2012 이상이면 문제 없이 컴파일 된다. Kaldi와는 다르게 윈도OS에서 아주 깔끔하게 빌드가 가능하다.

sphinxbase에 있는 dll을 pocketsphinx에 카피한다.

만약 Release 32비트라면

from : sphinxbase/bin/Release/Win32/sphinxbase.dll

to : pocketsphinx/bin/Release/Win32/

 

여기까지 하면 설치가 끝이다.

믿기 힘들 정도로 쉽게 끝났다.

 

영어 인식은 바로 시험까지 해 볼 수 있다.

pocketsphinx 폴더에서 아래와 같이 실행하면 goforward.raw라는 파일을 인식한다. (한 줄로 입력할 것)

D:\CMU\pocketsphinx> bin\Release\Win32\pocketsphinx_continuous.exe    
                             -hmm model\en-us\en-us -lm model\en-us\en-us.lm.bin    
                             -dict model\en-us\cmudict-en-us.dict 
                             -infile test\data\goforward.raw

 

실행해보면 이런저런 로그가 주욱 나오는데 그 와중에 아래처럼 음성인식 결과가 텍스트로 표시가 된다.

 

아래와 같이 명령하면 마이크로 직접 입력을 테스트해 볼 수 있다. (전혀 인식되지 않는 나의 영어 발음에 큰 좌절을 맛보게 되었다. 열심히 시도를 했으나 엉뚱하게 fxxk 단어까지 보게 되더라...)

D:\CMU\pocketsphinx> bin\Release\Win32\pocketsphinx_continuous.exe    
                             -hmm model\en-us\en-us -lm model\en-us\en-us.lm.bin    
                             -dict model\en-us\cmudict-en-us.dict 
                             -inmic yes

 

 

Basic Usage (hello world)

https://cmusphinx.github.io/wiki/tutorialpocketsphinx/#basic-usage-hello-world

천리길도 hello world 부터... 저자께서 이 마음 아는지 아주 간단한 프로그램 예제를 직접 가이드에 담아 주셨다. 내용은 유닉스 용이지만, 웬만한 개발자라면 Visual Studio로 10분이면 똑같이 만들어 볼 수 있다.

아래에 내가 직접 따라 만든 결과물을 패키징하여 공유해 본다. VS2017으로 구현하였으며, 편의상 sphinx 라이브러리를 static 형태로 변경하였고, Release 64비트로만 빌드하도록 구성하였다.

helloworld_jman.7z.001
10.00MB
helloworld_jman.7z.002
10.00MB
helloworld_jman.7z.003
5.73MB

 

End

이 프로그램을 가지고, 구글 번역기의 영문 TTS 기능을 이용하여 만든 음성을 파일로 녹음하여 인식시켜보니 상당히 높은 인식률을 보였다. 하지만, PocketSphinx에 동봉된 마이크 입력 샘플은 마이크 제어에 조금 문제가 있어 사용이 어려워 보였다. 다음 번에는 마이크 On/Off 등으로 제어하는 PC용 STT 샘플 앱을 한 번 만들어 볼까 한다.

한국어 모델이 없는 것을 보면 Kaldi에 비해 최소한 국내에서의 저변이 높지는 않아 보이지만, 개인이 가지고 놀기에는 최고의 STT(ASR) 라이브러리가 아닐까 한다. (라이브러리 사용법이 정말 쉽다.)

 

Posted by JMAN