주요 콘텐츠

Simulink를 사용한 Raspberry Pi에서의 음성 명령 인식

이 예제에서는 Raspberry Pi®에서 음성 명령 인식을 수행하기 위해 특징 추출과 컨벌루션 신경망(CNN)을 배포하는 방법을 보여줍니다. 이 예제에서는 Raspberry Pi 보드에 연결된 마이크에서 오디오를 캡처하고 음성 명령 인식을 수행하는 Simulink® 모델을 개발합니다. Raspberry Pi에서 Simulink 모델을 External Mode로 실행하고, 인식된 음성 명령을 표시합니다. 오디오 전처리와 신경망 훈련에 대한 자세한 내용은 음성 명령 인식을 위한 딥러닝 신경망 훈련시키기 (Audio Toolbox) 항목을 참조하십시오.

Simulink 모델 준비하기

Simulink 모델을 만들고 Apply Speech Command Recognition Network in Simulink (Audio Toolbox)에서 개발된 특징 추출, 컨벌루션 신경망, 후처리를 적용합니다. 아래와 같이 Simulink Support Package for Raspberry Pi Hardware 라이브러리에서 ALSA Audio Capture 블록을 추가합니다.

Raspberry Pi 보드에 마이크를 연결하고 listAudioDevices를 사용하여 보드에 연결된 오디오 캡처 장치를 모두 나열합니다.

r = raspi("raspiname","pi","password");
a = listAudioDevices(r,"capture");
a(1)
a(2)

ans =

struct with fields:
           Name: 'USB-Audio-LogitechUSBHeadsetH340-LogitechInc.LogitechUSBHeadsetH340atusb-0000:01:00.0-1.3,fullspeed'
         Device: '2,0'
       Channels: {}
       BitDepth: {}
   SamplingRate: {}

ans =

struct with fields:
           Name: 'USB-Audio-PlantronicsBT600-PlantronicsPlantronicsBT600atusb-0000:01:00.0-1.1,fullspeed'
         Device: '3,0'
       Channels: {'1'}
       BitDepth: {'16-bit integer'}
   SamplingRate: {'16000'}

ALSA Audio Capture 블록은 Raspberry Pi 하드웨어의 디폴트 오디오 장치에서 오디오 신호를 캡처합니다. 오디오 장치 이름(예: plughw:2,0)을 입력하여 디폴트 오디오 장치가 아닌 다른 장치에서 오디오를 캡처할 수도 있습니다. ALSA Audio Capture 블록을 더블 클릭하고 Device nameplughw:2,0으로 설정합니다. 다른 파라미터를 아래와 같이 설정합니다.

ALSA Audio Capture$[ -2^{15} , 2^{15} -1 ]$ 구간의 값인 16비트 고정소수점 오디오 샘플을 출력합니다. ALSA Audio Capture 출력을 단정밀도 데이터로 형변환하고, 여기에 $2^{-15}$를 곱하여 숫자 범위를 $[ -1 , +1 )$로 변경합니다. 이와 같이 숫자 범위를 변경하는 이유는 이후 블록에 $[ -1 , +1 )$ 범위의 오디오가 필요하기 때문입니다. Audio File Read 블록과 Manual Switch를 사용하여 마이크의 오디오를 오디오 파일로 전환한 다음 다시 오디오로 전환합니다.

model = "slexSpeechCommandRecognitionRaspiExample";
open_system(model)

코드 생성 설정 구성하기

SpeechCommRecognitionRaspi 모델을 열고, 모델링 탭에서 모델 설정을 클릭하거나 Ctrl+E를 누릅니다. 코드 생성을 선택하고 시스템 타깃 파일ert.tlc로 설정합니다. 설명Embedded Coder입니다. 언어C++로 설정합니다. 그러면 언어 표준이 자동으로 C++11 (ISO)로 설정됩니다.

또는 set_param을 사용하여 프로그래밍 방식으로 설정을 구성합니다.

set_param(model,SystemTargetFile="ert.tlc")
set_param(model,TargetLang="C++")
set_param(model,TargetLangStandard="C++11 (ISO)")

모델을 External Mode로 실행하려면, 아래와 같이 코드 인터페이스 패키징Nonreusable function으로 설정하고 코드 생성 > 인터페이스 > 지원에서 variable-size signals를 선택합니다.

코드 생성을 지원하는 솔버를 선택합니다. 솔버auto (Automatic solver selection)으로 설정하고 솔버 유형Fixed-step으로 설정합니다.

set_param(model,SolverName="FixedStepAuto")
set_param(model,SolverType="Fixed-step")

아래와 같이 구성 > 하드웨어 구현에서 Hardware boardRaspberry Pi로 설정하고 Board Parameters에 Raspberry Pi 자격 증명을 입력합니다.

같은 창에서 External mode > Communication interfaceXCP on TCP/IP로 설정합니다.

데이터 가져오기/내보내기에서 신호 기록을 선택하여 External Mode에서 신호 모니터링을 활성화합니다.

Raspberry Pi에 모델을 배포하고 음성 명령 인식 수행하기

아래와 같이 하드웨어 탭에서 모니터링 및 조정을 클릭합니다.

이제 model을 닫습니다.

save_system(model);
close_system(model);

기타 시도해 볼 작업

  • Simulink Support Package for Raspberry Pi Hardware의 LED 블록을 사용하여 Go 음성 명령에 대해 이 블록이 켜지도록 합니다. 하드웨어 탭의 배포 창을 사용하여 Raspberry Pi에 독립 실행형 애플리케이션을 배포합니다.