IoT開発、設備・DIYのブログ!
ちょっと出先でも家の様子がわかるものを作ってみました。
オープンソースのjulius、USBマイクを使います。
安いマイクなので正直おすすめできません…。
まずはUSBマイクの優先度を変更します。
cat proc/asound/modulesコマンドで下記の様になっているはずです。
snd_bcm_2835 0
snd_usb_audio 1
USBを優先するため、これを逆にします。sudo nano /etc/modprobe.d/alsa-base.conf コマンドで以下のファイルを作ってください
options snd slots=snd_usb_audio,snd_bcm2835options
snd_usb_audio index=0
options snd_bcm2835 index=1
そうするとcat proc/asound/modulesではUSB優先が確認できます。
snd_usb_audio 0
snd_bcm_2835 1
続いてマイクの準備ができたらjuliusのビルドとインストールをします。参考になるサイトはいろいろあるのですが、このサイトが一番わかりやすかったです。
julius -C j.jconf -nostripコマンドで<<<please speak>>>と出れば成功です。
↑こんな感じです。
音声認識させたデータを使うにはjulius -C j.jconf -nostrip -module というコマンドを使い、IPアドレスをpythonコードに入力して使います。pythonとslackの連携方法はこちらを参考にしてください。
import time
import socket
import string
import json
import requests
host = 'ラズパイのIPアドレス'
port = 10500
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))
data = ""
while True:
data = client.recv(4096).decode('utf-8')
strTemp = ""
for line in data.split('\n'):
index = line.find('WORD="')
if index != -1:
line = line[index + 6:line.find('"', index + 6)]
if line != "[s]":
strTemp = strTemp + line
if strTemp != "":
print("結果:" + strTemp)
SLACK_URL = "https://hooks.slack.com/**********************************"
def send_slack():
content = strTemp
payload = {
"text": content,
"icon_emoji": ':snake:',
}
data = json.dumps(payload)
requests.post(SLACK_URL, data)
send_slack()
data = ""
朱記のところは任意のIPアドレスやslackのトークンをつかってください。
moduleモードでjuliusが動いている最中に上記のコードを走らせると、slackに認識した
言葉を表示していきます。
・・辞書ファイルをちゃんとつくらないとダメかな。
子供が泣いているのがわかるくらいにしか使えません。
(実際泣いている音声です)
→7/20 辞書ファイル作ってみました