음성인식 스마트 거울 만들기

일전에 본인이 스마트거울을 만든 적[1]이 있는데, 재주 많은 사람들이 이 기능을 넘어서 음성인식이 되는 스마트 거울을 만든 걸 몇 개[2,3] 봤다. 헐! 이걸 보니 나도 한 번 만들어 보고 싶어 좀이 좀 쑤셨다-_- 근데 정말 짧은 지식으로 이걸 구현하려니 알아야 할 게 너무 많고, 시행착오도 무지하게 많이 했다. ㅋㅋㅋ

[2]에 설치과정에 대한 매우 친절한 설명이 있으나 결국 실패했다. 설명을 쭉 봤는데, 중간에 구글 개발자 등록을 해서 음성 api를 개설해야 하는 과정이 있어서 좀 걸렸다. 그리고 따라하다보니 뭔가 컴파일 에러인지 생기는데, 이걸 해결할 재주가 본인에게는 없어 포기…-_-

여하간 본인이 구현한 음성인식 스마트 거울은 크게 세 부분으로 구성되는데,

  1. 사람이 발화하면 이것을 텍스트로 변환 (speech to text; stt)
  2. 각 텍스트에 맞는 처리 (javascript와 perl 사용)
  3. 처리 결과를 음성으로 출력 (text to speech; tts)

그래서 ‘거울아~’ 하고 부르면 ‘네 주인님’ 하고 대답을 하는 거울을 만들고 싶어졌다. ㅋㅋ 참고로 Snow White에서 Evil Queen이 Magic Mirror를 부르는 대사가 뭘까 검색해 봤는데, ‘Mirror, mirror, on the wall’ 인 듯… ㅋ

원래 본인의 계획으로, tts 부분은 안면이 있는 여고생-_-한테 부탁해서 지정된 대사를 녹음한 뒤, mp3파일을 출력하는 방식을 검토하고 있었다. ㅋㅋㅋ 그런데 responsive voice라는 사이트[4]에서 자바스크립트로 tts를 구현할 수 있도록 제공하는 라이브러리를 제공하는데, 이게 성능이 대단하다! 비상업적인 개인 사용에 한해 무료이고 자바스크립트만으로 전부 다루는게 가능하므로 사용이 매우 간단하다. 그래서 tts는 쉽게 해결할 수 있었다.

문제는 stt부분인데, 웬만하면 한국어로 구현하고 싶었기 때문에 이게 매우 간단치 않은 문제였다. jasper, voice command 등등 여러 방법이 있다고 하는데, 이 모두 본인의 지식 부족으로 전혀 다룰 수가 없었다-_- 다행히 개중에 annyang[5]이라는 자바스크립트 라이브러리가 자바스크립트 만으로만 작동하고, 한국어 인식 부분에서 꽤 괜찮은 성능을 가지고 있어서 이를 중심으로 여러가지로 고려해 봤다. 헌데 마이크 입력을 웹브라우저가 직접받아야 했는데, 이게 크롬/크로미움 브라우저만 가능했다. 그건 그렇다 치더라도 라즈베리 파이에서 크롬을 작동시킬 수 없기 때문에, 필연적으로 크로미움을 사용해야 했는데, 크로미움에서는 https 사이트가 아니면 마이크 퍼미션을 정상적으로 얻지 못하는 문제가 있었다. 이 부분을 해결하지 못하여 결국 라즈베리 파이로 구현하는 것을 포기하고 말았다.

검색해보니 어떤 일본사람이 raspberry pi + ubuntu mate + electron + annyang 으로 일본어 음성인식을 구현하는 것[6]을 봤는데, 이걸 따라 해 보고 싶었다. 참고로 electron[7]은 웹 언어만으로 크로스 플랫폼 데스크탑 앱을 구현하는 툴이라고 한다. 근데 electron을 어떻게 다루는지 매뉴얼을 봐도 도저히 이해가 안 돼서 이 방법도 포기…-_-

결국 좀 어이없게도 최후의 방법으로 예전에 사놓고 안 쓰고 있던 8인치 크기의 윈도우8 태블릿(도시바 encore)에 micro hdmi 케이블을 물려서 디스플레이를 구현하고, 여기에 구글 크롬 브라우저를 풀스크린 모드로 실행하는 방법을 썼다-_- 대신, 웹사이트는 내부 네트워크 안에서 raspberry pi 2에 아파치2 서버로 구동시키고, 옥션에서 파는 만원짜리 스마트폰용 마이크를 태블릿에 달아서 음성인식률을 좋게 만들었다.

그 결과….

유튜브에 여러 음성인식 시연 영상이 있는데, 하나같이 그다지 실용적으로 보이지 않았다. 아무 음성이나 반응하지 않고 지정된 시기에 음성인식을 시작할 수 있도록 모션인식이나 hot word를 지정하는 것이 보통이다.(ok google이나 alexa같은…) 처음에는 ‘거울아’로 지정하고 만들었는데, 이런거 실제로 쓰려면 꽤 귀찮다. 실제로 만들어보니 기기가 소리에 그닥 민감하지 않은 듯 하여, 본인은 hot word를 아예 없앴다-_- 걍 아무때나 일하다가 거울쪽으로 ‘뉴스’라고 외치면 뉴스를 읽어주는 편이 본인에게는 더 실용적이었다.

어떤 메뉴가 실용적일지 궁리를 많이 했는데, 가끔 계산기 누르기 귀찮아서 곱셈과 덧셈을 외치면 (예를 들어 ‘십이 곱하기 십삼’) 계산해 주는게 실용적일 듯 하다. 근데 숫자 인식 성공률이 은근 낮아서…-_-

 


2016.11.6
드디어 아무 상장된 회사 이름을 외치면 그 회사의 주가와 전일 등락을 말해주는 기능을 만들었다. ㅋㅋㅋㅋ 코드 짜느라 무지 힘들었다. ㅋㅋㅋ 회사 이름 인식률이 생각 이상으로 상당히 정확하다. 거의 틀리지 않는다. annyang 이거 대단하구만!

 


2016.11.9
크롬 브라우저를 매번 실행할 때마다 f11키를 누르기가 번거로운데, 상당히 유용한 팁이 있다.

크롬경로/chrome.exe --kiosk url주소

라고 써 주면 실행즉시 풀스크린이 된다.
참고로 자바스크립트로는 보안 문제 때문에 브라우저 실행 즉시 풀스크린이 안 된다는 사실.

또 웹페이지 css 안에
html { cursor: none; color: #2299aa; background-color: #000000; }
라고 써 주면, 배경은 검게되고 자동으로 커서가 보이지 않아 마우스를 굳이 조작할 필요가 없다.

 


2016.11.18
‘중국어’라고 외치면 동아일보에서 제공하는 일일 중국어[8]를 보여주는 기능을 만들었음. ㅋㅋㅋ
참고로 css 안에
img { -webkit-filter: invert(1); filter: invert(1); }
라고 쓰면 이미지 색상이 반전되어 나오므로 외부 이미지를 거울에 맞춰 변형할 필요가 없게 된다. 물론 기존의 이미지들을 전부 반전시켜 놔야 한다. ㅋ

 


[1] 내 백과사전 스마트 거울 만들기 2016년 1월 30일
[2] https://docs.smart-mirror.io
[3] http://jeongchul.tistory.com/423
[4] http://responsivevoice.org/
[5] https://www.talater.com/annyang/
[6] Raspberry Pi と Electron で自立型の音声アシスタント by ポンダッド
[7] http://electron.atom.io/
[8] http://news.donga.com/DailyLanguage?g=3

One thought on “음성인식 스마트 거울 만들기

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중