Голосовое управление. Микрофоны сервера.

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

Голосовое управление. Микрофоны сервера.

Сообщение Bagir »

Голосовое управление с микрофонов сервера. Давайте продолжим в этой теме обсуждение именно этого способа и доведем его до рабочего варианта.
План этой ветки:
  • Постоянно слушаем микрофон в поисках ключевого слова.
    Распознавание должно быть локально.
  • При срабатывании пишем звук в файл до тишины и отправляем на распознавание.
    Пока что кроме гугла ничего не приходит на ум. Локальных приемлемых вариантов я пока что не нашел.
  • Полученный текст отправляем в метод commandReceived
    При таком варианте голосовой сервис будет не отдельной игрушкой, а винтиком в системе.

    Нам требуется решить три задачи:
    1. Локальное распознавание ключевого слова.
    2. Запись FLAC с требуемыми параметрами.
    3. Распознавание файла.

    Сегодня мне удалось собрать материал для отправки звукового файла в гугл и получения текста. Надо сказать, что результатами я доволен. Дальнейшая битва за качество пойдет уже на уровне железа.
    А пока что предлагаю ознакомится с рабочим примером распознавани…SPOILER_SHOW

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

    <?
    // Используем cURL для формирования HTTP POST-запроса к Google API
    // AIzaSyAqk7vE0vQDR3JItUPgFp6bcPqgJz8h8tI
    // AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw
    
    /* Если возникает ошибка
    URL error number:60
    URL error:SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
    Можно либо подсунуть найденный в просторах Интернета давно устаревший сертификат curl-ca-bundle.crt, либо просто отключить проверку
    */
    
    /* Format *.flac
    Channels : 2
    Sample Rate : 44100
    Precision : 32-bit
    Sample Encoding: 32-bit Float
    */
    
    $file_to_upload = array('myfile'=>'@'.'D:\Server\www\majordomo\current.flac');
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/speech-api/v2/recognize?output=json&lang=ru-RU&key=AIzaSyAqk7vE0vQDR3JItUPgFp6bcPqgJz8h8tI');
    
    // curl_setopt($ch, CURLOPT_CAINFO, 'd:\server\apps\curl-ca-bundle.crt');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);  // Отключить ошибку "SSL certificate problem, verify that the CA cert is OK"
    //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);  // Отключить ошибку "SSL: certificate subject name 'hostname.ru' does not match target host name '123.123.123.123'"
    curl_setopt($ch, CURLOPT_POST,1);
    //curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: audio/l16; rate=16000;'));  // для wav файлов, но по слухам ни у кого не работает
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: audio/x-flac; rate=44100;'));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $file_to_upload);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    $result=curl_exec ($ch);
    
    // показать инфу и ошибки
    print_r(curl_getinfo($ch)); 
    echo '<br>URL error number:' . curl_errno($ch); 
    echo '<br>URL error:' . curl_error($ch);
    echo '<br>';
    
    curl_close ($ch);
    
    // Покачать весь ответ гугла
    echo '<br>result='.$result;
    echo "<br>";
    
    // По не выясненным пока причинам, в версии V2 первый ответ всегда пустой. Берем второй.
    $result_arr = split("\n", $result); $result = $result_arr[1];
    // Google возвращает JSON, поэтому парсим стандартной функцией. Доступна в PHP 5.2
    $json_array = json_decode($result, true);
    $voice_cmd = $json_array['result'][0]['alternative'][0]['transcript'];
    $confidence = $json_array['result'][0]['alternative'][0]['confidence'];
    echo('<br>voice_cmd='.$voice_cmd);
    echo('<br>confidence='.$confidence);
    
    ?>
    Подобного добра полно в Интернете, но весной этого года гугл закрыл доступ к своему API V1, и включил V2. Код немного изменился.
    1. Теперь для этого потребуется ключ. Его можно свободно получить, прочитав эту полезную статью http://tuarisa.ru/2014/08/google-speech ... chajnikov/. Я получил себе такой ключик на свой адрес в Gmail.com В примере есть парочка пока что работающих ключиков для пробы. Как получить свой, подробно расписано в статье. Если будут трудности - помогу.
    2. Изменился формат для записываемого файла.
    • Расширение : flac
      Channels : 2
      Sample Rate : 44100
      Precision : 32-bit
      Sample Encoding: 32-bit Float
    3. На винде столкнулся с проблемой сертификата для curl. Пришлось отключить проверку. В коде эта строчка есть. Так же я нашел и сам сертификат. Работает и с ним тоже. Для чего он нужен curl я пока что не вникал.
Код из спойлера пока что никак не завязан на МД. Его можно просто скопировать в пустой php файл, и запустить его из браузера например вот так http://localhost/voice_recognition.php Или просто скачать php файл с этим кодом из вложения и положить его в папку с файлами сайта. Также во вложении я добавил свой звуковой файлик с записью голоса для примера.
Обязательно надо поправить пути на свои!!! в строке
$file_to_upload = array('myfile'=>'@'.'D:\Server\www\majordomo\current.flac');
собачку не трогайте, а то покусает )) Я точно не знаю для чего она. Где то вычитал, что отключает проверки и curl будет выполняться дальше. Бред какой то, но без @ действительно не работает.
Строка
// curl_setopt($ch, CURLOPT_CAINFO, 'd:\server\apps\curl-ca-bundle.crt');
закоментирована. Можно указать путь к сертификату, который есть во вложении, и убрать эту строку отключения проверки
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Отключить ошибку "SSL certificate problem, verify that the CA cert is OK"
Вообщем можно поэкспериментировать. Но пока что работает и так и сяк.

Теперь надо решить оставшиеся две задачи. Локальное распознавание ключевого слова какой либо программой и запись flac файла до тишины или предела по времени. Вероятно тут должна помочь http://sox.sourceforge.net/ Надо разобраться, как записывать файлы этой утилиткой на виндовс.
Вложения
curl-ca-bundle.zip
сертификат для экспериментов
(222.13 КБ) 410 скачиваний
current.zip
пример звукового FLAC файла
(134.88 КБ) 422 скачивания
voice_recognition.zip
php файл с кодом из спойлера
(2.48 КБ) 417 скачиваний
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Контактная информация:

Re: Голосовое управление. Микрофоны сервера.

Сообщение sergejey »

А нельзя ли как-то использовать встроенное в Windows распознание речи для активации ключевой фразы?

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

Re: Голосовое управление. Микрофоны сервера.

Сообщение Bagir »

Может быть разве на W7 и выше, но на хрюшке я такого не встречал. Конечно надо почитать, может что и получится. Но как то я больше смотрю в строну более-менее приемлемой программы, которую можно будет заточить под одну только команду. Может быть даже обучаемый вариант.
Сейчас кручу верчу http://sox.sourceforge.net/ Вагон параметров и возможностей, но что есть что и за что, полностью понять пока не удается. Путные хелпы нашел только на буржуйском, но с моим переводом сильно обстановку не проясняет. Пока что пробую как то так:
sox -d -c 1 -r 16000 -b 16 d:\zzz.wav silence 1 0.1 1% 2 0.9 1%
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

Re: Голосовое управление. Микрофоны сервера.

Сообщение Bagir »

Снова занялся этой темой. Получить игрушку конечно хочется, но сильно не нравится необходимость использования стороннего софта за бессилием сделать все самому. Чтож, пока что я смерился с этим и решил смотать все скотчем, чтобы хоть как то запустить идею. Дальше будет видно. Возможно что то получится до точить в будущем.
Сейчас "на коленках" у меня есть все компоненты для работы системы в режиме: событие - вопрос системы - ответ человека - действие системы. Оффлайн распознавание ключевого слова для этого не требуется. Но это все равно уже кое что.
Долго думал как все устроить, и где все разместить. В итоге пришел к выводу, что нагружать МД не стоит вообще никакими стадиями этого процесса.
Для чтения сообщений и проигрывания звуковых файлов я использую свое приложение, которое ставит все это добро в очередь. В него и решил добавить распознавание.
Идея в следующем: МД озадачивает отдельное приложение, которое запишет звук, сохранит в необходимом формате, отправит в гугл, получит ответ и передаст его обратно в МД.
1. Записать файл. Это как бы просто, но вся фишка в том, чтобы записать до установленной тишины. Это я пока не умею. Но умеет sox. Запускаем так: "sox -d -c 2 -r 44100 -b 16 current.wav silence 1 0.1 1% 2 0.9 1%"
2. Нужно переконвертировать. Тут поможет flac. С параметром -f который позволяет перезаписывать имеющийся файл. "flac -f current.wav"
3. Отправить в гугл. Есть рабочий код в ранее выложенном voice_recognition.php Но у меня пока что не получилось переиначить его под VB. Планирую пока оставить его в php до лучших времен.
Вложения
sox.zip
(5.53 МБ) 410 скачиваний
flac.zip
(256.11 КБ) 414 скачиваний
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
jeks0n
Сообщения: 43
Зарегистрирован: Пт дек 26, 2014 6:37 pm

Re: Голосовое управление. Микрофоны сервера.

Сообщение jeks0n »

звуковой файл он распознал и выдал:
SPOILERSPOILER_SHOW
Array ( [url] => https://www.google.com/speech-api/v2/re ... PqgJz8h8tI [content_type] => application/json; charset=utf-8 [http_code] => 200 [header_size] => 360 [request_size] => 282 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 4.633 [namelookup_time] => 0 [connect_time] => 0.187 [pretransfer_time] => 0.577 [size_upload] => 138231 [size_download] => 251 [speed_download] => 54 [speed_upload] => 29836 [download_content_length] => -1 [upload_content_length] => 138231 [starttransfer_time] => 1.591 [redirect_time] => 0 [certinfo] => Array ( ) [primary_ip] => 64.233.163.103 [primary_port] => 443 [local_ip] => 192.168.0.104 [local_port] => 54020 [redirect_url] => )
URL error number:0
URL error:

result={"result":[]} {"result":[{"alternative":[{"transcript":"найди мне что нибудь интересное","confidence":0.92292166},{"transcript":"найди мне что-нибудь интересное"}],"final":true}],"result_index":0}

voice_cmd=найди мне что нибудь интересное
confidence=0.92292166
а как заставить все работать ума не приложу ))) подскажите, в какую сторону копать?
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

Re: Голосовое управление. Микрофоны сервера.

Сообщение Bagir »

Парой предложений тут конечно не отделаешься. Я постараюсь подготовить небольшой обзор этой темы. Если файл распознается, то уже хорошо. В php файлике был забит гугловский ключик из просторов Интернета. Значит еще жив курилка )) Это тоже хорошо.
Вообще я хотел перенести весь код из php файла в свою прогу, и крутить распознавание в ней. Не хочется загружать апачи сервер этой задачей, и уж тем более циклы МД.
Сегодня не обещаю. Прикручиваю Мегу на шит в гараже. Но завтра займусь этой темой. Надо бы выложить хоть какой то работающий пример, чтобы был интерес к теме.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
jeks0n
Сообщения: 43
Зарегистрирован: Пт дек 26, 2014 6:37 pm

Re: Голосовое управление. Микрофоны сервера.

Сообщение jeks0n »

будем с нетерпением ждать )
electric
Сообщения: 309
Зарегистрирован: Вт сен 17, 2013 10:11 pm

Re: Голосовое управление. Микрофоны сервера.

Сообщение electric »

Есть новости с полей?
Тоже решил заняться этой темой, ищу микрофон.
Работа встроенного в планшеты (планшеты) меня не устраивает, ищу альтернативу для cubietruck.
Было: Majordomo v.0.6.0.b на Cubietruck. OS Armbian с переносом на HDD
Стало: ioBroker на Cubietruck OS Armbian + ZigBee Xiaomi + OWFS + BLE.
triada13
Сообщения: 242
Зарегистрирован: Вт мар 11, 2014 8:36 pm
Откуда: Челябинск

Re: Голосовое управление. Микрофоны сервера.

Сообщение triada13 »

electric, в свое время баловался прослушкой, микрофон использовал А1В2 Сосна, улавливал звук падающей спички в комнате.
Но как его привязать в Мажордом?

UPD
вот ссылка:
Majordomo на Orange Pi Zero.
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

Re: Голосовое управление. Микрофоны сервера.

Сообщение Bagir »

Новости скоро будут, честно )) Рабочий пример есть. Но надо написать к нему инструкцию. Слишком много запчастей в нем используется. Да и надо сделать простенький пример связи с МД с учетом того, что диалоги может начинать только сервер. Например, в режиме "никого нет дома" при обнаружении первого движения, Алиса здоровается и спрашивает хотим ли мы услышать отчет о событиях пока никого не было. После этого ожидает ответ и действует исходя из него.
Праздники закрутили, вот только до компа добрался, да уж спать пора. А вчера весь вечер просидел в гараже с переделкой автоматики для подъемных ворот. Все получилось вполне красиво. Так что тоже будет небольшой обзорчик со схемой.
Микрофон я пока что использую от звукового ресивера ямаха, который был для его калибровки.
Изображение
Воткнут во встроенную звуковую карту сервера. Из всех микрофонов для ПК этот дает самое наилучшее качество. К тому же он не направленный. Не обязательно говорить прямо в него. Так же использую его и для скайпа. Тут главное послушать что получается в записи. И если уж не совсем плохо, то можно пробовать распознавать.
А1В2 Сосна возможно интересная штуковина. Было бы здорово послушать запись с нее, или даже хотя бы в скайпе. Возможно надо сразу задумывать большое усиление, и размещать микрофон так, чтобы прямо в него нельзя было говорить.
Были мысли про IP микрофоны. Хочу попробовать IP камеру KaiCong со встроенным микрофоном и спикером. От сервера далеко микрофон не утянуть. Опасаюсь, что сильно пострадает качество. Пока что даже представления не имею о возможностях KaiCong. Но иногда, дешевые простые решения могут удивлять. Так то есть же еще и IP камеры с выносным микрофоном. Вообщем будущий опыт с KaiCong покажет смысл этой идеи.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Закрыто