[[Tutorial]]

#contents

*音声認識 [#t40318dd]
ここではSIGVerseで音声認識を行う方法を説明します。

※NIIサーバではSIGVerseのバージョン101104以降で正常に動作します。また、音声認識を行うためには、SIGVerseのインストール時にJulius(音声認識を行うソフト)やdictation-kitの場所を指定する必要があります。指定方法は[[こちら>SIGVerseのインストール(NIIサーバ)]]
**音声データ(waveファイル)の音声認識 [#pc99087f]
ここではあらかじめ用意されているサンプルの音声データ(waveファイル)を音声認識してみたいと思います。

**コントローラ作成 [#m6feace7]
***コントローラ作成 [#m6feace7]
音声データを受け取り、音声認識を行うエージェントのコントローラを作成します。
 $ cd ~/sigverse-<version>/bin/NewWorld
 $ emacs soundRecog.cpp

soundRecog.cpp

 #include <Controller.h>
 #include <ControllerEvent.h>
 #include <RawSound.h>
 #include <Logger.h>
 #include <Text.h>
 
 
 class AgentController : public Controller
 {
 public:
 
   //音声データを受け取った時に呼出される関数onRecvSoundの利用を宣言します。
   void  onRecvSound(RecvSoundEvent &evt);
 };
 
 void AgentController::onRecvSound(RecvSoundEvent &evt)
 {
   //音声データを取得します。
   RawSound * sound = evt.getRawSound(); 
 
   // 音声認識結果をテキストで取得します。
   Text * text = getText(*sound);
   if (text) { 
 
     // 音声認識結果を表示します。
     const char * str = text->getString();
     LOG_MSG(("text : %s", str));
 
     // 必要なくなったらテキストデータをdeleteします。
     delete text;
   }
 
 }
 
 extern "C"  Controller * createController ()
 {
   return new AgentController;
 }

***コンパイル [#gdda3ca6]
Makefileを修正します。
 $ emacs Makefile

オブジェクトファイルの指定のところをsoundRecog.soを指定します。

 #オブジェクトファイルの指定
 OBJS     = soundRecog.so

#ref(makefile_sound)


コンパイルします。
 $ make

***世界ファイル作成 [#l5f5ce8b]
 $ cd ..
 $ emacs xml/soundRecog.xml

 <?xml version="1.0" encoding="utf8"?>
 <world name="VisTest2">
 
   <gravity x="0.0" y="-9.8" z="0.0"/>
 
 <!--音声データ受信エージェントRobot-niiの設定-->
   <instanciate class="Robot-nii.xml"> 
 
         <set-attr-value name="name" value="robot_000"/>
         <set-attr-value name="language" value="c++"/> 
 
 <!--音声データ受信者のコントローラ指定-->
         <set-attr-value name="implementation"
 value="./NewWorld/soundRecog.so"/>
 
 <!--動力学演算をfalseに設定-->
         <set-attr-value name="dynamics" value="false"/>
 
 <!--エージェントの位置(x,y,z)-->
        <set-attr-value name="x" value="0.0"/>
        <set-attr-value name="y" value="60.0"/>
        <set-attr-value name="z" value="-60.0"/>
 
 </instanciate>

これで準備完了です。

***SIGVerse,Juliusの起動 [#q211f39e]
まずSIGVerseを起動します。
 $ ./sigserver.sh -p 9001 -w soundRecog.xml $
次にJuliusを起動します。エンターキーを押してコマンドを続行します。
 $ ./sigjsp.sh -p 9001
sigjsp.shというシェルスクリプトでJuliusを起動します。また、シミュレーションサーバが起動しているポート番号を-pオプションで指定してJuliusが起動したことを知らせます。

以下のようなメッセージが表示されればJuliusは正常に起動しています。

 Stat: adin_tcpip: waiting connection...
 ===================================
   julius adinnet port connect ok!
 Stat: server-client: connect from 127.0.0.1
 Stat: adin_tcpip: connected
 ===================================
 ***************************************
 ***   julius successfully started   ***
 ***************************************
 *******************************************************
   connect to SimServer (localhost:9111) ok
 *******************************************************
 clerkName (socio.iir.nii.ac.jp)
 send COMM_REQUEST_PROVIDE_SERVICE ok
 waiting for connection ... (accept sock: 7)
 [SYS]  socio.iir.nii.ac.jp:7500  : service provider
 [SYS]  127.0.0.1 connected

***SIGViewerから音声データの送信 [#jac958b8]

SIGVerse,Juliusが起動している状態で、クライアント側でSIGViewerを起動し、サーバに接続します。接続が完了するとロボット型エージェントが立っているのが見えると思います。

次にSIM_STRL_CMDがSTARTとなっている状態で、"send"ボタンを押してシミュレーションを開始し、右上にあるCommandタブをクリックします。一番上の入力欄はgeneralとvoiceを選択できるようになっています。ここではvoiceを選択します。次に"送信対象選択"ボタンをクリックしてロボット型エージェントをクリックします。次に"Send Voice"ボタンをクリックします。

#ref(sound_1.jpg)

送信する音声データを選択するダイアログが表示されるので、SIGViewerをインストールしている場所、デフォルトでは

C:\Program Files\SIGViewer_<version>\SIGViewer\release

にあるsample.wavを選択して、音声データを送信します。
すると以下のようなメッセージが表示され、
"貧乏参考ください"という音声認識結果が表示されると思います。

 connection accepted. (sock=8)
 waiting for connection ... (accept sock: 7)
 connection accepted. (sock=8)
 
 waiting for connection ... (accept sock: 7)
 [MSG]  robot_000(127.0.0.1) text : 貧乏参考ください。

音声データ(sample.wav)を聞いてい見ると"リンゴを三個ください"と言っていますので、少し間違って認識されているのがわかります。


Front page   New List of pages Search Recent changes   Help   RSS of recent changes