Open2

node.jsで音声入力のVOSKを動かす

masaobluemasaoblue

参考

https://dev.classmethod.jp/articles/vosk/

vosk-api をcloneして、↑にも記載がある通りvosk-model-small-ja-0.22.zip をDL、解凍して vosk-api/nodejs/vosk-model-small-ja-0.22 に配置して、とりあえず起動しようとしてみる

cd nodejs
npm i
node demo/test_microphone.js  

dylibファイルが無いと怒られる

...
vosk-api/nodejs/lib/osx-universal/libvosk.dylib' (no such file)

以下のコメントで貼られているリンクからtgzをダウンロードして解凍

https://github.com/alphacep/vosk-api/issues/897#issuecomment-1545923304

解凍した中の lib ディレクトリをコピーして vosk-api/lib に配置

再度実行するとcannot be opened because the developer cannot be verified 的なエラーのダイアログが表示されて実行できないので、以下の手順で実行できるようマークする(自己責任)

https://support.apple.com/ja-jp/guide/mac-help/mh40616/mac

再度実行すると、冒頭の記事と同じエラーが出た

LOG (VoskAPI:ReadDataFiles():model.cc:303) Loading winfo ./vosk-model-small-ja-0.22/graph/phones/word_boundary.int
node:events:491
      throw er; // Unhandled 'error' event
      ^

Error: spawn rec ENOENT
    at Process.ChildProcess._handle.onexit (node:internal/child_process:283:19)
    at onErrorNT (node:internal/child_process:478:16)
    at processTicksAndRejections (node:internal/process/task_queues:83:21)
Emitted 'error' event on ChildProcess instance at:
    at Process.ChildProcess._handle.onexit (node:internal/child_process:289:12)
    at onErrorNT (node:internal/child_process:478:16)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'spawn rec',
  path: 'rec',
  spawnargs: [
    '-b',       '16',
    '--endian', 'little',
    '-c',       '1',
    '-r',       '16000',
    '-e',       'signed-integer',
    '-t',       'raw',
    '-'
  ]
}

これは記載の通り brew install sox で解決

masaobluemasaoblue

とりあえず認識はできる。けど実用的かと言われるとそうでもなさそう。
オプション指定とかでもう少し改善できるのかな

実用的ではない所

  • 話し始め、終わりが途切れやすく感じる
  • かなりハキハキ喋らないとちゃんと認識されない
  • 数字はなかなか入力してくれない
    • 日本語モデルだからなのかもしれない

モデルはsmallの方ではなく vosk-model-ja-0.22.zip の方を使う & ソースコード側でsample rateを48000に上げるなどしてみて、多少は改善されるけどそれでも上記な感じ。
滑舌良く喋ろうとすると煩くなって隣の部屋の嫁にツッコまれそうなので、もう少しボソボソ目でも聞き取れる方法を使いたい