Help us understand the problem. What is going on with this article?

ラズパイと音声認識でLチカ

More than 1 year has passed since last update.

https://ueqareer.net/2463
から

ラズパイでLチカ

今回用意したもの

  • OS(Raspbian)が入ったRaspberrypi3
  • 抵抗330Ω 1本
  • ジャンパーワイヤー(オス,メス)2本
  • 青色LED
  • ブレッドボード
  • USBマイク(今回はBUFFALOのBSWHD06MBKを使用) BUFFALOのBSWHD06MBKはマイク内蔵webカメラで1000円ほどなのでオススメ

2000円しないくらいで全て用意できました〜(もちろんラズパイ以外)

 

LEDを点灯させる

それでは早速、簡単に組み立ててLEDを点灯させてみましょう。

点灯の確認

LEDが正しく光るか確認します。
ピン番号は以下の画像を参考に組み立てます。
ピン番号

GPIO番号

  1. ジャンパーワイヤーを[a5-ピン番号6]につなぐ
  2. もう一本を[a1-ピン番号1]につなぐ
  3. 抵抗を[b1-b4]につなぐ
  4. LEDを[c4-c5]につなぐ(長い方がc4) 正しく接続すればこのようにLEDがつきました・・・! 確認ができたら先ほどピン番号1番につけたジャンパーワイヤーをピン番号3番(GPIO:2)に接続しなおします。 接続しなおしてもLEDはついたままのはずです。

 

pythonで制御してみる

今度はpythonのライブラリを使って指定したGPIO番号に接続されたLEDを制御してみましょう。

ライブラリのインストール

ターミナルで以下のコマンドを打ちます。

$ sudo apt-get install python-rpi.gpio

インストールが終われば、pythonファイルを作成して以下のようなプログラムを書きます。

led_l.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM) # GPIO番号で指定
GPIO.setup(2, GPIO.OUT) 
GPIO.output(2, GPIO.LOW)

実行します。

$ python led_off.py

消えました。

点灯も同じようにプログラムを書いて実行すればできます。

led_h.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM) # GPIO番号で指定
GPIO.setup(2, GPIO.OUT) 
GPIO.output(2, GPIO.HIGH)

Juliusのインストール

続いて、音声認識ソフトウェアJuliusをインストールします。
この手順は参考記事に従ってすすめてください。
Juliusの使い方(version 4.4.2 対応版)~ ラズベリーパイ研究室
ラズパイに、人の声を理解させる。

USBマイクの認識設定

juliusのインストールが終わったらusbマイクをラズパイに接続します。
以下を参考にusbの優先順位をあげて再起動します。
Raspberry PiでJuliusを使った音声認識(1)

音声認識の確認

ではでは、実行して見ましょう!

$ sudo modprobe snd-pcm-oss  //これがないとうまく動作しない
$ cd ~/julius/julius-kits/dictation-kit-v4.4/  //main.jconfがあるディレクトリに移動
$ julius -C main.jconf -C am-gmm.jconf -demo  //実行

以下のように表示されれば成功です。

自作辞書の作成

この状態では、全ての言葉を認識してくれますが遅いです。
そのため辞書を作って速度をあげましょう。
(「こんにちは」の1単語だけの辞書を作れば、何をいっても「こんにちは」と認識されるようになる。)

今回は「つけて」と「けして」と「てんめつ」の3単語を覚えさせます。

denki.yomi
つけて つけて
けして けして 
てんめつ てんめつ

以下のコマンドでコンパイルします。

$ iconv -f utf8 -t eucjp denki.yomi | yomi2voca.pl | iconv -f eucjp -t utf8 > denki.phone

次のようなファイルができました。

denki.phone
つけて   ts u k e t e
けして   k e sh i t e
てんめつ    t e N m e ts u

次に以下のような2つのファイルを作成します。

denki.grammar
S : NS_B DENKI NS_E
DENKI : TSUKETE
DENKI : KESHITE
DENKI : TENMETSU
denki.voca
% TSUKETE
つけて ts u k e t e
% KESHITE
けして k e sh i t e
% TENMETSU
てんめつ t e N m e ts u
% NS_B
[s]             silB
% NS_E
[s]            silE

これらを以下のコマンドでコンパイルします。

$ mkdfa.pl denki

つかれましたね。

声でLED操作

つづいてpythonプログラムを書いて認識したによりLEDの制御を行います。
以下のファイルを追加してください。

flash.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO //LED点滅のプログラム
import time

def main():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(2, GPIO.OUT)
    for i in range(10):
        GPIO.output(2, True)
        time.sleep(0.1)
        GPIO.output(2, False)
        time.sleep(0.1)
    GPIO.output(2, GPIO.LOW)
juliustest.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import string
import led_h as on
import led_l as off
import flash


host = 'localhost'   # Raspberry PiのIPアドレス
port = 10500         # juliusの待ち受けポート

# パソコンからTCP/IPで、自分PCのjuliusサーバに接続
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))

data = ""
while True:

    # "/RECOGOUT"を受信するまで、一回分の音声データを全部読み込む。
    while (string.find(data, "\n.") == -1):
        data = data + sock.recv(1024)

    # 音声XMLデータから、<WORD>を抽出して音声テキスト文に連結する。
    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)
    if strTemp == "つけて":
        on.main()
    if strTemp == "けして":
        off.main()
    if strTemp == "てんめつ":
        flash.main()

    data = ""

認識するか試してみましょう。
新規タブを開いて

$ sudo modprobe snd-pcm-oss  //ねんのため
$ julius -C ~/julius/julius-kits/grammar-kit-v4.1/hmm_mono.jconf -nostrip -input mic -gram ~/辞書があるディレクトリ/denki -module &
$ python juliustest.py

うまくいきました・・・
LEDもうまく動作しています。
つかれすぎてめんつゆに見えますね。

参考記事

mooriii
React/Rails/Swift/Kotlin/Python
https://mooriii.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away