Использование грамматики с Web Speech API - PullRequest
0 голосов
/ 09 ноября 2018

Да, есть вопросы, подобные этому, но они слишком старые ... Теперь грамматика полностью поддерживается в chrome.link: https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition/grammars

Я использую Web Speech API для реализации распознавания речи. Свойство Грамматика интерфейса SpeechRecognition возвращает и устанавливает коллекцию объектов SpeechGrammar, которые представляют грамматики, которые будут понятны текущему SpeechRecognition. Я использую последнее обновление Chrome, и «они» говорят, что в Chrome поддерживается грамматика.

В большинстве случаев, когда я говорю «Кто ты», веб-речь распознается как «Как дела». Как я могу задать предложение «Кто ты», например, для возможных вводов?

Я попробовал пару часов, безуспешно дергал себя за волосы ...

Вот код:

  var SpeechRecognition = SpeechRecognition || webkitSpeechRecognition;
  var SpeechGrammarList = SpeechGrammarList || webkitSpeechGrammarList;
  var SpeechRecognitionEvent = SpeechRecognitionEvent || webkitSpeechRecognitionEvent;

  var recognition = new SpeechRecognition();
  var speechRecognitionList = new SpeechGrammarList();
  recognition.grammars = speechRecognitionList;
  recognition.lang = 'en-GB';
  recognition.interimResults = false;
  recognition.maxAlternatives = 1;

  recognition.start();

  recognition.onresult = function(event) {

    var speechResult = event.results[0][0].transcript;
 // We get speechResult to do something with it here

    console.log('Confidence: ' + event.results[0][0].confidence);
  }

  recognition.onspeechend = function() {
    recognition.stop();
    console.log('Speech ended!');
  }

  recognition.onerror = function(event) {
 console.log('Error occurred in recognition: ' + event.error);
  }

  recognition.onaudiostart = function(event) {
      //Fired when the user agent has started to capture audio.
      console.log('SpeechRecognition.onaudiostart');
  }

  recognition.onaudioend = function(event) {
      //Fired when the user agent has finished capturing audio.
      console.log('SpeechRecognition.onaudioend');
  }

  recognition.onend = function(event) {
      //Fired when the speech recognition service has disconnected.
      console.log('SpeechRecognition.onend');
  }

  recognition.onnomatch = function(event) {
      //Fired when the speech recognition can't recognise speech
      console.log('SpeechRecognition.onnomatch');
  }

  recognition.onsoundstart = function(event) {
      //Fired when any sound — recognisable speech or not — has been detected.
      console.log('SpeechRecognition.onsoundstart');
  }

  recognition.onsoundend = function(event) {
      //Fired when no sound present
      console.log('SpeechRecognition.onsoundend');
  }

  recognition.onspeechstart = function (event) {
      //Fired when speech starts
      console.log('SpeechRecognition.onspeechstart');
  }
  recognition.onstart = function(event) {
      //Fired when the speech recognition service has begun listening
      console.log('SpeechRecognition.onstart');
  }

1 Ответ

0 голосов
/ 13 июля 2019

Существует способ добавить еще одну грамматику в список грамматик и добавить к ней больший вес (важность):

const grammar = '#JSGF V1.0; grammar colors; public <color> = aqua | azure | beige | bisque | black | blue | brown | chocolate | coral | crimson | cyan | fuchsia | ghost | white | gold | goldenrod | gray | green | indigo | ivory | khaki | lavender | lime | linen | magenta | maroon | moccasin | navy | olive | orange | orchid | peru | pink | plum | purple | red | salmon | sienna | silver | snow | tan | teal | thistle | tomato | turquoise | violet | white | yellow ;'
const recognition = new SpeechRecognition()
const speechRecognitionList = new SpeechGrammarList()
speechRecognitionList.addFromString(grammar, 1)
recognition.grammars = speechRecognitionList

Извлечь speechGrammarListInstance.addFromString .

Возможно, это не идеальное решение для вашего случая использования. Web Speech API, по-видимому, не очень гибок в плане контроля грамматики.

...