0

Android Wearで音声入力からアプリ起動する

これ
Adding Voice Capabilities | Android Developers

「Start MyRunningApp」ってやつ全然起動しなくてよくわからなかったんだけど、解決した。


AndroidManifest.xml

こう書くのが正解。「ドア 開いて」とか言えばWearMainActivityが起動する。
<activity
android:name=".WearMainActivity"
android:label="ドア" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>


日本語

Android本体の言語設定が日本語の場合はWearの音声認識も日本語として認識しようとする。
android:labelに「door」とか書くと認識できず、「boa」とか「dooors」とか日本のgoogleで検索してそれなりにヒットする固有名詞になってしまう。おとなしく日本語で「ドア」と書かないと認識できない。

他のアプリでも、「twitter 起動」や「facebook 起動」はちゃんとアプリが起動するけど、「Yo 起動」は「陽気堂」に、「Yo 開いて」は「よう平井堅」になるので「ワイオー 起動」と言う必要がある。たぶんYoとかはandroid:labelに”Yo”って書いてあるのだろう。ローマ字を日本語発音で1文字ずつ読み上げると認識される。

Hue Controlというwearのアプリはwearからhueのon/offができるけど、これも「エイチユーイー コントロール 起動」と言わないと起動できない。


トリガー

「開いて」以外にも「ドア 起動」「ドア 起動して」「ドア 起動して下さい」などでも起動する。

相性があるみたいで、「twitter 起動して」はtwitterアプリが起動するのに、「twitter 開いて」は「ひらいて」という名前の人のtwitterアカウントが開いてしまう。

1

Juliusの辞書が作れない

こうなってしまう

book.grammar has 4 rules
book.voca has 5 categories and 7 words
---
---
no .dfa or .dict file generated
エラーもでない。
juliusのBBSで事例を探すと”—“の間にエラーが表示されるらしいけど何も書かれない。
mkdfa.plをprintfデバッグしたら、どうやら同じディレクトリにあるmkfaが正常に終了していないらしい。


また、mkfaを直接実行すると
zsh: そのようなファイルやディレクトリはありません: /home/sho/tmp/src/grammar-kit-v4.1/bin/mkfa
になってしまう。もちろんmkfaは存在する。


■手順
を見ながら文法と発音を作る。
本を探す簡単な文法「(書誌名)をください」もしくは「(書誌名)ください」を認識する辞書を作りたい。


book.grammar
S      : NS_B BOOK_ PLEASE NS_E
BOOK_ : BOOK
BOOK_ : BOOK WO
PLEASE : KUDASAI

book.voca
% BOOK
インターフェース i N t a a f e e s u
マンガ m a N g a
雑誌 z a s sh i
% WO
を o
% KUDASAI
ください k u d a s a i
% NS_B
<s> silB
% NS_E
<s> silE

Julius記述文法音声認識実行キットのLinux版をダウンロードしてきて、Ubuntu11.04でtarを展開。
辞書作成する
perl ~/tmp/src/grammar-kit-v4.1/bin/mkdfa.pl book
するとこうなる
/tmpbook.grammar has 4 rules
book.voca has 5 categories and 7 words
---
---
no .dfa or .dict file generated
book.termだけ生成される。

■試したこと
  • 記述文法音声認識実行キットに付いているサンプル辞書は実行できた
  • キットに付いているサンプルのgrammarとvocaファイルから辞書を生成しようとすると、やはり”no .dfa or .dict file generated”になる
  • 文法や発音ファイルをshift_jisやeuc-jpで保存しなおしたが変化なし
  • mkdfa.plをprintfデバッグしたら、mkfaがエラー(1)を返していた
  • mkdfa.plが生成する中間ファイルを使って自分でmkfaを呼び出すと、mkfaが存在しないと言われる
  • zshと相性が悪いのかもしれないので、bashで試しても同様にmkfaが存在しないと言われる

0

Juliusで音声認識したのだが、精度が低い

Julius動かしてみたけど、なんだか認識精度が低くてどうしょうもないのですが、何か間違っているのでしょうか・・?


■まずMacにインストールした

sudo port install julius
homebrewにはパッケージはない。


http://julius.sourceforge.jp/からソース持ってきてコンパイルしても使えるらしいが、juliusは32bitでしか動かないし、Lionではcoreaudioではなくportaudioを使わなければならないらしいのでportaudioも32bitでインストールして・・と色々面倒だ。
homebrewのportaudioをuniversal binaryでインストールできなかったので、自分でjuliusをビルドしてインストールはあきらめた。


音声認識する
which julius_demo
julius_demo
でしばらく待つと、
<<< please speak >>>
となってMacのマイクから音声認識できる。
でも大体間違ってる。


wavファイルから認識してみる。
QuickTimePlayerで[ファイル]→[新規オーディオ収録]で録音できる。
m4aで保存されるので、juliusが認識できるフォーマット(モノラル16kHzのwav)にffmpegで変換した。
ffmpeg -i test.m4a -ac 1 -ar 16000 test.wav

julius_demo -input stdin < test.wav
wav入れたらテキストになってでてきた。でもやっぱりあまりうまく認識してくれない・・


julius_demoの中身はshell scriptだった。
#!/bin/sh
/opt/local/bin/julius -C /opt/local/lib/julius/fast.jconf "$@"


■Ubuntuにもインストールした
sudo apt-get install julius libjulius-dev

ディクテーションキットが別に必要になる。
ダウンロードする。
mkdir ~/tmp
cd ~/tmp
wget "http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fjulius%2F51158%2Fdictation-kit-v4.1.tar.gz"
tar -zxvf dictation-kit-v4.1.tar.gz


さっき録音したファイルを認識させる
julius -C ~/tmp/dictation-kit-v4.1/fast.jconf -charconv EUC-JP UTF-8 -input stdin < test.wav
やっぱり精度が悪い・・どうすれば・・・


-moduleを付けて起動するとTCP port 10050でサーバーが起動する。