Инструменты пользователя

Инструменты сайта


voice3

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

voice3 [2022/03/24 09:49]
kirill создано
voice3 [2022/03/24 09:54] (текущий)
kirill
Строка 1: Строка 1:
 #!/usr/bin/php -q #!/usr/bin/php -q
 <?php <?php
-~@еб~Cе~B~A~O паке~B SOX +ребуется пакет SOX 
- +  
- +  
-#~_~@име~@ в~Kзова из dialplan+#Пример вызова из dialplan
 #;Voice Module #;Voice Module
 #exten => _504,1,Answer #exten => _504,1,Answer
Строка 11: Строка 11:
 #exten => _504,n,NoOp(${TEXT}); #exten => _504,n,NoOp(${TEXT});
 #exten => _504,n,Hangup #exten => _504,n,Hangup
- +  
-#пол~C~Gаем пе~@еменн~Kе из AGI+#получаем переменные из AGI
 $agivars = array(); $agivars = array();
 while (!feof(STDIN)) { while (!feof(STDIN)) {
     $agivar = trim(fgets(STDIN));     $agivar = trim(fgets(STDIN));
         if ($agivar === '') break;         if ($agivar === '') break;
 + 
     $agivar = explode(':', $agivar);     $agivar = explode(':', $agivar);
     $agivars[$agivar[0]] = trim($agivar[1]);     $agivars[$agivar[0]] = trim($agivar[1]);
 } }
 extract($agivars); extract($agivars);
 + 
 $filename = $_SERVER["argv"][1]; $filename = $_SERVER["argv"][1];
- +  
-#кл~N~G о~B yandex speech kit  можно пол~C~Gи~B~L на:+#ключ от yandex speech kit  можно получить на:
 #https://developer.tech.yandex.ru/ #https://developer.tech.yandex.ru/
-#~B~@еб~Cе~B~A~O ~C~G~Q~Bка ~Oндек~Aа+#требуется учётка яндекса
 $key = '6be78e3c-6184-4f83-b18d-cf33c6727735'; $key = '6be78e3c-6184-4f83-b18d-cf33c6727735';
- +  
-#$topic = 'maps' ~@~T ~Bема дл~O ~@а~Aпознавани~O, возможн~K ~Aлед~C~N~Iие ва~@иан +#$topic = 'maps' — тема для распознавания, возможны следующие варианты
-~B~K+#• freeform — произвольный текст, заметки и т.д. Вариант применения: переводим в текст сообщение голосовой почты и отправляем его 
-#~@ freeform ~@~T п~@оизвол~Lн~Kй ~Bек~A~B, заме~Bки и ~B.д. ~Rа~@иан~B п~@именен +#• general — web поисковые запросы, не могу придумать к чему это можно применить в данном контексте; 
-~O: пе~@еводим в ~Bек~A~B ~Aооб~Iение голо~Aовой по~G~B~K и о~Bп~@авл~Oем е +#• maps — адреса, GEO-точки (название баров, автозаправочные станции, гостиницы и так далее), и т.д.; 
-го +#• music — названия песен, музыкальных групп и т.д.
-#~@ general ~@~T web пои~Aков~Kе зап~@о~A~K, не мог~C п~@ид~Cма~B~L к ~Gем~C ~M~Bо м +
-ожно п~@имени~B~L в данном кон~Bек~A~Bе; +
-#~@ maps ~@~T ад~@е~Aа, GEO-~Bо~Gки (название ба~@ов, ав~Bозап~@аво~Gн~Kе ~A~Bан +
-~Fии, го~A~Bини~F~K и ~Bак далее), и ~B.д.; +
-#~@ music ~@~T названи~O пе~Aен, м~Cз~Kкал~Lн~K~E г~@~Cпп и ~B.д.+
 $topic = "freeform"; $topic = "freeform";
- +  
-#$lang = 'ru-RU' ~@~T ~Oз~Kк на ко~Bо~@ом б~Cде~B п~@ои~A~Eоди~B~L ~@а~Aпознавание,   +#$lang = 'ru-RU' — язык на котором будет происходить распознавание, на данный момент поддерживается русский 'ru-RU' и турецкий 't
-на данн~Kй момен~B подде~@живае~B~A~O ~@~C~A~Aкий 'ru-RU' и ~B~C~@е~Fкий 't+
 $lang = "ru-RU"; $lang = "ru-RU";
- +  
-#гене~@а~Fи~O ~@андомного ID.+#генерация рандомного ID.
 $randtoken=rand(1,1000); $randtoken=rand(1,1000);
 $uuid=md5($randtoken); $uuid=md5($randtoken);
  
-#пе~@екоди~@~Cем ~Dайл в ~Dо~@ма~B ~Oндек~Aа+#перекодируем файл в формат яндекса
 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');
- +  
-~B~A~Kлаем ~Dайл и пол~C~Gаем в о~Bве~B xml +тсылаем файл и получаем в ответ xml 
 + 
 $cmd = exec('curl --form-string "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 --form-string "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);
  
-#де~@баним ~@егек~Aпом о~Bве~B ~Aе~@ве~@а, в~Kд~Q~@гиваем пе~@вое зна~Gени +#дербаним регекспом ответ сервера, выдёргиваем первое значение как наиболее релевантное
-е как наиболее ~@елеван~Bное+
 $res_xml = implode($xml); $res_xml = implode($xml);
 if (preg_match('!<variant .*>(.*)</variant>!si', $res_xml, $arr)){ if (preg_match('!<variant .*>(.*)</variant>!si', $res_xml, $arr)){
Строка 65: Строка 58:
 else $voice_text=''; else $voice_text='';
  
 + 
 ############### ###############
- +  
-if (intval(substr_count($voice_text, 'опе~@а~Bо~@')) > 0){ +if (intval(substr_count($voice_text, 'оператор')) > 0){ 
-   $ress = 1; }         ~Aли в ~@ез~Cл~L~Bа~Bа~E е~A~B~L ~Aлово «опе~@а~Bо~@», ~Bо в д +   $ress = 1; } сли в результатах есть слово «оператор», то в диалплан возвращаем 1
-иалплан возв~@а~Iаем 1+
 elseif (intval(substr_count($voice_text, 'заказ')) > 0){ elseif (intval(substr_count($voice_text, 'заказ')) > 0){
-   $ress = 2;}          ~Aли в ~@ез~Cл~L~Bа~Bа~E е~A~B~L ~Aлово «заказ», ~Bо в диалп +   $ress = 2;}  сли в результатах есть слово «заказ», то в диалплан возвращаем 2 
-ан возв~@а~Iаем 2 +elseif (intval(substr_count($voice_text, 'секретарь')) > 0){ 
-elseif (intval(substr_count($voice_text, '~Aек~@е~Bа~@~L')) > 0){ +   $ress = 3;}  сли в результатах есть слово «секретарь»то в диалплан возвращаем 3 
-   $ress = 3;}          ~Aли в ~@ез~Cл~L~Bа~Bа~E е~A~B~L ~Aлово «~Aек~@е~Bа~@~L»~Bо  +elseif (intval(substr_count($voice_text, 'менеджер')) > 0){ 
- диалплан возв~@а~Iаем 3 +   $ress = 4;} сли в результатах есть слово «менеджер», то в диалплан возвращаем 4
-elseif (intval(substr_count($voice_text, 'менедже~@')) > 0){ +
-   $ress = 4;}          ~Aли в ~@ез~Cл~L~Bа~Bа~E е~A~B~L ~Aлово «менедже~@», ~Bо в ди +
-алплан возв~@а~Iаем 4+
 else else
-   {$ress = 0;}         ~Aли ~Aовпадени~O не найдено, ~Bо 0 +   {$ress = 0;}  сли совпадения не найдено, то 0 
 + 
 ##################### #####################
- +  
-#пе~@еда~Qм о~Bве~B о~B ~Aк~@ип~Bа в по~Bок ввода+#передаём ответ от скрипта в поток ввода
 echo 'SET VARIABLE TEXT "'.$ress.'"'."\n"; echo 'SET VARIABLE TEXT "'.$ress.'"'."\n";
 fgets(STDIN); fgets(STDIN);
Строка 92: Строка 81:
 exit(0); exit(0);
 ?> ?>
- 
  
voice3.1648115357.txt.gz · Последнее изменение: 2022/03/24 09:49 — kirill

DokuWiki Appliance - Powered by TurnKey Linux