HomeAbout Me

음성으로 TV제어하기 - 3.음성 인식

By kuper0201
Published in 임베디드
2020-03-04
2 min read
음성으로 TV제어하기 - 3.음성 인식

Table Of Contents

01
라이브러리 선택
02
안드로이드 앱 제작

지금까지는 음성인식 후의 신호를 만들어주는 부분을 구현했다. 이번에는 실제로 음성인식을 수행하는 부분을 만들어 볼 것이다.

라이브러리 선택

필자는 이 프로젝트를 진행하며 직접 음성인식 모델을 구축할지, 기존에 제작되어 있는 API를 가져다 쓸 지에 대하여 고민을 많이 했다. 음성인식 모델을 직접 구현해보니 음성데이터와 컴퓨팅 파워가 부족해서 인식률과 학습 속도가 떨어지는 문제가 있었고, API를 이용하면 요청 건당 가격을 지불해야 하는 등의 문제가 있었다. 이런 문제들 때문에 다양한 API와 모델 학습 방법을 구글링해 본 결과 안드로이드OS의 내장 음성 인식 기능을 이용하는것이 가장 효율적이라는 결론에 이르렀다.

하지만 안드로이드OS의 내장 음성인식 기능을 사용하기 위해서도 문제가 존재했는데, 당연하게도 안드로이드OS가 필요하다는 것이다. 처음에는 라즈베리 파이를 이용해서 음성인식을 구현하려고 계획 했지만 안드로이드OS때문에 라즈베리 파이 이용은 포기했다. 물론, 라즈베리 파이에도 안드로이드를 올릴 수 있겠지만, 창고를 조금만 찾아보면 이전에 사용하던 성능 짱짱한 안드로이드 폰들이 숨어있는데 굳이 라즈베리 파이에 안드로이드를 설치할 필요성을 느끼지 못했다. 심지어 안드로이드 폰에는 마이크까지 기본으로 붙어있다!

필자는 창고에 숨어있던 갤럭시 노트4를 음성 인식기로 사용하기로 했다. 기기는 정해졌으므로 이전에 만들었던 H/W와 안드로이드의 음성인식 기능을 연동하기만 하면 음성으로 TV를 제어할 수 있게 된다.


안드로이드 앱 제작

안드로이드에서 음성을 인식하고 UDP 패킷을 전송하기 위해 어플리케이션을 제작했다. 첨부된 앱을 다운받아 음성 인식기로 사용할 안드로이드 폰에 설치하고 실행하면 된다. 앱이 동작하는 방식은 간단하다. 안드로이드의 음성 인식 기능이 문자열로 인식된 결과를 반환해 주면 반환된 문자열을 비교해 각각 기능의 UDP 패킷을 생성하여 이전에 만들어 두었던 H/W에 전송한다.

안드로이드 앱(apk) / 소스 코드

어플리케이션을 설치하고 실행 해 보면 마이크 권한을 요구할텐데 음성을 인식 하기 위해서 마이크가 필요하므로 권한을 허용해 줘야 한다. 권한까지 허용해 주었다면 아래와 같이 메인 화면이 표시 된다.

앱 실행
앱 실행

"Enter your IP!!!" 부분에 이전에 만들었던 ESP-01 회로의 IP주소를 입력하고 "SET!!!"버튼을 클릭하면 UDP 패킷을 전송할 IP가 설정된다. 이렇게 음성인식까지 연동을 시켰다. 마이크에 대고 "TV 꺼 줘"라고 말하면 TV가 꺼지고 "TV 켜 줘"라고 말하면 TV가 켜지는 것을 볼 수 있을 것이다. 물론 TV를 끄고 켜고 하는 기능 외에도 여러 다른 기능들도 사용할 수 있다.

사용할 수 있는 기능을 표로 정리해 두었다.

명령동작
TV 켜 줘/꺼 줘TV 전원 On/Off
볼륨 업/음량 키워음량 올림
볼륨 다운/음량 내려음량 내림
채널 업/채널 올려채널 올림
채널 다운/채널 내려채널 내림
(숫자) 채널(숫자)번 채널로 이동

이 기능들 말고도 "조용히" 기능이나 리모컨의 기타 다른 기능들을 추가하고 싶거나 애플리케이션의 난잡한 소스를 깔끔하게 정리해서 사용하고 싶다면 마음껏 수정해서 사용해도 좋다. 참고로 이 프로젝트는 적외선 리모컨이 대상이었으므로 TV외에도 에어컨, 공기청정기 등 적외선 리모컨을 이용하는 기기라면 어디에든 사용할 수 있다!

마지막으로 필자의 어플리케이션은 안드로이드의 내장 음성인식 기능을 사용한다고 하였는데 이는 심각한 문제가 있다. 음성 인식을 시작하고 종료할 때마다 계속 알림음이 난다는 것이다. 이 부분은 아예 소리를 끄고 사용하거나 서드파티 안드로이드 음성 인식 엔진을 (Ex. Sphinx CMU) 사용하면 해결될 것 같다. 일단 동작은 잘 되므로 소리를 아예 꺼놓고 사용해 보다가 나중에 추가적으로 불편한 점이 생기거나 못 쓸정도라고 생각되면 코드 정리와 개선을 조금 해야겠다.


Tags

#embedded#projects
Previous Article
음성으로 TV제어하기 - 2.TV 제어
Next Article
BOJ 9012 괄호
kuper0201

kuper0201

안녕하세요!

Related Posts

음성으로 TV제어하기 - 2.TV 제어
음성으로 TV제어하기 - 2.TV 제어
2020-03-03
2 min

Quick Links

HomeAbout Me

Social Media