Я хочу найти способ реализации для распознавания речи в Chrome и Safari, предпочтительно с использованием ванильного JavaScript - PullRequest
0 голосов
/ 16 января 2019

Я хочу добавить распознавание речи в мои простые приложения и игры ESL. Я хотел бы найти решение, максимально приближенное к ванильному javascript, которое работает как в Chrome, так и в Safari.

Это скорее обсуждение подхода, чем исправление конкретного кода.

Последние полтора года я учусь программировать с использованием ванильного JavaScript. Я давал себе проекты по созданию образовательных приложений и игр ESL, чтобы применить то, что я изучаю. По этим причинам я хотел бы найти подход к реализации распознавания речи, который работает как в Chrome, так и в Safari (я думаю, что большинство моих учеников смогут получить доступ к играм с помощью одного из этих двух браузеров на ПК или Mac) таким образом, это максимально приближено к ванильному javascript, чтобы помочь мне научиться самостоятельно писать код и узнавать, что происходит под капотом, а не просто использовать стороннее программное обеспечение или библиотеки. Однако, учитывая некоторые сложности, о которых я читал и применяя этот подход к другим проблемам, я понимаю, что это может оказаться невозможным. Опять же, как можно ближе к ванильному javascript.

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

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

Из моего поиска в Google кажется, что мне может понадобиться использовать Swift для реализации Mac / Safari SFSpeechRecognizer, и я хотел бы избежать этого, если это возможно. Однако, если кто-то знает простой способ сделать это, это может сработать. Я просто не хотел бы изучать весь другой язык только для того, чтобы использовать одну функцию. Хотя, это может быть чаще, чем я понимаю, учитывая, что я новичок. Так что, если это проще, чем кажется, я весь в ушах.

Спасибо!

1 Ответ

0 голосов
/ 16 января 2019

Ванильный способ сделать это - использовать созданный для него Web API: SpeechRecognition , который в настоящее время поддерживается только в Chrome, и я не знаю, почему, но не в iframes. в настоящее время, например, сделать живой пример, к сожалению, невозможно ...

В любом случае, вот базовый пример, который вы можете использовать на своей странице.

const magic_word = ###Some magic word###;

// initialize our SpeechRecognition object
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.lang = 'en-US';
recognition.interimResults = false;
recognition.maxAlternatives = 1;
recognition.continuous = true;

// when we get some results
recognition.onresult = e => {
    // extract all the transcripts
    const transcripts  = [].concat.apply([], [...e.results]
      .map(res => [...res]
        .map(alt => alt.transcript)
      )
    );

  // do something with the transcripts,
  // here we are searching for our magic word
  if(transcripts.some(t => t.indexOf(magic_word) > -1)){
    //do something awesome, like starting your own command listeners
    console.log('hello user');
    recognition.stop();
  }
  else{
    // didn't understood...
    console.log("didn't got what you said", transcripts)
  }
}
// start on click of a button
btn.onclick = e => {
  recognition.stop();
  recognition.start();
};

Чтобы понять, как это работает под капотом, вы можете проверить проект Mozilla с открытым исходным кодом DeepSpeech , основанный на исследовательских работах Baidu Deep Speech .

Итак, чтобы было понятно, это не javascript, а реализация Chrome все еще передается на их сервер. Если вы хотите что-то построить самостоятельно, будьте готовы провести долгие ночи; -)

...