2015년 7월 25일 토요일

pibot.org 를 통한 STT, TTS 공부하기

라즈베리파이에 대해 알아보고 응용 시나리오를 찾기 위해 구글링을 시작 했습니다.
정말 다양한 나라와 사람들이 각양각색의 응용으로 라즈베리를 사용하고 있네요.
그런데 제가 관심 있는 부분은 '레고 로봇' 에 적용할 기술 이었기 때문에 키워드를 조금 좁혀서

'로봇', '음성인식', '화상인식' 으로 찾아 봤습니다.

제 기준으로 가장 적합한 곳은 http://pibot.org/ 이었습니다.
pibot.org 는 오픈소스를 사용하여 라즈베리 로봇을 만드는데 필요한 How-To 를 제공해 주고 있는데요. 'Basic' 과 'Advanced' 두 단계로 학습해 나가는 것을 제공합니다.

'Advanced' 중에 '머신비전', '로봇이 말하게 하기', '음성인식' 이렇게 3가지 정확한 키워드가 제공되고 있습니다. 각각 의 솔루션은,

머신비전 - OpenCV
로봇에게 말하게 하기 - TTS (Text To Speech - espeak 기본이나 다양한 모듈 사용 가능)
음성인식 - JASPER 라는 오픈소스 STT 솔루션 (Speak To Text - 역시 다양한 모듈 사용 가능)

머신비전은 나중에 공부 하기로 하고 일단 JASPER 를 통해 TTS, STT 에 대해 정리 해 보겠습니다.
일전에  SIRIUS 라는 아이언맨의 자비스 같은 솔루션을 검토 했었는데요, JASPER 역시 비슷하게 Question & Answer 를 수행 해 줍니다.

간다하게 '제스퍼, 지금 몇시야?' 라고 물으면 '지금은 몇시 몇분 입니다.' 라고 답을 해 주는 방식 인거죠.

Sirius 나 Jasper 모두 STT 솔루션을 선택적으로 사용할 수 있게 제공하는데 Jasper 가 좀 더 다양한 솔루션을 설명해 주고 있고 라즈베리 파이에 설치 및 설정 하는 방법에 대해 상대적으로 자세히 설명 되고 있어서 개인적으로는 Jasper 에게 +1 을 주고 싶습니다.

일단 Jasper 의 홈페이지는  http://jasperproject.github.io/ 입니다.
'설치 -> 설정 -> 사용' 3단계로 테스트 해 보실 수 있는데요, 저는 일단 작업을 편하게 하기 위해 라즈베리파이에서 안하고 Ubuntu 에서 테스트 해 봤습니다.

대부분의 가이드는 홈페이지를 따라 하시면 무난히 해 보실 수 있습니다.
설치 : http://jasperproject.github.io/documentation/installation/
설정 : http://jasperproject.github.io/documentation/configuration/
사용 : http://jasperproject.github.io/documentation/usage/

Ubuntu 에서 작업하면 몇 가지 예외 사항이 있는데,

1. 메뉴얼의 소스 URL 이 바뀐 것들이 좀 있습니다.
 - sphinxbase
 - pocketsphinx
 - cmucmltk

2. 기본 pip 삭제 하고 재설치 해야 합니다.
  $ sudo apt-get remove python-pip
  $ sudo easy_install pip

3. Ubuntu 는 PulseAudio 를 사용하기 때문에 Jasper 의 Alsa 관련 코드를 수정해 줍니다.
diff --git a/client/tts.py b/client/tts.py
index dd3327f..b11b62f 100644
--- a/client/tts.py
+++ b/client/tts.py
@@ -73,7 +73,8 @@ class AbstractTTSEngine(object):
     def play(self, filename):
         # FIXME: Use platform-independent audio-output here
         # See issue jasperproject/jasper-client#188
-        cmd = ['aplay', '-D', 'plughw:1,0', str(filename)]
+        #cmd = ['aplay', '-D', 'plughw:1,0', str(filename)]
+        cmd = ['aplay', str(filename)]

         self._logger.debug('Executing %s', ' '.join([pipes.quote(arg)
                                                      for arg in cmd]))
         with tempfile.TemporaryFile() as f:
이정도를 해 주시고 Ubuntu 에 마이크를 하나 달아서 jasper.py 를 실행 시키면 멋진 기계음이 'How can I be of service, gouache?' 라고 물어 옵니다.
전 STT 솔루션으로 Wit.ai 를 사용했는데요, 시간에 대한 키워드만 등록해둬서 'what time is it now?' 정도만을 물어 볼 수 있었습니다. 추가로 키워드를 등록해 나가면 필요한 대화는 할 수 있을 것 같습니다.

일단 간단하고 멋진 '자비스' 를 하나 얻은것이 큰 수확입니다.
다음엔 OpenCV 를 통한 머신비전에 대해 공부 해 보겠습니다.


댓글 2개:

김준수 :

재스퍼 설치중 재스퍼를 실행하게 되면 profile.yml폴더가 생성이 되질 않습니다 ㅠㅠ 무슨 문제일까요..

won :

안녕하세요! 라즈베리파이와 우분투에 jasper를 설치하려고 하는데요.. japser의 이미지를 sd카드에 burning한 후에 install 하라는데 도대체 burning을 어떻게 하라는건지 모르겠습니다 ㅠㅠ 라즈베리파이 sd카드를 리더기에 꽂고 win 32 disk manager로 jasper 이미지파일 로드해서 sd카드에 write 했다가 라즈비안 날려먹기만 했네요.. 혹시 jasper 설치하는 방법좀 알려주실 수 있으신가요?