FreeSWITCH + mod_unimrcp + VoiceNavigator。 FreeSWITCHでのロシア語音声の合成と認識

VoiceNavigatorフリースイッチUniMRCP



アスタリスクとVoiceNavigatorの統合に関する一連の記事で、 VoiceNavigatorFreeSWITCHの統合について説明します



HabréにはFSに関するいくつかの記事と言及がありますが、彼はアスタリスクの人気と比較されません)



FreeSWITCHは、アスタリスクで具現化されたアイデアの継続と開発であり、可能な限りすべての基本機能が個別のモジュールで実行される、真のモジュールアーキテクチャを備えています。 これにより、ソフトフォンからソフトスイッチまで拡張可能なソリューションをより柔軟に作成できます。 FreeSWITCHは、XMLファイルを使用して呼処理アルゴリズムを制御するIVRアプリケーションのスイッチ、PBX、メディアゲートウェイ、またはメディアサーバーとして使用できます。



FreeSWITCHの場合、アスタリスクとは異なり、UniMRCPを個別にコンパイルする必要はありません。 UniMRCPサポートは既に追加されており、asr_tts / mod_unimrcpモジュールの形式でそのまま使用できます。



次に、FreeSWITCHのインストール、VoiceNavigatorの接続、およびテスト音声アプリケーションの作成について説明します。



FreeSWITCHをインストールする


FSのインストールはHabréと他のソースの両方で説明されているため、簡単に説明します。 幸いなことに、すべてがシンプルで手頃な価格です。 次に、CentOSでのインストールについて説明します。



www.freeswitch.orgからディストリビューションをダウンロードします。 執筆時点では、ディストリビューションの最新バージョンは1.0.6です。



コンパイルする前に、FreeSWITCHとそのモジュールの操作に必要なパッケージをインストールします。

yum install autoconf automake libtool gcc-c++ ncurses-devel make expat-devel zlib zlib-devel libjpeg-devel unixODBC-devel openssl-devel gnutls-devel libogg-devel libvorbis-devel curl-devel gdbm gdbm-devel







modules.confファイルにUniMRCPモジュールを追加するには、asr_tts / mod_unimrcp行のコメントを解除します。

Perlのダイヤルプランを使用するには、言語/ mod_perlのコメントを解除する必要もあります。



以下は、標準のコンパイル手順です。

  ./configure
作る
チェックする
インストールする
 cd-sounds-installを作成します
 cd-moh-installを作成します
 cd-sounds-ru-installを作成します
サンプルを作る 


インストール後、FreeSWITCHはすでに構成されており、使用する準備ができています。

デフォルト言語としてロシア語の使用を有効にするには、/ usr / local / freeswitch / conf / vars.xmlに追加して追加します

  <X-PRE-PROCESS cmd = "set" data = "default_language = en" /> 


実行するには、コマンド/ usr / local / freeswitch / bin / freeswitchを使用します

パフォーマンスをテストするには、パラメータuser-1000、パスワード-1234でソフトフォンを設定し、サーバーに登録した後、5000を呼び出します。FreeSWITCHが正しくインストールされている場合、テストIVRが聞こえます。



VoiceNavigatorをFreeSWITCHに接続する


1)ロードモジュールmod_unimrcpを追加します。

これを行うには、ファイル/usr/local/freeswitch/conf/autoload_configs/modules.conf.xmlを追加します

  <ロードモジュール= "mod_unimrcp" /> 


2)/ usr / local / freeswitch / conf / mrcp_profilesフォルダーで、MRCPサーバーのプロファイルを使用してvn.xmlファイルを作成します。

  <含める>
   <!-VoiceNavigator->
   <プロファイル名= "vn"バージョン= "1">
     <param name = "server-ip" value = "192.168.2.106" /> <!-VoiceNavigatorを搭載したコンピューターのIPアドレス->
     <param name = "server-port" value = "8000" /> <!-MRCPサーバーに接続するためのポート->
     <param name = "resource-location" value = "" />
     <param name = "speechsynth" value = "tts" />
     <param name = "speechrecog" value = "asr" />
     <param name = "rtp-ip" value = "192.168.3.161" /> <!-FreeSWITCHを搭載したコンピューターのIPアドレス->
     <param name = "rtp-port-min" value = "32768" />
     <param name = "rtp-port-max" value = "33268" />
     <param name = "codecs" value = "PCMU PCMA L16 / 96/8000" />
    </ profile>
 </ include> 


3)デフォルトで使用される新しく作成されたプロファイルを作成します。

これを行うには、/ usr / local / freeswitch / conf / autoload_configs / unimrcp.conf.xmlファイルで、デフォルトのプロファイルを示す行を修正します。

  <!-TTSに使用するUniMRCPプロファイル->
 <param name = "default-tts-profile" value = "vn" />
 <!-ASRに使用するUniMRCPプロファイル->
 <param name = "default-asr-profile" value = "vn" /> 


4)他のノードとのFreeSWITCH対話を有効にするには、ファイルを編集します

/usr/local/freeswitch/conf/autoload_configs/acl.conf.xml。VoiceNavigatorを搭載したマシンのIPアドレスを許可されたノードに追加します。

  <リスト名=「ドメイン」デフォルト=「拒否」>		
	 <node type = "allow" domain = "$$ {domain}" />
	 <!-アドレス192.168.2.106のノードとの対話を許可します->
	 <node type = "allow" cidr = "192.168.2.106/32" />	
 </ list> 


これで、VoiceNavigatorを使用してサーバーをFreeSWITCHに接続するセットアップが完了しました。



テスト音声アプリケーションを作成する


1)/ usr / local / freeswitch / grammar /フォルダーにdigits.gram文法ファイルを作成します

  <?xml version = "1.0"?>
 <grammar xmlns = "http://www.w3.org/2001/06/grammar" xml:lang = "ru-ru" version = "1.0" mode = "voice" root = "test">
     <ルールID = "テスト">
         <one-of>
             <item> 1つ</ item>
             <item> 2 </ item>
             <item> 3 </ item>
             <item> 4 </ item>
             <item> 5 </ item>
             <item> 6 </ item>
             <item> seven </ item>
             <item> 8 </ item>
             <item>ナイン</ item>
             <item> 10 </ item>
         </ one-of>
     </ rule>
 </ grammar> 


2)test_vn.xmlファイルにダイヤルプランを作成し、/ usr / local / freeswitch / conf / dialplan /に配置します

  <?xml version = "1.0" encoding = "utf-8"?>
 <含める>
   <コンテキスト名= "context_vn">
     <拡張子名= "welcome">
         <条件フィールド= "destination_number"式= "^ 777 $">
             <action application = "answer" />
             <action application = "set" data = "tts_engine = unimrcp:vn" />
             <action application = "set" data = "tts_voice = Maria8000" />
             <action application = "speak" data = "1〜10の番号を付けてください!" />
             <action application = "detect_speech" data = "unimrcp / usr / local / freeswitch / grammar / digits vn" />
             <action application = "sleep" data = "10000" />
             <action application = "hangup" />
         </ condition>
     </拡張子>
   </ context>
 </ include> 


FSダイヤルプランは扱いにくく読みにくいと思いますか? 私の意見では、それは非常にシンプルで明確です))



3)このアプリケーションを呼び出すには、ファイル/usr/local/freeswitch/conf/dialplan/default.xmlに追加します

  <拡張子名= "context_vn">
       <条件フィールド= "destination_number"式= "^ 777 $">
         <action application = "transfer" data = "777 XML context_vn" />
       </ condition>
 </拡張子> 




FreeSWITCHが構成され、合成および認識機能をテストする準備ができました。

FSを再起動して、変更を適用します。



これで、777を呼び出して、合成と認識を確認できます。 システムは1から10までの数字を要求し、認識結果をコンソールに表示します。



そして、ここが最も興味深い部分です。 この結果を取得して処理する方法は? アスタリスクで変数$ {RECOG_RESULT}を解析するのに十分だった場合、FreeSWITCHではこれにもっと複雑なイベントソケットメカニズムが使用されます。 より具体的には、Speech-Type:detected-speechのDETECTED_SPEECHイベント。

FreeSWITCHソケットの操作に関するトピックは、この記事の範囲外であり、別の素晴らしい説明に値します。

興味のある方は、 こちらこちらで詳細をご覧 ください



All Articles