• Главная
  • »
  • JavaScript
  • »
  • JavaScript: Web API чтение текста и распрознование голоса

JavaScript: Web API чтение текста и распрознование голоса

Дата: 30.10.2016 в 19:07, Категория: JavaScript
  • 5353
  • 7
JavaScript: Web API чтение текста и распрознование голоса

Что-то давно не публиковал ничего интересного в блоге, никак не хватало времени взяться и настрочить даже небольшу статью. Сейчас наткнулся на документацию в Chrome API и нашу несколько интерсных API для работы с распознованием речи и озвучиванием текста. Больше всего мне нравится Web Speech API для распознавания речи и преобразования в текст. Данный API заботится о конфиденциальности пользователей и насколько мне известно, нигде не хранит историю распознавания (информация для параноиков), а так же не хранит нигде введеный текст . Перед использованием распознавания речи, пользователь должен разрешить доступ к микрофону. Пример диалога вы видите ниже.

Интересен тот факт, что запрос на разрешение такой же, как стандартный API метод GetUserMedia. Если страница, на которой используется данный API использует протокол HTTPS, браузер будет запрашивать разрешение только один раз, в противном случае он будет просить разрешение каждый раз, когда начинается новый процесс.

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

Всего мы будем использовать два API функционала. Это webkitSpeechRecognition - для распознавания речи и преобразования в текст. Второй speechSynthesis для озвучивания текста.

# Где работает?

Работает не во всех браузерах эти два API. На сайте CanIUser можете посмотреть подробней.

# Работа с webkitSpeechRecognition

К сожалению не все браузеры поддерживают выше описанные API и для того, чтобы не возникло ошибок, скрипт должен проверить, поддерживает ли данный браузер Web Speech API.

Если при проверки объекта webkitSpeechRecognition, ответ был true, скрипт создает webkitSpeechRecognition для дальнейшей работы. Конечно, все грамотные программисты в начале проверят на отрицательное условие, чтобы заранее предотвратить все неполадки. Но, я всего-лишь показываю пример работы с API и в будущем, советую делать как все грамотные программисты, в начале проверяя на отрицательное условие.

  function startRecognizer(){
    if ('webkitSpeechRecognition' in window) {
      var recognition = new webkitSpeechRecognition();
      recognition.lang = 'ru';

      recognition.onresult = function (event) {
        var result = event.results[event.resultIndex];
          console.clear();
          console.log(result[0].transcript);
      };

      recognition.onend = function() {
        console.log('Распознавание завершилось.');
      };

      recognition.start();
    } else alert('webkitSpeechRecognition не поддерживается :(')
  }
  startRecognizer();

Насчет точности распознавание я промолчу. Думаю вы и сами не раз сталкивались с тем, что произносите одно предложение, а пишет в поле вводится какая-то дичь.

Чтобы вы поняли, что за дичь втирается, предлагаю прочесть небольшой отрывок из статьи на хабре Распознавание речи для чайников.

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

Для того, что бы сохранить звуковой сигнал на цифровом носителе, его необходимо разбить на множество промежутков и взять некоторое «усредненное» значение на каждом из них.

Таким вот образом механические колебания превращаются в набор чисел, пригодный для обработки на современных ЭВМ.

Отсюда следует, что задача распознавания речи сводится к «сопоставлению» множества численных значений (цифрового сигнала) и слов из некоторого словаря (русского языка, например).

Думаю теперь вам ясно, что распознавание какой-либо речи не гарантирует 100% распознавание, из-за схожих частот в сигналах. И то, что нам "втирают" функции в наши устройства, типа Siri, ни что иное, как слабый шаг в огромное будущее.

# Работа с speechSynthesis

Теперь меньше теории и больше дела. Перейдем к воспроизведению речи с помощью speechSynthesis. В отличии от webkitSpeechRecognition, данное API имеет поддержку уже у остальных браузеров, таких как: Firefox, Safari, Chrome (Chromium) и даже... И даже! В Microsoft Edge. Это хоть и не сильно радует, но хоть какой-то плюс есть от данного API на других браузерах.

Использовать данный API, ну очень просто. (Вы конечно извините, ну я не мог не вставить данный текст).

  speechSynthesis.speak(
    new SpeechSynthesisUtterance('Свит дримс, а мэйд оф зис. Ху эм ай, ту дисааагриии. Трэвэл зэ ворлд, энд зээ сэвэн сиз. Эврибади, лукинг фо самсинг. Сам оф зэм вонт тууу юз ююю. Сам оф зэм вонт тууу гет юзд бай ююю. Сам оф зэм вонт тууу эбьюз ююю. Сам оф зэм вонт тууу би эбьюююзд')
  );

Так же, можно настроить голос которым будет произноситься данный текст. Подробней обращаться к MDN (p.s: когда я изменил голос, мне телка начала нести какую-то чушь, вместо моего текста).

[h2]Ссылки[/h2]