Juliusを使った音声認識システムの作成 | ソフトウェア開発のギークフィード

Juliusを使った音声認識システムの作成

こんにちは。唐突ですが、今回はJuliusに触れる機会があったので、Juliusについて書こうと思います!
(例に漏れず初心者向けの内容になっておりますので、ご了承ください。。)
ちなみに今回は、ブラウザから音声アップロード→Juliusで音声認識→結果をブラウザ画面に表示というのをNode.JSを使って実施したので、それに関するあれやこれやを記載していこうと思います。

Juliusとは

正直私はここからでした。検索すれば色々出てくるのですが、公式サイトには以下の様に説明されております。

音声認識システムの開発・研究のためのオープンソースの高性能な汎用大語彙連続音声認識エンジンです. 数万語彙の連続音声認識を一般のPCやスマートフォン上でほぼ実時間で実行できる軽量さとコンパクトさを持っています.(http://julius.osdn.jp/より)

オープンソースの音声認識システムということで、検索すると色んな方が色々試しているのが出てきます。また、商用利用も可、オフラインでも利用可能というところに大きな魅力があります。
認識率については、20,000語彙の読み上げ音声で90%以上と記載があります。ただこのあたりは辞書登録の内容の精度によって変わるっぽいです。
今回はJulius公式のdictation-kitを利用したのですが、認識率としてはうーん。。という感じでした。
(アナウンサーのようなハキハキとした喋り、雑音等ない音源だとある程度認識してくれるかな、というような印象。ここでは記載しませんがGoogle Cloud Speech APIを使って同じことをできるようにしたのですが、同じ音源でもやはりGoogleの方はかなり精度高く認識してました。)

やったこと

今回はJuliusを実装したサーバで直接音声を扱うのではなく、別のPCからブラウザ経由で対象のサーバに音声を送り、そこで認識結果を出してブラウザ上に表示させるというやり方をしました。
実は喋った内容をリアルタイムに認識させ表示することを元々目的としていたのですが(Googleの方ではそれも実装した)、PCからブラウザ経由でJuliusへリアルタイムに音声渡す→結果出力を出力するという方法がわからず断念したという経緯があります(これについては別途記述しますが)。直接マイクから音声を拾って音声認識というのは結構あったのですが。。

これを実現する為に、具体的には以下のことを行いました。

①Julius dictation-kit インストール
②Node.JSとその他必要なモジュールインストール
③https対応(とりあえずお試しなので自己証明)
④HTTPS,CSS,Javascriptを使ってブラウザ画面作成
⑤Node.JSでサーバ側処理を記述

とこんな具合です。すごい端折ってます(笑)
ちなみに③ですが、これはリアルタイム認識するときにchrome上からマイクをオンにして音声を取得するということをしたのですが、chromeの仕様上https通信でないとマイクアクセス許可できないらしく、この対応が入ってます。なので音声ファイルのみなら不要です。
正直意外とこの情報がなかなか検索してもヒットしなくて、ちょっとハマりました(なので備忘的な意味も兼ねて一応記載しておきました)。
また、全部を細かく書くのも難しいので、この記事では上記の中で私が実装するにあたってハマった部分や気になった部分をピックアップして記載していこうと思います。

Juliusインストール

何はともあれJuliusをインストールします。今回はdictation-kitを利用しました。※サーバのOSはCentOSです。
dictation-kitのデータはJulius公式からダウンロード可能です。
私は現時点で最新となっているVer.4.4を使用しました。
Ver.4.4はdictation-kitにJuliusも同梱されているので、とりあえずdictation-kitのzipだけ持ってくれば最低限Juliusを動作させることは可能です。
zip取得後、インストールするサーバの任意の場所にzipを配置し、以下のコマンドを実行します。

とりあえずこれでサーバにJuliusが入りました。サーバに入ってJuliusを直接動かすのであれば、これで音声認識させることが可能です。
例えば音声ファイルを使って認識させる場合、以下のコマンドを叩くとJuliusが起動します。

オプション-inputで音声の入力方法を指定します。rawfileと音声ファイルを指定している為、起動時にダーっと色々文字が流れてから、ファイルの場所を聞かれます。

サーバ上に認識してほしい音声ファイルをアップしておき、その音声ファイル名を標準入力で指定します。
そうすると、以下の様に認識結果が出力されます。

認識の結果はさておき、音声ファイルから認識→結果取得までできました。最初にwarningがたくさんありますが、これは音声ファイルの最初の無音部分なので特に無視で問題ありません。(それにしても怪文書だ。。)

ちなみに音声ファイルについては、Julius公式で記載のある通り、以下のフォーマットでないと認識してくれません。
チャンネル数:1(モノラル)
サンプリングレート:16kHz

また、認識時のオプションが色々あり、例えば「-cutsilence」というオプションをつけると、一定の無音時間を文章の区切りと判断し、文章を区切って結果出力してくれます。
ただ私がやりたかったのはサーバから直接コマンドを叩いてではなく、ブラウザ上から音声を音声認識させることなので、まだしばらく続きます。。

結構長くなってきたので次回に続きます。。

髙橋千紘

プログラミング開発できるエンジニアを目指し勉強中の身です。 今までは要件定義、仕様調整等、上流工程をメインとした仕事をしていました。

Leave a reply

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

ページトップへ