скрипт записи и распознавания голоса от Яндекс SpeechKit

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

скрипт записи и распознавания голоса от Яндекс SpeechKit

Сообщение directman66 » Сб июн 03, 2017 12:49 am

записываем звук:
СпойлерПоказать
$fn="/var/www/cached/rec/".time().".wav";
$cmd="arecord -d 10 -t wav -f cd ".$fn;

echo $cmd;
playsound("/var/www/sounds/ok.mp3");
shell_exec($cmd);
playsound("/var/www/sounds/ok.mp3");
echo "записан файл: ".$cmd;
playsound($fn);
runScript('speechyandexcurl', array('fn' =>$fn));
speechyandexcurl:
СпойлерПоказать
function generateRandomSelection($min, $max, $count)
{
$result=array();
if($min>$max) return $result;
$count=min(max($count,0),$max-$min+1);
while(count($result)<$count) {
$value=rand($min,$max-count($result));
foreach($result as $used) if($used<=$value) $value++; else break;
$result[]=dechex($value);
sort($result);
}
shuffle($result);
return $result;}

$key="c3aedb53-///fb";

$filename="@".$params['fn'];
if ($fn=="@"){$filename='@/var/www/cached/voice/8622cf4b70d9508f1910bdb77e74d5d8_ivona.mp3';}
//$filename='@/var/www/cached/voice/probki.wav';
//echo substr($filename,-5);

$ras=explode(".",substr($filename,-5));
if ($ras[1]=="wav"){$tip="audio/x-wav";}
else if ($ras[1]=="mp3"){$tip="audio/x-mpeg-3";}

$uuid=generateRandomSelection(0,30,64);
$uuid=implode($uuid);
$uuid=substr($uuid,1,32);



$url="curl -X POST -H \"Content-Type: ".$tip."\" --data-binary \"".$filename."\" \"https://asr.yandex.net/asr_xml?uuid=".$ ... ic=queries\"";

//echo $url;
say('Пытаюсь распознать файл '.$filename,1);
$answ=shell_exec($url);
echo $answ;
say($answ,2);

Пока только штатными средствами отправляет файл и получает ответ. Ключ получать тут https://developer.tech.yandex.ru/

Проверено, работает на Orange Pi plus 2, но думаю должно работать и на любой linux liked системе при наличии микрофона. Пока это самое простое решение из имеющихся тут на форуме без установки каких-либо систем распознавания.


Осталось научиться слушать ключевую фразу. Видимо придется ставить PocketSphinx.
Или как вариант использовать sox http://tuksik.ru/voicecom/
Последний раз редактировалось directman66 Пн июн 05, 2017 8:57 am, всего редактировалось 1 раз.
За это сообщение автора directman66 поблагодарили (всего 2):
C_3AXAPOB (Пн июн 05, 2017 1:04 am) • vitt76 (Чт сен 21, 2017 12:50 pm)
Рейтинг: 2.33%
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: скрипт записи и распознавания голоса от Яндекс SpeechKi

Сообщение directman66 » Вс июн 04, 2017 11:47 pm

Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: скрипт записи и распознавания голоса от Яндекс SpeechKi

Сообщение directman66 » Ср июн 07, 2017 8:35 am

С кодом записи звука возникли заморочки непонятной причины.
СпойлерПоказать
$fn="/var/www/cached/rec/".time().".wav";
$cmd="arecord -d 10 -t wav -f cd ".$fn;

echo $cmd;
playsound("/var/www/sounds/ok.mp3");
shell_exec($cmd);
playsound("/var/www/sounds/ok.mp3");
echo "записан файл: ".$cmd;
playsound($fn);
runScript('speechyandexcurl', array('fn' =>$fn));

в образец записи звука попадает звуковая метка ok.mp3, т.е. происходит сильная задержка перед выполнением команды playsound("/var/www/sounds/ok.mp3"); Можно конечно задержки ввести, но мне бы хотелось наоборот ускорить выполнение playsound("/var/www/sounds/ok.mp3");

Система на armbian orange pi plus 2

зыж пока заменил командой shell_exec("mplayer ".$fn);
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 51 раз

Re: скрипт записи и распознавания голоса от Яндекс SpeechKi

Сообщение vitt76 » Чт сен 21, 2017 1:32 pm

directman66
спасибо за скрипты!
файл записывается и вроде как передается в яндекс, но в ответ получаю

Код: Выделить всё

Content-size limit reached! 
почему так?
Broadlink + Orange Pi PC ARMBIAN 5.31
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: скрипт записи и распознавания голоса от Яндекс SpeechKi

Сообщение directman66 » Чт сен 21, 2017 1:37 pm

а api-ключ получили? Прописали в скрипте? Фразы до 30 секунд у меня распрознаются на ура. Использую встроенный в orange pi микрофон. В настоящее время плату перенес в кладовку, думаю над выполнением этого скрипта через удаленные железяки.
Последний раз редактировалось directman66 Чт сен 21, 2017 1:39 pm, всего редактировалось 1 раз.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 51 раз

Re: скрипт записи и распознавания голоса от Яндекс SpeechKi

Сообщение vitt76 » Чт сен 21, 2017 1:38 pm

Да, сорри, читаю мануалы, это ошибка, если передается wav-файл более 1 Мб
Попробую записывать 5 секунд, а не 10.
Broadlink + Orange Pi PC ARMBIAN 5.31
Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 51 раз

Re: скрипт записи и распознавания голоса от Яндекс SpeechKi

Сообщение vitt76 » Чт сен 21, 2017 1:46 pm

У меня микрофон выносной, так как внутренний не ловит в коробке ни фига :)
Присоединил камеру logitech c270, она с микрофоном и поддержкой убунту.
Чтобы прошла запись, пришлось \\etc\asound.conf менять на
СпойлерПоказать

Код: Выделить всё

pcm.dmixer { 
    type dmix 
    ipc_key 1024 
    slave { 
        pcm "hw:0,0" 
        period_time 0 
        period_size 1024 
        buffer_size 8192 
   rate 44100 
    } 
  
    bindings { 
        0 0 
        1 1 
    } 
} 

pcm.asymed { 
        type asym 
        playback.pcm "dmixer" 
        capture.pcm "hw:0,0" 
} 


  
pcm.dsp0 { 
    type plug 
    slave.pcm "asymed" 
} 
  
pcm.!default { 
        type plug 
        slave.pcm "asymed" 
} 
  
pcm.default { 
   type plug 
   slave.pcm "asymed" 
} 
  
ctl.mixer0 { 
    type hw 
    card 2 
}
Последнее card 2 по моей задумке должно означать, что выбираем карту 2, а не 0 :)
Broadlink + Orange Pi PC ARMBIAN 5.31
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: скрипт записи и распознавания голоса от Яндекс SpeechKi

Сообщение directman66 » Чт сен 21, 2017 1:55 pm

Как я рад, что данная тема пошла вверх, а то было ощущение, что только мне этот вариант интересен....работает ведь он-лайн распознавание нашего родного языка
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 51 раз

Re: скрипт записи и распознавания голоса от Яндекс SpeechKi

Сообщение vitt76 » Чт сен 21, 2017 2:09 pm

Так это же прекрасно, спасибо за тему :)
У меня стоял серверок Win7+Chrome+Плагин, я говорил Алиса, включи свет и она включала.
Теперь у меня апельсин и я этого лишён, а поднимать что-то еще на винде больше не хочется.
Broadlink + Orange Pi PC ARMBIAN 5.31
Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 51 раз

Re: скрипт записи и распознавания голоса от Яндекс SpeechKi

Сообщение vitt76 » Чт сен 21, 2017 2:44 pm

Интересно, а почему у меня результат дублируется пять раз?
Broadlink + Orange Pi PC ARMBIAN 5.31
Ответить