[머신러닝 프로젝트 6] 음성처리 모듈 개발 따라하기

  • 2018-09-05
  • 글 | 정 재 준 대표, 커널연구회, rgbi3307@nate.com, www.kernel.bz




프로젝트 과정 목차

1. 인공지능(AI)이란 무엇인가?
2. 전원 배터리모듈 개발과정 및 기능
3. 센서제어 모듈 개발과정 및 기능
4. 모터제어 모듈 개발과정 및 기능
5. 카메라 Pan/Tilt 모듈 개발과정 및 기능
6. 음성처리 모듈 개발과정 및 기능
7. 병렬처리 모듈 개발과정 및 기능
8. 머신러닝 기능 개발과정 및 기능

 똑똑한 왕자(SmartPrince) 소개 

커널연구회에서 지능형로봇 만들기로 진행하는 SmartPrince(똑똑한 왕자) 시리즈는 커널연구회에서 제작한 9개의 모듈들에 머신러닝 알고리즘을 탑재하는 오픈플랫폼, 오픈소스 프로젝트이다. 각각의 모듈들은 독립된 형태로 동작할 수도 있고, 라즈베리파이 및 아두이노 호환 핀맵에 모듈들을 적층으로 쌓아서 한꺼번에 병렬로 동작시킬 수도 있다. 모듈에 있는 USB에 시리얼통신 명령어(AT Command)를 전송하여 모듈들을 제어한다.

커널연구회에서 설계하여 제작한 SmartVoice 음성처리 모듈의 외형은 그림 1과 같다. 이 보드는 SmartPower 모듈에서 라즈베리파이 40핀 I/O핀에 장착할 수 있고, 아두이노 헤더핀과도 호환된다. Cortex-M4(STM32F4) MCU가 내장되어 있어 모듈 독립적으로 음성 데이터를 처리할 수 있다.



SmartVoice는 기본적으로 내장되어 있는 마이크 및 사운드잭으로부터 입력된 사운드를 SD카드에 저장하고 사운드 인코딩/디코딩 칩인 VS1053을 통하여 사운드를 스피커 및 외부잭으로 출력한다. 마이크로 SD카드에 mp3파일로 사용자가 저장한 파일을 재생하는 기능도 갖추고 있다.

마이크로부터 입력되는 음성을 명령단위별로 학습하는 기능도 추가 되어 있으나, 앞으로 머신러닝 알고리즘을 적용하여 정확성을 높이는 작업이 남아 있다.

하드웨어 제원 및 기능

먼저, SmartVoice의 하드웨어 제원 및 기능에 대해서 알아보도록 하자. 그림 2는 이 모듈의 제원을 부품 위치별로 설명하는 것이다.



SmartVoice 모듈 제원 및 기능요약
• 보드 크기는 가로 53mm, 세로 80mm (아두이노 헤더핀 호환)
• Cortex-M4(STM32F4) MCU 내장
• VS1053 사운드 인코딩/디코딩 칩 내장
• 마이크 및 사운드잭으로부터 사운드 입력
• 스피커 및 사운드 출력잭으로 사운드 출력
• 마이크로 SD카드에 mp3파일 저장 및 재생기능

윈도우 PC에 연결방법

SmartVoice 모듈에 있는 마이크로 USB 포트를 윈도우가 설치되어 있는 PC에 연결한다. USB 연결선을 PC에 장착만 하면, USB로부터 5V 전원이 공급되므로 SmartVoice 모듈 하나는 충분히 동작된다.

윈도우의 장치 관리자를 확인해 보면 그림 3과 같이 SmartVoice의 시리얼 장치가 자동 인식된다.



커널연구회는 SmartVoice 모듈에 USB 시리얼(UART) 장치로 Silicon Labs사의 CP2102 IC를 사용했다. 이 장치는 PC에 기본적으로 드라이버가 설치되어 있으므로 별도로 드라이버를 설치하지 않아도 자동으로 인식된다.

PC의 장치관리자에서 USB 시리얼(UART) 통신 장치의 포트 번호를 확인한다. 그림 3에서는 COM4 포트이다(포트 번호는 PC마다 달라질 수 있다).

PC에서 시리얼 터미널 프로그램을 실행한다. 윈도우 시리얼 터미널이나 Putty, SecureCRT 등 사용하기 편한 시리얼 터미널 프로그램을 실행하면 된다. 실행한 시리얼 터미널 프로그램의 시리얼 통신 설정(옵션) 메뉴에서 시리얼 옵션들을 그림 4와 같이 설정한다.



시리얼 Baud rate는 115200, Data bits는 8, Parity는 None, Stop bits는 1로 설정하고, Flow control는 모두 체크하지 않는다.

그림 4와 같이 시리얼통신 옵션들을 설정한 후, SmartVoice 보드의 리셋 버튼을 한번 눌러주면 시리얼 터미널 화면에 다음과 같은 메시지들이 출력되면서 동작을 시작한다.



시리얼 터미널에 키보드로부터 AT? 라고 명령을 입력하면 다음과 같은 AT 명령어 사용법(도움말)이 출력된다. 이 명령어들의 자세한 사용법은 다음절부터 자세히 설명한다.





리눅스 PC에 연결방법

SmartVoice 모듈에 있는 마이크로 USB 포트를 리눅스가 설치되어 있는 PC에 연결한다. USB 연결선을 PC에 장착만 하면, USB로부터 5V 전원이 공급되므로 SmartVoice 모듈 하나는 충분히 동작된다.

위와 같이 연결했다면, 리눅스 터미널에서 다음과 같은 리눅스 명령어를 입력하여 SmartVoice 모듈의 USB 시리얼통신 장치가 연결되었는지 확인한다(별도로 설정하지 않아도 자동으로 연결된다).



아래 명령어로 SmartVoice 모듈의 USB 시리얼 장치가 /dev/ttyUSB0 노드에 연결되어 있음을 확인할 수 있다.



이제, 리눅스 명령창에서 시리얼 터미널 프로그램을 실행한다. 리눅스에서는 minicom을 시리얼 터미널 프로그램으로 많이 사용한다. 이 프로그램이 설치되어 있지 않다면, 다음과 같이 설치한다.



이제 minicom을 다음과 같이 실행한다. (루트 권한으로 실행)



실행 메시지가 다음과 같이 화면에 출력된다.



시리얼통신 포트가 위와 같이 /dev/ttyUSB0로 설정되어 있지 않고, 통신 속도(baud rate)도 115200으로 설정되어 있지 않다면, 키보드에서 Ctrl-A를 누른 후 O 키를 눌러서 다음과 같이 옵션 설정 메뉴로 진입한다



화살표를 아래로 눌러서 세 번째 메뉴인 Serial port setup을 선택한 후 엔터하면 아래와 같이 설정 옵션 메뉴가 나타난다.



화면에 나타난 옵션들을 위와 같이 맞추어 준다. 그런 다음 다시 상위 메뉴로 돌아가서 Save Setup as dfl 메뉴를 엔터하여 설정내용을 저장하고 Exit하여 빠져 나온다.





위와 같이 시리얼통신 옵션들을 설정한 후, SmartVoice 보드의 리셋 버튼을 한번 눌러주면 minicom 시리얼 터미널 화면에 아래와 같은 메시지들이 출력되면서 동작을 시작한다.



부팅 로그 메시지
시리얼 터미널에 키보드로부터 AT? 라고 명령을 입력하면 다음과 같은 AT 명령어 사용법(도움말)이 출력된다. 이 명령어들의 자세한 사용법은 다음절부터 자세히 설명한다.



AT 명령어 사용법

SmartVoice 모듈과 PC간에 USB 시리얼 라인이 연결되고 옵션들이 정상적으로 설정되었다면 AT 명령어들을 사용하여 SmartVoice 모듈에 프로그램되어 있는 펌웨어 기능들을 동작시킬 수 있다(혹시 동작하지 않는다면 앞의 연결과정을 다시 한번 점검해 주기 바란다).

참고로, AT 명령어들은 소문자/대문자 구분없이 입력하면 되고, SmartVoice 모듈 내부에서는 모두 대문자로 변환하여 동작된다.

시리얼 터미널 창에서 키보드로부터 AT?을 입력하고 엔터하면 다음과 같은 도움말이 화면에 출력된다. B08_SmartVoice_V02는 모듈의 모델명과 버전이다. AT+OSND=n 명령어는 사운드를 출력하고 AT+LSND=은 사운드를 입력받는다. 이것들에 대해서 아래부터 자세히 사용법을 설명한다.



AT+OSND=n 명령을 입력할 때 n에 숫자를 입력하면 아래같이 색인된 숫자에 해당하는 음성이 스피커로 출력된다. 색인 번호별 음성 데이터는 mp3 파일로 마이크로 SD카드의 /sound/output/ 경로에 저장되어 있다.




AT+LSND= 명령을 입력하면 아래와 같은 순서대로 음성을 명령어별로 학습을 진행한다. 머신러닝 알고리즘을 적용하여 음성 명령 정확성을 높이는 작업이 앞으로 남아 있다.

 
 
※ 기타 문의 사항은 이메일(rgbi3307@nate.com)을 보내 주시기 바랍니다.
 

<저작권자(c)스마트앤컴퍼니. 무단전재-재배포금지>

본 기사의 전문은 PDF문서로 제공합니다. (로그인필요)
다운로드한 PDF문서를 웹사이트, 카페, 블로그등을 통해 재배포하는 것을 금합니다. (비상업적 용도 포함)
 PDF 원문보기


  • 100자평 쓰기
  • 로그인

태그 검색
본문 검색
TOP