FC2ブログ

スマフォのアプリを作りたい(28):スマフォだけで動作する音声認識④

   プログラミング [2020/07/18]
JuliusをAndroidスマフォ上で動作させたいと思ってます。
概ね
Ⅰ.まずはJavaコードからC関数を呼び出すようなアプリの作り方を調べます。
Ⅱ.Javaコード(Cライブラリ含む)をReact Nativeで使えるパッケージ化方法を調べます。
Ⅲ.React Nativeにパッケージを取り込んで、Build&Go。
の順番かと思ってますが、このサブタイトルで4回目にもなるのですが未だの途中です。

前回、JuliusLib(libjulius&libsent)をAndroidStudioのC++プロジェクト内に持ち込んで、
ビルドして、実行してみるところまでやりました。
とはいっても、肝心な音声認識を確認するところまでは届いてなくて、「起動はした」止まりです。

続きです。


◆JuliusLibの動作のさせかた調査
「ちょっと、移植作業としての順番がおかしくねーか」と言われそうですが、こんな感じです。

提供されているjulius-simple.cをビルドしたバイナリは、dictation-kit-4.5には含まれていないみたい。
実際にPC版とかを動かして確認するのはちょっと面倒そう。
なので、JuliusBookとソース等からJuliusLib&julius-simpleの使い方を調べます。

1)まずはJuliusLibの起動パラメタには何を指定するのか?
julius-simpleのオリジナルコードは起動パラメタをそのままライブラリに渡している。
指定できるパラメタ(オプション)に「-C」があることをライブラリ内のソースから確認しました。
その他は、-AM|-AM_GMM|-LM|-SR|-GLOBAL|-sectioncheck|-nosectioncheck|・・・(※多すぎたので省略)などがありました。

ともかく、-C.jconfファイルが指定できれば、上記のその他の動作パラメタは.jconfファイルに記載して指定できるはず。


2)じゃあ、.jconfファイルってどんな?
ディクテーションキット内に00readme-ja.txt(英:00readme.txt)というファイルがあり、その中に仕様が記述されていました。
dictation-kit-4.5\src\julius-4.5\libjulius\00readme-ja.txt
(前記の調べは、このファイルを読めば分かることでした。^^;;)
また、サンプルの.jconfファイルも含まれていた。コメントとしてパラメタの概説も載ってます。
dictation-kit-4.5\main.jconf
これをベースにします。


3)今回Android上で確認したい機能と制約は?
試したいのは個別単語辞書に基づいた単語認識です。
「スマフォのアプリを作りたい(25)」で試した動作をスマフォで確認したい。
「julius.exe -w 個別単語辞書 -h 音響モデル -input mic」と同様のことを試すということです。
ただし、前回のビルド段階で「Juliusが前提としているサウンドシステムは、Android SDK(NDK)標準では含まれていない」ことが分かったので、マイク入力は使えません。

よって、.jconfファイル/個別単語辞書/音響モデル/音声ファイルをAPK含めて、
native-lib.cppでは、argv[]指定を「-C .jconfファイル」※として起動して、単語認識が動作するか確認します。
(※この点は、予想通りなので、native-lib.cppの修正はせずに済みそう・・・?)


4)単語辞書と音声ファイル等を準備する
【単語辞書】
「スマフォのアプリを作りたい(25)」で作った単語辞書は、「読み」の記述の仕方が正しくありませんでした。
例えば、「体操  たいそう」は、「体操  たいそー」にしないといけない。
作り直します。やり方は、「スマフォのアプリを作りたい(25)」に書いてあります。

【音響モデル】
ディクテーションキットに含まれていたjnas-mono-16mix-gid.binhmmを使用させていただきます。
dictation-kit-4.5\model\phone_m\jnas-mono-16mix-gid.binhmm

【音声ファイル】
音声ファイルはwavでいいみたいなので、開発タブレットPCで自分の声を録音して作ります。
と簡単に思って始めたが、結構面倒だった。

まずは、Windowsのサウンドレコーダーでよかろうと思って探したが・・・ない!
Windows10からはボイスレコーダーっていう名前に変わってたのね。
早速、起動してマイク入力して録音してみた。
録音音声はどこに?
ライブラリ>ドキュメント>サウンドレコーディング(C:\Users\(ユーザID)\Documents\サウンド レコーディング)でした。
ファイル拡張子が.m4aです。(.wavでよかったのに。)
サウンドレコーダー自体に.wavで保存する機能は・・・ない!んだよねきっと。

audacityをインストールしてなかったか?・・・ない!
(以前のHDDパンクの折にアンインストールしてしまったようだ。)
再ダウンロード&インストールを実施し、audacity起動して、録音した.m4aを開こうとしたら・・・エラーが出た。
FFmpegというやつが必要なのだそうだ。
FFmpegをダウンロードしてインストール。(最初からaudacityで録音すれば良い話なのだが・・・)
audacityを再起動して、やっと.m4aが開けた。

JuliusBookにあるように、入力音声のタイプとして指定できる属性もあるが、デフォルトでサポートしているのはモノラル/16bit/16000hzのようなので、それに合わせて.wav出力する。
audacityの場合、サンプリングレートの変換はプロジェクトの属性を予め出力するレートに変更しておく必要があるようでした。

【ファイル名リスト】
JuliusBookによると、音声ファイルを入力音源として使用する場合、「-input=rawfile -filelist ファイル名リスト」として指定するみたいです。
なので、ファイル名リストというのも準備します。
単に「音声ファイル名[改行]」の繰り返しのテキストファイルを作成しました。
念のため文字コード指定はUTF-8にしておきました。

【.jconf】
dictation-kit-4.5\main.jconfをコピーして、natibe-lib.cpp内で指定してあった「simple_keyword.jconf」という名前でセーブ。
以下の記述を追加しました。
----simple_keyword.jconf---------------------------

#!!-C simple_keyword.jconf

-input rawfile

-filelist invoicename.txt

-w teburarecword.dict

-h jnas-mono-16mix-gid.binhmm

---------------------------------------------------


これで、JuliusLibに必要なデータ(ファイル)類と動作パラメタの指定の仕方がざっくりわかりました。
では、これらをAPKに入れて、プログラムから使わせる方へ話を進めます。
・・・

続きを読む

スポンサーサイト





カレンダー
06 | 2020/07 | 08
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
プロフィール

さるもすなる

Author:さるもすなる
さるです。別HPサイト「さるもすなる」から侵食してきました。 山菜/きのこ、それとタイトルにしたPPバンド籠のことをメインに徒然に・・・・暇を持て余したさるの手仕事:男手芸のブログってことで。

最新記事
最新コメント
月別アーカイブ
カテゴリ
天気予報

-天気予報コム- -FC2-
本家のHPのトップ
山菜や茸の話です
PPバンドの籠作品と作り方です
投稿をお待ちしております



PVアクセスランキング にほんブログ村 にほんブログ村 ハンドメイドブログへ



マニュアルのお申し込み



検索フォーム
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR