3

これを機能させるために、過去3週間を費やしました。github で入手できる googletts.agi スクリプトを使用して、アスタリスクから音声ダイヤルしたいと考えています。それは機能しますが、問題は、18004633339のような「発話」変数の数字の代わりに単語を返すことがあるという問題です。

https://github.com/zaf/asterisk-googletts https://github.com/zaf/asterisk-speech-recog

以下のリンクには、単語を数字に変換するスクリプトがあります

http://www.karlrixon.co.uk/writing/convert-numbers-to-words-with-php

これが私のダイヤルプランです

exten => 2255,1,Answer()
exten => 2255,n,Wait(1)
;exten => 2255,n,flite("Say the number you wish to call. Then press the pound key.")
exten => 2255,n,Espeak("Say the number you wish to call. Then press the pound key.")
exten => 2255,n(record),agi(speech-recog.agi,en-US)
exten => 2255,n,Noop(= Script returned: ${status} , ${id} , ${confidence},            ${utterance} =)
exten => 2256,6,Set(NUM2CALL=${utterance})

${utterance} または NUM2CALL 変数を取り、アスタリスクでダイヤルできる適切な番号に単語が含まれている場合は修正するコードが必要です

exten => 2255,n,SayDigits("${NUM2CALL2}")
exten => 2255,n,Background(vm-star-cancel)
exten => 2255,n,Background(vm-tocallnum)
exten => 2255,n,Read(PROCEED,beep,1)                                        
exten => 2255,n,GotoIf($["foo${PROCEED}" = "foo1"]?15:16)
exten => 2255,15,Goto(outbound-allroutes,${NUM2CALL2},1)
exten => 2255,16,hangup

ディクショナリ配列に追加できれば、最終的には非常に正確な音声ダイヤラができると考えています。私はトロポ ASR のテストに 4 日間を費やしました。1 桁の場合は非常に正確ですが、複数桁の場合は精度が急速に低下します。ご協力いただきありがとうございます。完成したスクリプトは、プロジェクトとして github に投稿します。私は TIDIGITS の文法とモデルでも pocketphinx を試しましたが、同様の問題を起こしていた pocketphinx のデフォルトの辞書よりもさらに悪いものでした。

4

1 に答える 1

1

AGIPHP-AGIを使用すると、関数を呼び出すことができます。変数convert_word_to_numberを設定します。これは、AGI スクリプトの実行後に Dialpan で使用できます。

ダイヤルプランでは

exten => 2256,6,Set(NUM2CALL=${utterance})
exten => 2256,n,AGI(/home/asterisk/agi-bin/words_agi.php);

そしてAGIスクリプト:

#!/usr/bin/php -q
<?php
set_time_limit(30);
require_once 'phpagi.php';

// replace this function with yours
function convert_word_to_number($word) {
   $words = array(
     'tree',
     'too',
      // ...
    );
    $numbers = array(3,2)
   // replace words with numbers - example only
   $num = str_replace($words, $numbers, $word);
   return $num;
}

$agi = new AGI();
$word = $agi->get_variable("NUM2CALL"); 
$spokenNumber = convert_word_to_number($word);
$agi->set_variable("NUM2CALL", $spokenNumber);

より正確なバージョンのconvert_word_to_number単語を数字に置き換え、それを関数に置き換えるだけで実装する必要があります。

于 2012-10-11T08:10:59.997 に答える