Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
|
яндекс_голос [2015/08/28 09:59] 83.220.55.174 |
яндекс_голос [2015/08/28 12:59] (текущий) |
скрипт php-agi. | #!/usr/bin/php -q |
| <?php |
| #Требуется пакет SOX |
| |
''#!/usr/bin/php -q\\ | |
<?php\\ | |
#Требуется пакет SOX \\ | |
| |
| #Пример вызова из dialplan |
| #;Voice Module |
| #exten => _504,1,Answer |
| #exten => _504,n,Record(/tmp/${UNIQUEID}.wav,3,20); |
| #exten => _504,n,AGI(yandex-voice2.php,/tmp/${UNIQUEID}); |
| #exten => _504,n,NoOp(${TEXT}); |
| #exten => _504,n,Hangup |
| |
#Пример вызова из dialplan\\ | |
#;Voice Module\\ | |
#exten => _504,1,Answer\\ | |
#exten => _504,n,Record(/tmp/${UNIQUEID}.wav,3,20);\\ | |
#exten => _504,n,AGI(yandex-voice2.php,/tmp/${UNIQUEID}); \\ | |
#exten => _504,n,NoOp(${TEXT});\\ | |
#exten => _504,n,Hangup\\ | |
| |
| |
| #получаем переменные из AGI |
| $agivars = array(); |
| while (!feof(STDIN)) { |
| $agivar = trim(fgets(STDIN)); |
| if ($agivar === '') |
| break; |
| |
#получаем переменные из AGI \\ | $agivar = explode(':', $agivar); |
$agivars = array();\\ | $agivars[$agivar[0]] = trim($agivar[1]); |
while (!feof(STDIN)){ \\ | } |
$agivar = trim(fgets(STDIN)); \\ | extract($agivars); |
if ($agivar === '')\\ | |
break;\\ | |
| |
$agivar = explode(':', $agivar); \\ | $filename = $_SERVER["argv"][1]; |
$agivars[$agivar[0]] = trim($agivar[1]);\\ | |
}\\ | |
extract($agivars); \\ | |
| |
$filename = $_SERVER["argv"][1];\\ | #ключ от yandex speech kit можно получить на: |
| #https://developer.tech.yandex.ru/ |
| #требуется учётка яндекса |
| $key = '6be78e3c-6184-4f83-b18d-cf33c6727735'; |
| |
#ключ от yandex speech kit можно получить на:\\ | |
#https://developer.tech.yandex.ru/\\ | |
#требуется учётка яндекса\\ | |
$key = '6be78e3c-6184-4f83-b18d-cf33c6727735';\\ | |
| |
\\ | #$topic = 'maps' — тема для распознавания, возможны следующие варианты: |
#$topic = 'maps' — тема для распознавания, возможны следующие варианты:\\ | #• freeform — произвольный текст, заметки и т.д. Вариант применения: переводим в текст сообщение голосовой почты и отправляем его на email или виде SMS. |
#• freeform — произвольный текст, заметки и т.д. Вариант применения: переводим в текст сообщение голосовой почты и отправляем его на email или виде SMS.\\ | #• general — web поисковые запросы, не могу придумать к чему это можно применить в данном контексте; |
#• general — web поисковые запросы, не могу придумать к чему это можно применить в данном контексте;\\ | #• maps — адреса, GEO-точки (название баров, автозаправочные станции, гостиницы и так далее), и т.д.; |
#• maps — адреса, GEO-точки (название баров, автозаправочные станции, гостиницы и так далее), и т.д.;\\ | #• music — названия песен, музыкальных групп и т.д. |
#• music — названия песен, музыкальных групп и т.д.\\ | $topic = "freeform"; |
$topic = "freeform";\\ | |
| |
#$lang = 'ru-RU' — язык на котором будет происходить распознавание, на данный момент поддерживается русский 'ru-RU' и турецкий 'tr-TR', причем турецкий поддерживается только для тем «general» и «maps»;\\ | #$lang = 'ru-RU' — язык на котором будет происходить распознавание, на данный момент поддерживается русский 'ru-RU' и турецкий 'tr-TR', причем турецкий поддерживается только для тем «general» и «maps»; |
$lang = "ru-RU";\\ | $lang = "ru-RU"; |
| |
#генерация рандомного ID \\ | #генерация рандомного ID |
$randtoken=rand(1000);\\ | $randtoken=rand(1000); |
$uuid=md5($randtoken);\\ | $uuid=md5($randtoken); |
| |
#перекодируем файл в формат яндекса\\ | #перекодируем файл в формат яндекса |
system('sox '.$filename.'.wav -r 16000 -b 16 -c 1 '.$filename.'-pcm.wav');\\ | system('sox '.$filename.'.wav -r 16000 -b 16 -c 1 '.$filename.'-pcm.wav'); |
| |
#отсылаем файл и получаем в ответ xml\\ | #отсылаем файл и получаем в ответ xml |
$cmd = exec('curl -F "Content-Type=audio/x-pcm;bit=16;rate=16000" -F "audio=@'.$filename.'-pcm.wav" asr.yandex.net/asr_xml\?key='.$key.'\&uuid='.$uuid .'\&topic='.$topic.'\&lang='.$lang, $xml); | $cmd = exec('curl -F "Content-Type=audio/x-pcm;bit=16;rate=16000" -F "audio=@'.$filename.'-pcm.wav" asr.yandex.net/asr_xml\?key='.$key.'\&uuid='.$uuid .'\&topic='.$topic.'\&lang='.$lang, $xml); |
| |
#дербаним регекспом ответ сервера, выдёргиваем первое значение как наиболее релевантное\\ | #дербаним регекспом ответ сервера, выдёргиваем первое значение как наиболее релевантное |
$res_xml = implode($xml);\\ | $res_xml = implode($xml); |
if (preg_match('!<variant .*?>(.*)</variant>!si', $res_xml, $arr)) $voice_text = $arr[1];\\ | if (preg_match('!<variant .*?>(.*)</variant>!si', $res_xml, $arr)) $voice_text = $arr[1]; |
else $voice_text='';\\ | else $voice_text=''; |
| |
#передаём ответ от скрипта в поток ввода\\ | #передаём ответ от скрипта в поток ввода |
echo 'SET VARIABLE TEXT "'.$voice_text.'"'."\n";\\ | echo 'SET VARIABLE TEXT "'.$voice_text.'"'."\n"; |
fgets(STDIN);\\ | fgets(STDIN); |
echo 'VERBOSE ("'.$voice_text.'")'."\n";\\ | echo 'VERBOSE ("'.$voice_text.'")'."\n"; |
fgets(STDIN);\\ | fgets(STDIN); |
exit(0);\\ | exit(0); |
?>\\ | ?> |
'' | |