Рубрики
Без рубрики

Как построить простое приложение для распознавания речи

«В этом 10-летнем срочном раме я считаю, что мы не только будем использовать клавиатуру и мышь, чтобы взаимодействовать, но за это время мы будем усовершенствовать распознавание речи, а выработание речи достаточно хорошо, чтобы они станут стандартной частью интерфейс.” – Билл Гейтс, 1 октября

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

С появлением Siri, Alexa и Google Assistant пользователи технологий высказали для признания речи в их повседневном использовании Интернета. В этом посте я буду охватывать, как интегрировать родное распознавание речи и синтез речи в браузере с помощью JavaScript WebSpeech API Отказ

Согласно веб-документам Mozilla:

Требования нам нужно будет построить нашу заявку

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

  • index.html содержащий HTML для приложения.
  • style.csss содержащий стили CSS.
  • index.js содержащий код JavaScript.

Кроме того, нам нужно иметь несколько вещей на месте. Они следующие:

  • Основные знания о JavaScript.
  • Веб-сервер для запуска приложения. Веб-сервер для Chrome будет достаточно для этой цели.

Настройка нашего приложения для распознавания речи

Давайте начнем, настроив HTML и CSS для приложения. Ниже приведена HTML Markup:





  
  
  
  Speech Recognition
  
  
  


  

Вот его сопровождающий стиль CSS:

body {
  background: #1e2440;
  color: #f2efe2;
  font-size: 16px;
  font-family: 'Kaushan Script', cursive;
  font-family: 'Shadows Into Light', cursive;
}
.container {
  position: relative;
  border: 1px solid #f2efe2;
  width: 40vw;
  max-width: 60vw;
  margin: 0 auto;
  border-radius: 0.1rem;
  background: #f2efe2;
  padding: 0.2rem 1rem;
  color: #1e2440;
  overflow: scroll;
  margin-top: 10vh;
}
.text-box {
  max-height: 70vh;
  overflow: scroll;
}
.text-box:focus {
  outline: none;
}
.text-box p {
  border-bottom: 1px dotted black;
  margin: 0px !important;
}
.fa {
  color: white;
  background: #1e2440;
  border-radius: 50%;
  cursor: pointer;
  margin-top: 1rem;
  float: right;
  width: 2rem;
  height: 2rem;
  display: flex !important;
  align-items: center;
  justify-content: center;
}
@media (max-width: 768px) {
  .container {
    width: 85vw;
    max-width: 85vw;
  }
.text-box {
    max-height: 55vh;
  }
}

Копирование вышеуказанного кода должно привести к тому, что что-то похожее на это:

Включение вашего приложения распознавания речи с API веб-речи

На момент написания письма WebSpecheech API доступен только в Firefox и Chrome. Его интерфейс синтеза речи живет в браузере окно объект как речсинет В то время как его интерфейс распознавания речи живет в браузере окно объект как Процепстворение в Firefox и как WebKitsPeechReCognition в хроме.

Мы собираемся установить интерфейс распознавания на Процепстворение Независимо от браузера мы находимся:

window.SpeechRecognition = window.webkitSpeechRecognition || window.SpeechRecognition;

Далее мы создаем интеграцию интерфейса распознавания речи:

const recognition = new SpeechRecognition();
const icon = document.querySelector('i.fa.fa-microphone')
let paragraph = document.createElement('p');
let container = document.querySelector('.text-box');
container.appendChild(paragraph);
const sound = document.querySelector('.sound');

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

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

icon.addEventListener('click', () => {
  sound.play();
  dictate();
});
const dictate = () => {
  recognition.start();
}

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

Чтобы вернуть результат для того, что пользователь говорит, что нам нужно добавить Результат Мероприятие к нашему экземпляру речи. диктовать Функция тогда выглядит так:

const dictate = () => {
  recognition.start();
  recognition.onresult = (event) => {
    const speechToText = event.results[0][0].transcript;
    
    paragraph.textContent = speechToText;
  }
}

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

Если мы запустим приложение в этот момент, нажмите Значок И сказать что-то, он должен появиться на странице.

Упаковывать его с текстом в речь

Чтобы добавить текст в речь в наше приложение, мы будем использовать речсинет Интерфейс WebSpeech API. Начнем с создания его:

const synth = window.speechSynthesis;

Далее мы создадим функцию говорить Что мы будем звонить, когда мы хотим приложение что-то сказать:

const speak = (action) => {
  utterThis = new SpeechSynthesisUtterance(action());
  synth.speak(utterThis);
};

говорить Функция принимает функцию, называемую Действие как параметр. Функция возвращает строку, которая передается Рехсинтейзость Отказ Рехсинтейзость Это интерфейс API WebSpechech, который содержит контент, следует прочитать услугу распознавания речи. Рехсинтейз говорить Затем его экземпляр вызывается и передавал контент для чтения.

Чтобы проверить это, нам нужно знать, когда пользователь закончится, и говорит ключевое слово. К счастью, есть метод, чтобы проверить, что:

const dictate = () => {
  ...
  if (event.results[0].isFinal) {
    if (speechToText.includes('what is the time')) {
        speak(getTime);
    };
    
    if (speechToText.includes('what is today\'s date
')) {
        speak(getDate);
    };
    
    if (speechToText.includes('what is the weather in')) {
        getTheWeather(speechToText);
    };
  }
  ...
}
const getTime = () => {
  const time = new Date(Date.now());
  return `the time is ${time.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true })}`
};
const getDate = () => {
  const time = new Date(Date.now())
  return `today is ${time.toLocaleDateString()}`;
};
const getTheWeather = (speech) => {
fetch(`http://api.openweathermap.org/data/2.5/weather?q=${speech.split(' ')[5]}&appid=58b6f7c78582bffab3936dac99c31b25&units=metric`)
.then(function(response){
  return response.json();
})
.then(function(weather){
  if (weather.cod === '404') {
    utterThis = new SpeechSynthesisUtterance(`I cannot find the weather for ${speech.split(' ')[5]}`);
    synth.speak(utterThis);
    return;
  }
  utterThis = new SpeechSynthesisUtterance(`the weather condition in ${weather.name} is mostly full of ${weather.weather[0].description} at a temperature of ${weather.main.temp} degrees Celcius`);
  synth.speak(utterThis);
  });
};

В коде выше, мы назвали isfinal Метод на нашем результате события, который возвращает правда или ложь В зависимости от того, если пользователь горит.

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

Наше index.js Файл должен теперь выглядеть так:

window.SpeechRecognition = window.webkitSpeechRecognition || window.SpeechRecognition;
const synth = window.speechSynthesis;
const recognition = new SpeechRecognition();

const icon = document.querySelector('i.fa.fa-microphone')
let paragraph = document.createElement('p');
let container = document.querySelector('.text-box');
container.appendChild(paragraph);
const sound = document.querySelector('.sound');

icon.addEventListener('click', () => {
  sound.play();
  dictate();
});

const dictate = () => {
  recognition.start();
  recognition.onresult = (event) => {
    const speechToText = event.results[0][0].transcript;
    
    paragraph.textContent = speechToText;

    if (event.results[0].isFinal) {

      if (speechToText.includes('what is the time')) {
          speak(getTime);
      };
      
      if (speechToText.includes('what is today\'s date')) {
          speak(getDate);
      };
      
      if (speechToText.includes('what is the weather in')) {
          getTheWeather(speechToText);
      };
    }
  }
}

const speak = (action) => {
  utterThis = new SpeechSynthesisUtterance(action());
  synth.speak(utterThis);
};

const getTime = () => {
  const time = new Date(Date.now());
  return `the time is ${time.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true })}`
};

const getDate = () => {
  const time = new Date(Date.now())
  return `today is ${time.toLocaleDateString()}`;
};

const getTheWeather = (speech) => {
  fetch(`http://api.openweathermap.org/data/2.5/weather?q=${speech.split(' ')[5]}&appid=58b6f7c78582bffab3936dac99c31b25&units=metric`) 
  .then(function(response){
    return response.json();
  })
  .then(function(weather){
    if (weather.cod === '404') {
      utterThis = new SpeechSynthesisUtterance(`I cannot find the weather for ${speech.split(' ')[5]}`);
      synth.speak(utterThis);
      return;
    }
    utterThis = new SpeechSynthesisUtterance(`the weather condition in ${weather.name} is mostly full of ${weather.weather[0].description} at a temperature of ${weather.main.temp} degrees Celcius`);
    synth.speak(utterThis);
  });
};

Давайте нажмем значок и попробуйте одну из следующих фраз:

  • Сколько времени?
  • Какое сегодня число?
  • Какая погода в Лагосе?

Мы должны получить ответ от приложения.

Заключение

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

Если у вас есть вопросы или отзывы, пожалуйста, оставьте их в качестве комментария ниже. Я не могу дождаться, чтобы увидеть, что вы строите с этим. Вы можете ударить меня в Twitter @developia_ Отказ

Оригинал: “https://www.freecodecamp.org/news/how-to-build-a-simple-speech-recognition-app-a65860da6108/”