Raspberry Pi 3 Juliusで音声認識(1)

スポンサーリンク

マイクを使おう

Raspberry Pi 3(Model B+)とjulius(ver4.4.2.1)を使って音声認識を試してみます。
まずはマイクを認識して録音/再生するところまでやってみましょう!

用意するもの

  1. Raspberry Pi3(Model B+)
  2. USBマイク

Raspberry PiのOSは最新(2018.06現在)のStretchを使用しています。
USBマイクについては色々種類があって迷いましたが、amazonで見かけたドングル型にしました。接続が成功して、物足りなくなったらもうちょっと高めの奴に手を出そうかな🤔

OSアップデート

念のため最新版にしておきます。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
$ sudo rpi-update

USBマイクの設定

現状の確認

USBマイクを刺す前に、現状の確認をしておきます。

$ lsusb
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

USBマイクを装着

USBマイクを装着して再度確認します。

$ lsusb
Bus 001 Device 004: ID 8086:0808 Intel Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

ちゃんと認識してるようです。
あ。ちなみにIntel Corp.のところは購入したマイクによって異なります。

カードとデバイス番号を確認

割り振られているカードとデバイス番号を確認します。

$ arecord -l
**** ハードウェアデバイス CAPTURE のリスト ****
カード 1: Device [USB PnP Sound Device], デバイス 0: USB Audio [USB Audio]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0

カード、デバイスとありますので、これを/etc/profileに書き込んでおきます。

$ sudo vim /etc/profile

# 一番最後の行に↓を追記して閉じます。
export ALSADEV="plughw:1,0"

優先順位の変更

オーディオモジュールの優先順位を確認し、変更します。

$ cat /proc/asound/modules
 0 snd_bcm2835
 1 snd_usb_audio

数字が若い方が優先です。
上記からはUSBマイク(snd_usb_audio)がオーディオ出力(snd_bcm2835)よりも下であることが読み取れますので、この優先順位を変更します。

$ sudo vim /lib/modprobe.d/aliases.conf

cat /lib/modprobe.d/aliases.conf
# These are the standard aliases and dependencies.
# This file does not need to be modified.

# prevent unusual drivers from appearing as the first sound device ###########
options snd-pcsp index=-2
# options snd-usb-audio index=-2
options cx88_alsa index=-2
options snd-atiixp-modem index=-2
options snd-intel8x0m index=-2
options snd-via82xx-modem index=-2

options snd slots=snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_bcm2835 index=1

# work around other kernel issues ############################################
# The EHCI driver should be loaded before the ones for low speed controllers
# or some devices may be confused when they are disconnected and reconnected.
softdep uhci-hcd pre: ehci-hcd
softdep ohci-hcd pre: ehci-hcd

options snd-usb-audio index=-2
となっている個所をコメントアウトし、赤字の部分を追記します。

そして再起動してください。

$ sudo reboot

再度優先順位を確認します。

$ cat /proc/asound/modules
 0 snd_usb_audio
 1 snd_bcm2835

優先順位が変わっていればOKです。

USBマイクのテスト

USBマイクで正しく録音/再生できるか確認します。

録音/再生

次のコマンドで録音します。録音ファイルはtest.wavとしておきます。

$ arecord -D plughw:0,0 -f cd test.wav
録音中 WAVE 'test.wav' : Signed 16 bit Little Endian, レート 44100 Hz, ステレオ
^Cシグナル 割り込み で中断...

適当にマイクに向かって喋ってみます。
上記にある通り、CTRLCで録音を停止できます。

再生

次のコマンドで再生します。

$ aplay -D plughw:1,0 test.wav

。。。聞こえない(´・ω・`)

感度設定

マイクの感度を設定してみます。
使っているマイクの感度はMIN=0,Max=16 ということなので、16を設定します。

$ amixer sset Mic 16 -c 0
Simple mixer control 'Mic',0
  Capabilities: cvolume cvolume-joined cswitch cswitch-joined
  Capture channels: Mono
  Limits: Capture 0 - 16
  Mono: Capture 16 [100%] [23.81dB] [on]

辛うじて聞こえるレベルになりました。
マイクが悪いのかな?😢

まぁ、とにかく録音、再生ができたのでよしとしましょうw
次回はいよいよjuliusをインストールして音声認識をしてみます👍

スポンサーリンク

コメント