-
Notifications
You must be signed in to change notification settings - Fork 0
Julius OpenJtalk(言語認識と発話)
知識の共有
juliusを今回の実験での用法に合わせて簡単に説明すると
特定の単語を集めた辞書ファイルを指定して起動→認識の結果単語などの情報が返ってくる というもの
使おうと思えばn-gramを指定して文法を考えることもできる
単語辞書の書き方 https://julius.osdn.jp/juliusbook/ja/desc_lm.html#id2533466
プログラムは認識方法や使う辞書ファイルをしていするオプションを記述した.jconfを指定して起動
例 $./julius -C fast.jconf
設定(指定する辞書ファイル)を変えたいならjconfの中を編集する
オプション一覧 https://julius.osdn.jp/juliusbook/ja/desc_options.html
1.APIを使ってモジュールとしてjuliusを組み込む
APIを使ってjuliusを本体に組み込む。認識が終わるとjuliusにコールバック登録した関数が呼び出されるので、その関数の中であらかじめ関数ポインタホに入っているストプログラムの関数を呼び出す。
Julius API http://www.sp.nitech.ac.jp/~ri/julius-dev/doxygen/julius/4.0/ja/group__jfunc.html
外部との通信でないためにraspiに処理の負荷がかかる。
2.モジュールモード
モジュールモードとしてデフォルトで入っているjuliusのプログラムを立てて、認識結果を返させる。デフォのポート番号10500を指定して結果をTCP/IP通信で取ってくる。この方式では認識結果に入る余計な文字を取り除くためにパーサとしてpythonによるプログラムなのでサーバープログラムを立てておく必要がある。そことホストを通信させる。
参考資料 http://lang.sist.chukyo-u.ac.jp/classes/seminar/2015/HowToControlRobotWithJulius.pdf
上記は類似したロボット実験の資料なのでかなり参考になる
###具体的な使い方(1/29)
Voicerecクラスについて
Voicerec::getInstance();でインスタンスを返す。
各関数の説明
int Init(); //起動時に必ず呼び出す。Juliusの設定とか
std::string Wait_One_Sentence(int seconds); //引数の秒間待って、その間音声を認識したらすぐに結果の文字列を返す。その間に認識しなかったら""(空文字)を返す
int Wait_One_Code(int seconds); //引数の秒間待って、音声を認識したら voice_recognition/voicecode.hppにdefineしてある対応するコードを返す
//voicecode.hppの例
define VC_CODE_FORWARD 0
define VC_CODE_BACK 1
define VC_CODE_RIGHT 2
define VC_CODE_LEFT 3
define VC_CODE_ROTATE 4
define VC_CODE_STOP 5
define VC_CODE_FIRE 6
void Register_Callback(FUNCTYPE1 f); // void を返り値・std::stringを引数とする関数を引数にとり、コールバックに登録する。
//音声認識をするたび、登録した関数に認識結果が引数として渡されて実行される。
void Finalize();//終了時に呼び出す関数
int ChangeMode(int); //認識の辞書ファイルを変更するときに用いる関数。voice_recog.hpp内にdefineしてある MINEJCONFかFASTJCONFを渡す。
発話
Speechクラスについて
Speech::getInstance();でインスタンスを返す。
各関数について
void Init(); //起動時に呼び出す。OpenJtalkの設定などをしている
void Finalize();//終了時に呼び出す
int Speak(std::string); //引数に指定した文字列を普通の感情で喋らせる。 音声ファイルはtext_to_speech/voices以下に格納される
int Speak(std::string, int feeling);//引数に指定した文字列を指定した感情で喋らせる。指定する感情は text_to_speech.hppにdefineされており
define NORMAL_FEEL 0
define ANGRY_FEEL 1
define HAPPY_FEEL 2
define SAD_FEEL 3
define BASHFUL_FEEL 4
//上記の感情を指定できる。
//一度喋った音声はもう一度作り直す必要が無いのですぐに喋ることができる。ただし、初めての文だと2〜3秒ラグが発生する。
//本番前に想定される発話は実行してvoices内に音声ファイルをためておこう