オープンソースの音声認識エンジンJulius を使って node 上でディクテーションしたい。
ディクテーションとは口述書き取りのこと。
ようするに自動書記的なことをやりたいというわけです。
精度的にも Web Speech API を使うのがよいのですが、ネットワークが使えない場合などはローカルでどうにかするしかない。
ちなみに音声認識だったら、凹みさんの node-julius が簡単便利。
しかし今回は、音声を文章化するのが目的なので、ディクテーションキットを落としてくる
http://julius.sourceforge.jp/index.php?q=dictation-kit.html
Mac環境なので Mac OS X版 DNN版Juliusディクテーション実行キット v4.3.1 をDLする。
解凍後、dictation-kit-v4.3.1-osx ディレクトリに移動し、サーバー(モジュール)モードで起動
./bin/julius -C main.jconf -C am-gmm.jconf -module 10500
だだだっとログが出力され、最後に下記がでたら起動成功
Stat: server-client: socket ready as server
///////////////////////////////
/// Module mode ready
/// waiting client at 10500
///////////////////////////////
telnet localhost 10500 でも接続できる。
これを node の net モジュールで接続するには下記のようにする。
var net = require('net');
var client = net.createConnection(10500, 'localhost', function()
{
console.log('connected.');
});
client.on('data', function(data)
{
console.log(data.toString());
client.end();
});
client.on('end', function()
{
console.log('disconnected.');
});
Julius とは別プロセスで node を起動。
node server.js
マイクにむかって発話すると候補を出力してくれる。
精度は...うーん...
<RECOGOUT>
<SHYPO RANK="1" SCORE="-2287.151367">
<WHYPO WORD="" CLASSID="<s>" PHONE="silB" CM="0.407"/>
<WHYPO WORD="中嶋" CLASSID="中嶋+名詞" PHONE="n a k a j i m a" CM="0.036"/>
<WHYPO WORD="。" CLASSID="</s>" PHONE="silE" CM="1.000"/>
</SHYPO>
</RECOGOUT>
アキラっていったつもり
結果はXMLで出力されるので、パースしてよしなに使う。