ラズパイで音声認識③ julius認識結果の利用
はじめに
前回までに、辞書を作り単語を音声認識させるところまで作成しました。 今回は認識結果を受け取って何らかの処理をするプログラムを作りたいと思います。
ひとまずお勉強
と、そのまえにjuliusの認識結果を外部で利用するためにはソケット通信とかXML形式とはなんぞやってのを知っておいたほうがいいようなのでまずはそこの勉強から。
ソケット通信
簡単に言うとプログラムの世界とTCP/IPの世界を結ぶ特別な 出入り口だそうです。こちらの説明でなんとなく概要は理解しました。例えがとてもわかりやすい。
http://research.nii.ac.jp/~ichiro/syspro98/socket.html
XML形式
簡単に言うと、マークアップ言語のひとつでHTMLの親戚みたいなものだそうです。マークアップ言語ってなんぞやってことですけど、タグで囲む(マークをつける)ことで構造を表現する言語です。
https://wa3.i-3-i.info/word1577.html
XMLの仕様を決めているのはW3Cという組織みたいです。世界標準のルール決めてるなんてかっこいいですね。
XMLとその関連仕様などを策定しているのがW3C。ダブル・サン・シーなどと呼ばれている。インターネットではさまざまな技術が使われているが、TCP/IPのような基本的なプロトコルは主にThe Internet Engineering Task Force(IETF)で決められており、W3Cの役割は、HTMLやHTTPそしてWebサービスといった上位層で使われる標準技術の策定にある。
引用元:
https://www.atmarkit.co.jp/ait/articles/0204/26/news002.html
juliusの出力メッセージはXML形式で書かれています。仕様は公式ドキュメントの10章に書いてあります。
つくってみる
Julius認識結果出力を受け取るプログラム
こちらを参考にさせていただきました。
曲名を認識して、その歌いだしをコンソールに出力しようというプログラムです。
(ソースうまく貼れなかったので画像にしました…ソースの載せ方はまた調べてみます)
実行!!
サーバー側とクライアント側、それぞれ実行します。
毎度のことですがパスは適宜読み替えてください!
サーバー側(julius)
$ ./julius -C ~/julius-kit/dictation-kit-v4.4/word.jconf -module
-Cオプションの後に前回作成した.jconfファイルを指定します。
-moduleというオプションをつけて実行するとJuliusはポート番号10500で接続待ちをします。ここでクライアントから接続されると音声認識待ちになり、実際に認識した時のクライアントへの出力はXMLで送られます。
http://hyottokoaloha.hatenablog.com/entry/2015/07/03/131305
クライアント側(juliustest.py)
$ python juliustest.py
結果
ででーん。
ちゃんと歌いだしが出力されました!
あとは認識結果のif文の中身をあれこれ書き換えれば
何だってできそうです。
次はGPIOの制御でも勉強して、認識結果を現実世界に反映させる何かをつくりたいです。