Простое голосовое управление системой

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

Модератор: immortal

Ответить
sergejey
Благодарил (а): 0
Поблагодарили: 0

Простое голосовое управление системой

Сообщение sergejey » Пт авг 10, 2012 12:36 pm

emaster
Сообщения: 14
Зарегистрирован: Ср авг 15, 2012 3:15 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Простое голосовое управление системой

Сообщение emaster » Ср авг 15, 2012 3:29 pm

sergejey писал(а):Обсуждение страницы Простое голосовое управление системой
Насчёт голосового поиска гугла - где-то мелькала информация о том, что их голосовой engine доступен (или будет в ближайшее время) в stand-alone виде внутри какого-то устройства, что по многим причинам гораздо интереснее, чем работа с удалённым сервером.

В моей прошлой квартире за распознавание голосовых команд отвечал движок STC VoiceCom Demo - в нём можно было нарисовать дерево команд и обучить нескольких дикторов. После чего распознанные команды выводились в заголовке окна, откуда я и тянул их в свой софт. Так у нас появилась Свити :)

А ещё для голосового управления хорошо уметь фильтровать "базар", т.е. буквально :)
В доме у меня для этого предусмотрено по 4 потолочных микрофона в каждой комнате - с них можно обрабатывать сигнал как с фазированной антенной решетки, т.е. достаточно эффективно фильтровать и отслеживать отдельные источники. Но за ворохом более важных задач эта "математика" пока ещё ждёт своей реализации.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Простое голосовое управление системой

Сообщение Alex » Ср авг 15, 2012 9:15 pm

В доме у меня для этого предусмотрено по 4 потолочных микрофона в каждой комнате
Очень интересная идея. Как я сам до такого не додумался? Видать есть ещё над чем поработать... :)
- с них можно обрабатывать сигнал как с фазированной антенной решетки, т.е. достаточно эффективно фильтровать и отслеживать отдельные источники.
Вот это да... Впечатлило. С такими людьми Умный Дом против нас долго не продержится :).
Vip
Сообщения: 79
Зарегистрирован: Вт авг 28, 2012 5:36 pm
Откуда: Kiev, Ukraine
Благодарил (а): 3 раза
Поблагодарили: 13 раз

Re: Простое голосовое управление системой

Сообщение Vip » Вт авг 28, 2012 5:38 pm

А можно ли реализовать распознавание речи на уровне ПК, без привлечения мобильных устройств.
По примеру http://habrahabr.ru/post/117234/#comment_3812334
Как думаете, возможно?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4279
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1511 раз
Контактная информация:

Re: Простое голосовое управление системой

Сообщение sergejey » Ср авг 29, 2012 10:20 am

Vip писал(а):А можно ли реализовать распознавание речи на уровне ПК, без привлечения мобильных устройств.
По примеру http://habrahabr.ru/post/117234/#comment_3812334
Как думаете, возможно?
Без мобильных устройств можно сделать просто запустив хром с включенным голосовым вводом и зайдя на страницу http://ваш_сервер/command.php -- там в строке ввода нажать на микрофон и говорить команду. Но это, конечно, не очень удобно -- лучше было бы если б программа сама распознавала речь и отправляла её на гугл. На ab-log.ru в форуме есть большая дискуссия на эту тему -- там они подключают всякие фильтры и скрипты, но по-моему надёжного способа так и нет -- то распознаёт плохо, то качество записи хромает.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Vadymkyr
Сообщения: 125
Зарегистрирован: Ср дек 26, 2012 8:33 pm
Откуда: Севастополь
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Простое голосовое управление системой

Сообщение Vadymkyr » Пн янв 21, 2013 12:04 am

а есть аналог этой программы для IOS?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4279
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1511 раз
Контактная информация:

Re: Простое голосовое управление системой

Сообщение sergejey » Пн янв 21, 2013 10:59 am

Vadymkyr писал(а):а есть аналог этой программы для IOS?
К сожалению, не встречал. Под iOs я слышал, что делают в домашней сети специальный proxy-сервер для Siri, чтобы можно было перехватывать для неё команды и обрабатывать собственными средствами. Вот страница проекта https://github.com/plamoni/SiriProxy

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
igorek4649
Сообщения: 2
Зарегистрирован: Вт окт 27, 2015 8:54 am
Благодарил (а): 0
Поблагодарили: 0

Re: Простое голосовое управление системой

Сообщение igorek4649 » Вт окт 27, 2015 8:56 am

Кто нибудь пробывал laitis.ru возможно использовать этот софт?
vash_sa
Сообщения: 13
Зарегистрирован: Чт янв 26, 2017 2:53 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Простое голосовое управление системой

Сообщение vash_sa » Сб фев 04, 2017 4:49 pm

Vip писал(а):Без мобильных устройств можно сделать просто запустив хром с включенным голосовым вводом и зайдя на страницу http://ваш_сервер/command.php -- там в строке ввода нажать на микрофон и говорить команду. Но это, конечно, не очень удобно -- лучше было бы если б программа сама распознавала речь и отправляла её на гугл. На ab-log.ru в форуме есть большая дискуссия на эту тему -- там они подключают всякие фильтры и скрипты, но по-моему надёжного способа так и нет -- то распознаёт плохо, то качество записи хромает.
Нет там никакой кнопки "нажать на микрофон" и нажимать не на что. Там только одна строка ввода say

Та к все-таки эта тема как-то продвинулась?
Аватара пользователя
Divan
Сообщения: 702
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 83 раза
Поблагодарили: 201 раз

Re: Простое голосовое управление системой

Сообщение Divan » Сб июн 06, 2020 12:32 am

Автор Smoke выложил еще один вариант управления голосом. Вариант интересный, но нет нормальной инструкции, что и как делать. Работает в браузере Хром и через https (нужен SSL сертификат). Плюсы: бесплатно, без ключей, быстро, не ограниченно в запросах, неограниченное время распознавания.

Так выглядит кнопка на сцене
СпойлерПоказать
кнопка.jpg
кнопка.jpg (62.91 КБ) 328 просмотров

Выкладываю пошаговую инструкцию

Внимание!!! Если у вас уже установлен SSL сертификат и есть доступ по https, то пропускаем этот пункт

Создаем SSL сертификат (без этого не будет работать), пример создания SSL сертификата на Ubuntu
1) Ставим certbot
СпойлерПоказать
1) sudo apt-get update
2) sudo apt-get install software-properties-common
3) sudo add-apt-repository universe - если запустить эту команду, то получим ошибку add-apt-repository universe error: universe invalid, в таком
случае запускаем эту команду sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe"
4) sudo add-apt-repository ppa:certbot/certbot
5) sudo apt-get update

Привязываем Font Awesome
1) Скачиваем Font Awesome
2) Распаковываем и переименовываем в font-awesome
3) Закидываем всю папку font-awesome например сюда www/var/templates_alt/font-awesome/css/font-awesome.min.css";
СпойлерПоказать
Путь к папке font awesome.jpg
Путь к папке font awesome.jpg (100.98 КБ) 328 просмотров

Действия в сцене
В раздел Дополнительный код CSS вставляем код для импорта font-awesome

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

@import "/templates_alt/font-awesome/css/font-awesome.min.css";
СпойлерПоказать
Дополнительный код CSS.JPG
Дополнительный код CSS.JPG (17.9 КБ) 328 просмотров
В раздел Код вставляем весь код.
СпойлерПоказать
раздел код.JPG
раздел код.JPG (74.82 КБ) 328 просмотров

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

<script>
        // Создаем распознаватель
        var recognizer = new webkitSpeechRecognition();

        // Ставим опцию, чтобы распознавание началось ещё до того, как пользователь закончит говорить
        recognizer.interimResults = false;
        // Какой язык будем распознавать?
        recognizer.lang = 'ru-Ru';

        recognizer.onstart = function () {
            //После старта
            $('#voiceBtn').attr('style', 'position: fixed;z-index: 99;padding: 15px;border-radius: 50px;bottom: 0px;right: 0px;margin-right: 10px;background:lime;margin-bottom: 10px;animation: pulse;animation-iteration-count: infinite;animation-duration: 1s;');
            $('#voiceBtn').attr('class', 'bg-gradient-06-anim-fast');
        };

        recognizer.onerror = function (event) {
            //Если ошибка
        };

        // Используем колбек для обработки результатов
        recognizer.onresult = function (event) {
            var result = event.results[event.resultIndex];
            if (result.isFinal) {
                voiceStr = result[0].transcript.toLowerCase();
                //Вот тут ключевое слово маленькими буквами, если ключего слова нет - будет слать все подряд на сервер
                keyWords = voiceStr.indexOf('');
                if(keyWords != '-1') {
                    //Часть запросов будем отрабатывать прямо из JS
                    if(voiceStr.substring(keyWords).toLowerCase() == 'алиса включи музыку') {
                        startPlayMusic();
                    } else {
                        //AJAX на сервер
                        $.getJSON({
                            url: '/objects/?script=VoiceTest&voice='+encodeURI(voiceStr.substring(keyWords)),
                            success: function(responce) {
                                //Возврат от скрипта MJDM
                            },
                           error: function(responce) {
       						console.log('Ошибка отправки AJAX');
      						}
                        }); 
                    }
                }
            }
        };
        recognizer.onend = function () {
            //По окончании
            $('#voiceBtn').attr('style', 'position: fixed;z-index: 99;padding: 15px;border-radius: 50px;bottom: 0px;right: 0px;margin-right: 10px;background: purple; margin-bottom: 10px;');
            $('#voiceBtn').removeAttr('class');
            //Если сюда вписать recognizer.start(); будет слушать эфир вечно
        };
</script>
 

<div id="voiceBtn" style="position: fixed;z-index: 99;padding: 15px;border-radius: 50px;bottom: 0px;right: 0px;margin-right: 10px;background: purple;margin-bottom: 10px;" onclick="recognizer.start();">
  <i class="fa fa-microphone" style="font-size: 3rem;color: white;"></i>
</div>
Пояснение по коду

Здесь можно изменить ключевое слово (выделил где), но я убрал ключевое слово, нажали на кнопку и можно говорить.
СпойлерПоказать
ключевое слово.jpg
ключевое слово.jpg (43.84 КБ) 328 просмотров
Здесь меняем цвет фона, тут устанавливается цвет фона при активации микрофона
СпойлерПоказать
изменить цвет фона.jpg
изменить цвет фона.jpg (70.57 КБ) 328 просмотров
Здесь указываем имя скрипта (сценария). Сценарии создаете с любым именем и указываете в коде имя. У меня например так, где VoiceTest это имя сценария.

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

url: '/objects/?script=VoiceTest&voice='+encodeURI(voiceStr.substring(keyWords)),
СпойлерПоказать
Имя скрипта.jpg
Имя скрипта.jpg (75.49 КБ) 328 просмотров
Если в коде заменить адрес куда отправлять распознанный текст на:

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

url: '/command.php?qry='+encodeURI(voiceStr.substring(keyWords)),
СпойлерПоказать
строка скрипта.jpg
строка скрипта.jpg (86.14 КБ) 313 просмотров
то сообщения будут прилетать в системную консоль (на главной странице).


Про ошибку AJAX
Когда вы все сделали и нажали на кнопку, а после всплыла такая ошибка, то не пугайтесь, это нормально, такая ошибка всплывает, если сценарий пустой, нужно добавить в код echo 'ok'; чтобы сценарии возвращал ответ.
СпойлерПоказать
ошибка AJAX.jpg
ошибка AJAX.jpg (18.76 КБ) 328 просмотров
Пример сценария который будет записывать голос в свойство и в консоле можно увидеть текст
СпойлерПоказать
передача текста в свойство.JPG
передача текста в свойство.JPG (36.31 КБ) 328 просмотров
Чтобы увидеть текст, нужно нажать на консоль
СпойлерПоказать
консоль.jpg
консоль.jpg (15.8 КБ) 328 просмотров
Создали к примеру сценарии VoiceTest
СпойлерПоказать
Сценарии VoiceTest.JPG
Сценарии VoiceTest.JPG (13.99 КБ) 328 просмотров
Вставляем код на примере блокли, где я создал переменную voice
СпойлерПоказать
Код в блокли.JPG
Код в блокли.JPG (24.29 КБ) 328 просмотров
или код в PHP, кому как удобно

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

$voice = urldecode($_GET['voice']);


debMes($voice);
sg('VoiceMD.text',urldecode($_GET['voice']));
echo 'ok';
За это сообщение автора Divan поблагодарили (всего 4):
Chainik (Сб июн 06, 2020 8:53 am) • Sergey.Chek (Сб июн 06, 2020 10:09 am) • Yashalta (Пн июн 08, 2020 9:08 am) • viktor6 (Чт июн 11, 2020 10:34 pm)
Рейтинг: 4.94%
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Ответить