2015-05-01 3 views
7

Я пытаюсь создать редактор с голосом с поддержкой HTML5 с использованием API распознавания речи. В настоящее время проблема заключается в том, когда вы начинаете запись, она длится только определенное количество времени (в основном до тех пор, пока пользователь не перестанет говорить).Распознавание речи - Постоянно работает

Я могу установить continuous и interimResults на true, но это не заставляет его записывать навсегда. Он все еще заканчивается.

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

Есть ли способ разрешить ему работать непрерывно, только когда пользователь спрашивает пользователя один раз?

ответ

8

Независимо от настроек, которые вы выбрали, Google Chrome останавливает механизм распознавания речи через некоторое время ... вокруг него нет никакого способа.

Единственное надежное решение, которое я нашел для непрерывного распознавания речи, заключается в том, чтобы запустить его снова, привязав к событию onend(), как вы предложили.

Если попробовать подобную технику, то имейте в виду следующее:

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

  2. Убедитесь, что вы не перезапускаете распознавание речи немедленно onend() без каких-либо гарантий, чтобы убедиться, что вы не помещаете браузер в бесконечный цикл (например, две открытые вкладки с onend(function() {restart()}) могут привести к краху браузера, подробно описан в этом отчете об ошибке: https://code.google.com/p/chromium/issues/detail?id=296690) См. https://github.com/TalAter/annyang/blob/master/annyang.js#L152, как я справляюсь с этим.

  3. Не автозапуск, если причина его окончание что-то вроде service-not-allowed или not-allowed См https://github.com/TalAter/annyang/blob/master/annyang.js#L132

Вы можете увидеть, как я справилась с этим в моем коде - https://github.com/TalAter/annyang/blob/master/annyang.js

+0

@samanime Если вы считаете, что это самый точный ответ, пожалуйста, отметьте ответ как правильный. –

-2

Пожалуйста, попробуйте это код, я думаю, он делает то, что вам нужно:

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
     <title>Speech recognition</title> 
 
     <style> 
 
      #result{ 
 
       border: 2px solid black; 
 
       height: 200px; 
 
       border-radius: 3px; 
 
       font-size: 14px; 
 
      } 
 
      button{ 
 
       position: absolute; 
 
       top: 240px; 
 
       left: 50%; 
 
      } 
 
     </style> 
 
     <script type="application/javascript"> 
 
      function start(){ 
 
       var r = document.getElementById("result"); 
 
      if("webkitSpeechRecognition" in window){ 
 
       var speechRecognizer = new webkitSpeechRecognition(); 
 
       speechRecognizer.continuous = true; 
 
       speechRecognizer.interimResults = true; 
 
       speechRecognizer.lang = "en-US"; 
 
       speechRecognizer.start(); 
 
       
 
       var finalTranscripts = ""; 
 
       speechRecognizer.onresult = function(event){ 
 
        var interimTranscripts = ""; 
 
        for(var i=event.resultIndex; i<event.results.length; i++){ 
 
         var transcript = event.results[i][0].transcript; 
 
         transcript.replace("\n", "<br>"); 
 
         if(event.results[i].isFinal){ 
 
          finalTranscripts += transcript; 
 
         } 
 
         else{ 
 
          interimTranscripts += transcript; 
 
         } 
 
         r.innerHTML = finalTranscripts + '<span style="color: #999;">' + interimTranscripts + '</span>'; 
 
        } 
 
       }; 
 
       speechRecognizer.onerror = function(event){ 
 
       }; 
 
      } 
 
      else{ 
 
       r.innerHTML = "Your browser does not support that."; 
 
      } 
 
      } 
 
     </script> 
 
    </head> 
 
    <body> 
 
     <div id="result"></div> 
 
     <button onclick="start()">Listen</button> 
 
    </body> 
 
</html>

Смежные вопросы