Smoke

 
<<< Назад

Распознавание речи - бесплатно, просто, быстро.

Как средствами браузера распознавать речь и отправлять на свой сервер

Зачем?

Все просто - свои стили, простота работы, кроссбраузерность, ибо почти все популярные браузеры работают на движке хромиум. Никаких ключей, запросов к яндексу =) А еще можно замутить постоянное прослушивание эфира

Как оно работает?

Тоже все просто. За прием речи отвечает браузер, далее отправляет запрос, как я думаю в гугл на распознование и возвращает результат. Работает на 40 языках.

Работает только по протаколу HTTPS, т.е у вас должен быть установлен сертификат или скрипт постоянно будет спрашивать резрешение на запуск.

Как установить?

В сцену вставляем код:

<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: purple;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=ИМЯ_СКРИПТА&voice='+encodeURI(voiceStr.substring(keyWords)),
                            success: function(responce) {
                                //Возврат от скрипта MJDM
                            },
                            error: function(responce) {
                                alert('Ошибка отправки 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>

Если в коде заменить адрес куда отправлять распознаный текст на:

url: '/command.php?qry='+encodeURI(voiceStr.substring(keyWords)),

то сообщения будут прилетать в системную распозновалку.

Скрипт замутили, теперь кнопка, которая будет вызывать скрипт, внимание! Используются иконки LA Icon или установите или картинку юзайте, кнопка "прилипнет" к нижнему правому углу экрана

<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="las la-microphone" style="font-size: 4rem;color: white;"></i>
        </div>

Все!

Ну собственно все, теперь создаем скрипт в админке и в $_GET['voice'] будет прилетать текст, далее обрабатывайте как хотите =)

Обсуждение (9) (15)

Смотрите так же:
13.03.2023 Debounce настройка в z2m
06.03.2023 Боремся с mysql и жором места на диске
24.10.2021 Определяем выключен ли свет по камере о_О
18.10.2021 Опять прокси WS! Теперь для KeenDNS+NGINX
19.09.2021 Хитрый MJPEG или укрощение строптивого
08.06.2021 Парсим информер с Яндекс.Погоды
13.01.2021 Не разговаривает Алиса через облако?
15.12.2020 Разгоняем Xiaomi Home
04.11.2020 Проксирование WebSocket с wss:// -> ws://
02.11.2020 Как получить время езды до работы?
02.06.2020 Стилизация штатного редактора кода, часть 2
01.06.2020 Стилизация штатного редактора кода
29.01.2020 Парсим данные баланса из ЛК Билайн (Update)
28.01.2020 Camshoter на свой лад
21.01.2020 Google Location + Yandex Maps, на свой лад
19.01.2020 Получение Я.Погоды из сценария
17.01.2020 Рассказ хейтера сцен в MJDM. Часть 2
17.01.2020 Как можно НЕ использовать сцены в MJDM. Часть 2
16.01.2020 Перезагружаем роутер Zyxel из MJDM
12.12.2019 Как подружить Camshoter и обычную вебку
07.10.2019 Управление планшетом из сцен/WEB
07.10.2019 Использование злосчастных WebSoccet
17.01.2020 ~DELETED~
23.07.2019 Как можно НЕ использовать сцены в MJDM. Часть 1.

Нижний Новгород, Россия

На форуме: SmoKE_xDDD