Raspberry pi

3편 적외선 리모콘 (IR Remote Controller) + 음성인식

[혜안] 2017. 4. 17. 22:25
728x90

[Raspberry pi] - 1편 적외선 리모콘 (IR Remote Controller)

[Raspberry pi] - 2편 적외선 리모콘 (IR Remote Controller)

[Raspberry pi] - 3편 적외선 리모콘 (IR Remote Controller) + 음성인식

[Raspberry pi] - 4편 적외선 리모콘 (IR Remote Controller) + 음성인식 개선

[Raspberry pi] - 5편 적외선 리모콘 (IR Remote Controller) + TV 스피커리시버 연동




주방 TV의 리모콘을 등록하고, 동작도 모두 확인한 상태였지만 음성인식 기능에서 생각이 많아졌다.


1안, 라즈베리파이에 음성인식 모듈을 심을까?

Amazon Alexa, Google Now 등 API와 소스가 공개된 AI 비서가 꽤 있고, 여러사람들이 시도하고 있던데...


2안, 아니면 스마트폰을 통해서 음성으로 명령을 내리면 앱으로 제어?

이미 내 폰에는 Google Now와 S보이스가 있다. 그리고 Googling 결과 utter와 같은 제 3의 앱도 있고...


고민을 거듭하다가 몇가지 이유로 2안을 선택했다.


이유 1. 

라즈베리파이(Raspberry Pi)에 audio input 이 없다. USB 마이크나 핸즈프리 기능이 있는 블루투스 스피커를 구매하면 되지만 되도록 헝그리하게 해보고 싶다.

이유2. 

쉽게해서 우선 1차완성을 해놓자. 2안으로 만족스러운 결과가 나올 수도 있으니... 가장 좋은 아키텍쳐는 멋있는 아키텍쳐가 아니라 원하는 기능에 충실한 가장 간단한 아키텍쳐이다.


우선 구조는,

스마트폰에서 Ok google, 또는 Hi galaxy를 외치고 스마트폰이 깨어나면, 내가 만든 앱을 부른다.

당연히 앱 이름은 "TV전원", "채널업", "볼륨업" 등이다.

그리고 그 앱들이 하는일은 주어진 이름 만큼의 일만 하고 사라지는거다.


우선 시험..


1번 주자. Google Now 탈락!

정해진 몇몇 앱 이외에는 구글에서 검색을 해버린다.


2번 주자. S보이스 1차합격

채널업, 볼륨업을 외치면 해당 앱을 실행하지만, TV전원은 지원하지 않는 기능이랜다. 헐~

이름만 적절히 바꿔주면 될 것도 같으므로 우선 합격, 그러나 인식율이 떨어진다.


3번 주자. 제 3의 앱... 탈락!

여러가지를 알아보다가 utter라는 앱을 발견,

기능은 매우 좋다. 

깨울 수 있고, 명령어를 정할 수 있고, 명령어에 대한 액션을 지정할 수 있다.

특히, 앱 안의 Activity 단위로 지정이 가능해서, 구지 구차하게 앱 이름을 "채널업", "볼륨업" 하지 않아도 된다.

그러나....


한국말 인식 드럽게 못한다.

어떻게든 살려보려고 며칠을 시험했지만 결국은 포기..


1차합격한 S보이스로 해보자.


배선작업 시작.


1. 적외선 송신부 서재방에서 주방으로 빼오기


라즈베리파이(Raspberry Pi)에서 적외선 송신부를 주방으로 연결해야 한다.

이것때문에 스마트콘센트(Smart Plug) 신호선을 2개로 줄여 2개의 선을 확보해 놓았다.

단자함에서 Y케이블 나머지 한쪽에 주방선 연결.


주방에서 주방TV 옆까지 적외선 송신부 끌어오기.


TV 좌측 상단에 테이프로 부착. 

오른쪽 상단이 수신부인 것 같은데, 저상태에서도 수신이 아주 잘된다.

위치를 정확히 잡기 전이므로 일단 매꼼하게는 나중에...



2. 앱 만들기


안드로이드 앱은 아주 간단하게 각 명령별로 긴급 제작! 

하려고 했는데 개발을 손놓고 있는동안 Android Studio가 새로 나왔단다.

이클립스가 설치되어 있었지만, 개발환경이 얼마나 좋아졌나 궁금한 마음에 Android Studio 설치.

설치만 반나절이 꼬박 걸린듯...

내려받고, 설치하고, 업그레이드하고 각종 Addon 붙이고...

게다가 엄청나게 느리다. (내 컴퓨터가 느린건가?)


소스코드는 꼴랑 10줄이 안되는데, 명령별로 앱 6개 빌드하고 스마트폰에 넣는데 사흘 걸렸다.

물론 평일 퇴근하고 짬짬이지만...

 암튼 코드는 HttpRequest 하여 각 명령에 해당하는 주소를 호출하는 걸로...

소스를 첨부하려고 했는데, Android Studio 다시 열기 싫다. 넘 오래걸려...



3. 시험


S보이스 Wakeup 명령은 "Pi"로 정했다. "하이~", "헬로~" 간지럽고, "자비스"는 인식을 거의 못한다. 

그나마 "Pi" 가 잘 인식되는데, 인식된 이후 실행명령어 인식율이 그다지 맘에들지 않는다.

성공율 약 30%.


아래는 실패영상과 성공영상

실패영상에서는 채널업을 채널A로 인식하고, 연속명령 시 쌩까는가 하면,

Mute 하려고 "음소거"라는 이름으로 앱을 만들어서 명령했더니 스마트폰이 무음모드로 되버렸다. 

뭐 앱이름을 또 바꿔야지...


아래는 성공영상이지만, 실패할까봐 채널업! 하고 힘을 준다.

자연스럽게 말해도 착착 알아듣는 음성인식은 아직 어려운 듯...

결론적으로, 구현은 끝났지만, S보이스로는 한계가 있다.

앱을 명령어 갯수만큼 만드는것도 한계가 있고.....


우선 여기까지, 

음성 인식율은 Google Now가 가장 좋았으므로, Google API를 이용해서 스마트폰 앱을 만들거나, 라즈베리파이(Raspberry Pi)에 심는 방법을 심히 고민해 보아야 겠다.

728x90