Русский
Русский
English
Статистика
Реклама

Голосовое управление

Cлайдер с голосовым управлением на JavaScript

16.06.2020 08:19:40 | Автор: admin
Доброго времени суток, друзья!

Я тут слайдер написал с голосовым управлением, распознаванием текста и его чтением (озвучиванием) средствами браузера.



Функционал:

  • Смена слайдов по нажатию кнопок или стрелок на клавиатуре
  • Тоже самое по голосовым командам вперед и назад
  • Распознавание текста на изображении, запись текста в локальное хранилище и чтение текста голосом от Google по нажатию кнопки читать
  • Тоже самое по голосовой команде читать

Код проекта.

GitHub Pages.

В разработке использовалось следующее:

  • Web Speech API
  • Tesseract.js
  • Windows
  • Chrome
  • Visual Studio Code
  • Сервер
  • Рубаи Омара Хайяма изображения в формате png

WSAPI это интерфейс для распознавание речи пользователя (SpeechRecognition) и речевого воспроизведения текста (SpeechSynthesis):


Tesseract.js библиотека для распознавания текста с изображений.

Поддержка WSAPI на сегодняшний день оставляет желать лучшего, но, учитывая возможности этой технологии, можно быть уверенным в том, что более полная поддержка не заставит себя долго ждать:




Я не вижу смысла цитировать MDN и спецификацию.

К слову, спецификация хоть и написана на эзоповом языке, но не очень объемна, так что дерзайте. Однако имейте ввиду, что она имеет статус рабочего черновика, поэтому может сильно измениться в будущем.

Я старался писать самодокументируемый код, т.е. называть переменные и функции говорящими именами, не использовать сложных конструкций (даже от тернарников воздержался), длинных цепочек из вызовов методов, возвращающих промисы, и т.д. Насколько мне это удалось, судить Вам.

Отмечу парочку моментов, которые могут вызвать недоумение.

После включения звука необходимо подождать около 4 секунд до полной инициализации слушателя (тоже самое касается окончания чтения текста).

Обратите внимание на этот костыль:

if (voices.length !== 0) {    read()} else {    speechSynthesis.addEventListener('voiceschanged', () => {        getVoices()        read()    }, { once: true })}

Дело в том, что метод speechSynthesis.getVoices(), предназначенный для получения доступных голосов, при первом вызове возвращает пустой массив. Событие, которое при этом возникает (voiceschanged), срабатывает трижды. При втором озвучивании обработка указанного события приводит к тому, что текст читается дважды.

Для разработки нужен сервер или его эмуляция.

Для эмуляции сервера в VSC я использую расширение Preview on Web Server (открываем index.html нажимаем ctr+shift+L). В Brackets аналогичное расширение поставляется из коробки и запускается с помощью ctrl+alt+p.

В директории проекта лежит файл server.js. Этот файл содержит два варианта сервера на Node.js классический и Express.

Для запуска Express-сервера необходимо открыть терминал в директории проекта (в Windows правая кнопка мыши -> Открыть окно команд) и набрать следующее:

npm inpm i nodemon -g // менеджер изменений (опционально)nodemon server.js// илиnode server.js

После запуска сервер доступен по адресу http://localhost:8125/ или http://127.0.0.1:8125/.

Буду рад обратной связи. Благодарю за внимание.
Подробнее..

Recovery mode Моя Яндекс.Станция Мини умеет выводить два звука одновременно, а ваша?

07.09.2020 04:21:52 | Автор: admin
Совсем недавно приобрел Яндекс.Станцию Мини. Если, кто не знает, это маленькая умная колонка, управляемая голосом и жестами. Внутри голосовой помощник Алиса: она включает музыку, отвечает на вопросы и выполняет поручения. Приобреталась как умный радиоприемник на кухню, последующего создания умного дома со своими навыками.

После спаривания с операционными системами Winodows 7, 10, Ubuntu 16.04, вдоволь поигравшись с ее возможностями, ознакомился с официальной документацией.

https://yandex.ru/support/station-mini/speaker.html
Использовать Станцию Мини как музыкальную колонку
На Станцию Мини можно транслировать музыку с компьютера, планшета или смартфона через Bluetooth как на обычную беспроводную колонку:
Скажите: Алиса, включи Bluetooth или нажмите кнопку отключения микрофонов и удерживайте ее пять секунд, пока подсветка Станции Мини не замигает.
Включите Bluetooth на компьютере, планшете или смартфоне и запустите поиск устройств Bluetooth.
В списке выберите Станцию Мини и включите музыку.
Пока Станция Мини играет музыку через Bluetooth, Алиса вас не слышит. Чтобы выйти из режима трансляции, разорвите соединение на стороне вашего компьютера, смартфона или планшета.







После прочтения очень сильно расстроился. С одной стороны потрясающие возможности речевого управления, создания навыков, умного дома. С другой стороны, используя возможности зарядки от USB 3.0 порта ноутбука, получаем пульт голосового управления с радиусом дальнобойности хорошей точки Wi-Fi, без особых ухищрений до 100 метров!

Решил проверить кодовую фразу на колонке, спаренной по Bluetooth с компьютером. Алиса, включи радио Маяк. И радио запело И параллельно шел звук с компьютера. В итоге,
официальная документация опровергнута, устройство с августа 2020 получило новые возможности. Для двух потоков рекомендуется командовать одним потоком как обычно, командами Алисы, потоком по Bluetooth можно управлять регуляторами громкости компьютера, так же задействовав беспроводную клавиатуру с клавишами управления, либо, если есть, отдельными кнопками управления громкости ноубука с торца устройства.

У кого еще получится провести такой эксперимент?
Подробнее..

Мы посадили за телефон робота вместо человека и чуть все не сломали

06.11.2020 10:14:52 | Автор: admin

Еще пару лет назад казалось, что мир должны захватить телефонные роботы-обзвонщики. Потому что на дворе цифровой век, умные люди обещают сингулярность через двадцать лет а компании все еще держат гигантские колл-центры с кучей народа. Те делают монотонную однотипную работу, и аналитики в один голос твердят вот первые кандидаты на автоматизацию и смерть профессии.

Процесс вроде начался распознавание голоса вышло на новый уровень. Гугл на своей презентации показывает, как робот звонит в ресторан, бронирует столик, а человек на другом конце не понимает, что говорил с роботом. Корпорации одна за другой выпускают голосовых помощников Яндекс Алису, Тиньков Олега. Роботы поддерживают беседу и шутят шутки.

Мы тоже подумали, что посадить за телефон робота будет отличной идеей. Но поняли на самом деле все не так уж круто.

Казалось, настроить робота плевое дело

У нас в Skyeng есть бесплатные вводные занятия. Люди на них записываются, но мы знаем, что часть из них передумает. Поэтому, например, на 10 преподавателей в слоте записываем 13 учеников. Преподаватель ищет себе ученика ближе к уроку и обзванивает записавшихся получить у них подтверждение. Каждый раз нужно обзвонить несколько контактов, подсказанных системой.

Это съедало время, которое преподаватель мог потратить на урок или на отдых. И мы решили пусть звонит робот!

Глобально роботы делятся на два типа: с машинным обучением и без него. Первый тип поглощает данные, учится на них и становится всё лучше и лучше. Второй тип проще он работает на готовых пакетах распознавания слов. Система слышит голос, распознает, переводит аудио в текст, и слова сверяются с прописанным текстовым сценарием. Грубо говоря, если в ответе ученика есть слово да произнеси один текст, если нет другой.

Наш робот был как раз таким простой, без ИИ, со встроенным пакетом для распознавания от стороннего подрядчика и синтезатором речи.

Первого робота звали Антон

На мой вкус у него был самый противный голос из стандартных: мужской-скрипучий-роботизированный.

Этим голосом он напоминал день и время, когда состоится урок, спрашивал, готов ли студент к занятию, и принимал два ответа: да или нет, а потом направлял их в соответствующие ветки разговора.

Мы запустили тест на большой трафик, и это все только испортило. Пропущенных вводных занятий было много. Тогда мы стали слушать записи разговоров, чтобы понять, в чем проблема. Она оказалась на поверхности люди бросали трубку только услышав первые слова.

В скрипучем голосе робота Антона, естественно, было мало приятного (я же говорила). Мы подумали: сейчас сделаем голос красивее, люди будут слушать робота до конца и конверсия заживет.

Неприятного Антона заменила Влада.

Ей дали голос реального человека сотрудницы Skyeng, девушки-оператора из отдела продаж. Звучало потрясающе, очень красиво. Всем нравилось.

Ликовали мы недолго. Люди не отваливались от звонка сразу, но переводов на оператора стало кратно больше. Потому что теперь, слыша голос живого человека, не все понимали, что это робот. И отвечали витиеватыми фразами как в разговоре с настоящим оператором. А не короткими ответами-командами, которые хотелось бы услышать роботу. Слишком подробно для нашей Влады. Процент успешного распознавания просел, это сказалось на конверсии.

Еще один минус живого голоса Влада могла произносить только заранее записанные сэмплы. Обычный робот синтезировал любой текст, это давало нам гибкость и возможность быстро перенастраивать сценарии. А Влада не могла даже проговорить, когда состоится занятие. Мы не записали сэмплы всех возможных комбинаций дат и времени их очень много. Она просто говорила ваш урок скоро состоится, что тоже вносило путаницу.

Оказалось, робот не должен быть слишком человечным

Тогда мы взяли третий вариант робот Захар, не такой противный как Антон, но и не такой живой как Влада. Захар просто норм. Не так раздражает, но и не вводит в заблуждение.

Плюс, после опыта с Владой мы расширили Захару словарь. К примеру, мы научили его распознавать популярные ответы КОНЕЧНО и НЕ. Но это привело к новым проблемам. Например, слово КОНЕЧНО робот отправлял в ветку НЕТ. Потому что часто при произношении в слове коНЕчно четко слышился слог НЕ. С распознаванием ничего не сделаешь. Словарь не помог.

Хуже того когда робот делал ложно-отрицательный вывод, он отвечал: Спасибо, менеджер с вами свяжется. Человек думал, что вводное занятие подтверждено, а потом ему звонил менеджер и предлагал назначить вводный урок на другое время. Возникала неловкая путаница.

Мы заморочились: стали менять тексты, которые произносил робот. Увеличили количество развилок в разговоре. Добавили тоновый набор вместо распознавания слов. Подумали, что так ответы станут точнее, и это поднимет конверсию в подтверждение. Доля ложных отказов и правда снизилась. Зато ухудшилось все остальное. Оказалось, испортить метрики может даже время года.

Тестирование гипотез начиналось с 5-10% пользователей и могло доходить до 50% перед принятием решения о сохранении такого изменения.Тестирование гипотез начиналось с 5-10% пользователей и могло доходить до 50% перед принятием решения о сохранении такого изменения.

Мы тестировали робота зимой. Представьте человек идет по улице в перчатках и слышит телефонный звонок. Отвечает через наушники и доходит до момента с тоновым набором. Снимает перчатки, разблокирует телефон, идет искать нужную цифру для ответа. Ошибается и нажимает не туда, либо нажатие не срабатывает, и он не успевает ответить.

Поэтому мы вернули распознавание голоса, но и тоновый набор убирать не стали. Если робот не распознал голос, мы ставили блок с таким текстом: Я вас не понял, нажмите единичку, если вы придете

Число ошибок и правда упало до прежнего уровня, зато нам стали чаще отвечать нет. А да реже. Что тоже было плохо.

Главное, что мы поняли: назвался роботом упрощай

Самые лучшие результаты получились, когда мы стали подсказывать людям, как отвечать. Если вы придете на вводный урок, скажите "да". Америку мы не открыли, так делают многие роботы. Человек слышал четкий инструктаж, как ответить, но это тоже не панацея.

Мы выстроили такую цепочку. Сначала говорит Захар и произносит инструкции, как ответить. Студент отвечает, а если робот не понимает подключается блок с тоновым набором ответов, максимально короткими вопросами и инструкциями. Затем вторая тоновая попытка для подтверждения. А уж если и тоновые не вывозят переводим на оператора.

Так мы, наконец, снизили нагрузку на операторов и получили сильное снижение числа ошибок но росли как ответы да, так и ответы нет. Мы оставили этот вариант, так как получили рост ключевой сквозной метрики. На этом история с тестом робота завершилась. Она была долгой и мучительной для всех участников процесса.

А может ну их, эти звонки?

Мы часто думали об этом в ходе эксперимента. В звонках нет привычных метрик: кликов на кнопки, переходов по страницам, проведенного на них времени. В звонки невозможно вставить виджет с просьбой оценить удобство интерфейса есть только голос человека и тикающие секунды разговора.

Когда запускаешь гипотезу, собираешь данные и выясняешь, что работает плохо это неприятно. Хочется просто взять и больше никогда в жизни не заниматься никакими звонками. Просто выкинуть их как явление и перевести все на интерфейсы.

Но так не работает. День, когда условный Apple выпустит айфон без функции звонков, вряд ли наступит скоро, если вообще наступит. Как бы ни поумнели наши девайсы, сколько бы ядер ни было в их процессорах, и сколько бы камер ни было на задней панели это все еще телефоны, по которым люди друг другу звонят.

Что там будет дальше вообще неизвестно. Сегодня интерфейсы кажутся проще и понятнее, а завтра дети, выросшие на разговорах с колонкой, опять вернутся к голосу. А потом к чему-то еще.

Но пока звонки все еще часть мира, их надо автоматизировать так, чтобы всем было удобно и хорошо. Через тернии и скрипучие голоса.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru