Содержание

!/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

получаем переменные из AGI

$agivars = array(); while (!feof(STDIN)) {

  $agivar = trim(fgets(STDIN));
  if ($agivar === '')
      break;
  $agivar = explode(':', $agivar);
  $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';

$topic = 'maps' — тема для распознавания, возможны следующие варианты:

• freeform — произвольный текст, заметки и т.д. Вариант применения: переводим в текст сообщение голосовой почты и отправляем его на email или виде SMS.

• general — web поисковые запросы, не могу придумать к чему это можно применить в данном контексте;

• maps — адреса, GEO-точки (название баров, автозаправочные станции, гостиницы и так далее), и т.д.;

• music — названия песен, музыкальных групп и т.д.

$topic = «freeform»;

$lang = 'ru-RU' — язык на котором будет происходить распознавание, на данный момент поддерживается русский 'ru-RU' и турецкий 'tr-TR', причем турецкий поддерживается только для тем «general» и «maps»;

$lang = «ru-RU»;

генерация рандомного ID

$randtoken=rand(1000); $uuid=md5($randtoken);

перекодируем файл в формат яндекса

system('sox '.$filename.'.wav -r 16000 -b 16 -c 1 '.$filename.'-pcm.wav');

отсылаем файл и получаем в ответ 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);

дербаним регекспом ответ сервера, выдёргиваем первое значение как наиболее релевантное

$resxml = implode($xml); if (pregmatch('!<variant .?>(.)</variant>!si', $resxml, $arr)) $voicetext = $arr[1];

  else $voice_text='';
  

#передаём ответ от скрипта в поток ввода echo 'SET VARIABLE TEXT «'.$voicetext.'»'.«\n»; fgets(STDIN); echo 'VERBOSE («'.$voicetext.'»)'.«\n»; fgets(STDIN); exit(0); ?>

DokuWiki Appliance - Powered by TurnKey Linux