2015-05-01 5 views
7

Ich versuche, einen HTML5-gesteuerten sprachgesteuerten Editor mit der Spracherkennungs-API zu erstellen. Momentan besteht das Problem, wenn Sie mit der Aufnahme beginnen, es dauert nur eine bestimmte Zeit (bis der Benutzer aufhört zu sprechen).Spracherkennung - Kontinuierliche Ausführung

Ich kann continuous und interimResults auf true setzen, aber das hält es nicht für immer aufzeichnen. Es endet immer noch.

Ich kann auch sagen, dass es während des Endereignisses erneut zu starten, aber dann fragt jedes Mal um Erlaubnis, was sehr störend ist.

Gibt es eine Möglichkeit, es kontinuierlich laufen zu lassen und nur einmal einen Benutzer zu fragen?

Antwort

8

Unabhängig von den Einstellungen, die Sie auswählen, stoppt Google Chrome die Spracherkennungs-Engine nach einer Weile ... es gibt keine andere Möglichkeit.

Die einzige zuverlässige Lösung, die ich für die kontinuierliche Spracherkennung gefunden habe, ist, sie erneut zu starten, indem Sie an das Ereignis onend() binden, wie Sie vorgeschlagen haben.

Wenn Sie eine ähnliche Technik versuchen, beachten Sie die folgenden Möglichkeiten:

  1. Wenn Sie nicht auf HTTPS sind, wird der Benutzer aufgefordert, die Erlaubnis zu geben, über und immer wieder bei jedem Neustart. Aus diesem Grund und aus vielen anderen Gründen gehen Sie bei der Verwendung der Spracherkennung keine Kompromisse bei HTTP ein.

  2. Stellen Sie sicher, dass Sie die Spracherkennung nicht sofort neu starten() ohne einige Sicherheitsvorkehrungen, um sicherzustellen, dass Sie den Browser nicht in eine Endlosschleife versetzen (zB zwei offene Tabs mit onend(function() {restart()}) können den Browser zum Absturz bringen) In diesem Fehlerbericht ausführlich beschrieben: https://code.google.com/p/chromium/issues/detail?id=296690) Siehe https://github.com/TalAter/annyang/blob/master/annyang.js#L152 für wie ich damit umgehe.

  3. nicht automatischen Neustart tun, wenn der Grund für sie so etwas wie service-not-allowed oder not-allowed Siehe endet https://github.com/TalAter/annyang/blob/master/annyang.js#L132

Sie können sehen, wie ich das in meinem Code behandelt - https://github.com/TalAter/annyang/blob/master/annyang.js

+0

@samanime Wenn Sie glauben, dass dies die genaueste Antwort ist, markieren Sie bitte die Antwort als die richtige. –

-2

Bitte versuchen, diese Code, ich denke es tut was du brauchst:

<!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>