2016-01-15 11 views
7

रिकॉर्डिंग बंद कर देता है मैं टेक्स्ट ट्रांसक्रिप्शन के लिए लगातार भाषण करने की कोशिश कर रहा हूं लेकिन विज्ञापन के रूप में काम कर रहे वेबकिट स्पीच रिकॉग्निशन को प्रतीत नहीं होता है। ऐसा लगता है कि मैं यादृच्छिक रूप से रिकॉर्डिंग करना बंद कर देता हूं (आमतौर पर चुप्पी की लंबी अवधि के बाद) भले ही मैं निरंतर = सत्य और interimResults = सत्य सेट करता हूं। मैं यह भी याद नहीं कर सकता कि इस यादृच्छिक स्टॉपपेज का कारण क्या है क्योंकि मैंने हर किसी में एक सरल लॉग स्टेटमेंट डाला है। सिंगल। ईवेंट। वह वेबकिट स्पीच रिकॉग्निशन उन दस्तावेज़ों पर आधारित है जो मुझे मिल सकता है।WebkitSpeechRecognition यादृच्छिक रूप से

कोई त्रुटि नहीं रिकॉर्डिंग से पहले लॉग इन कर रहे: यहाँ मैं क्या है की स्क्रिप्ट

मुझे क्या पता (अनिवार्य रूप से प्रदर्शन https://www.google.com/intl/en/chrome/demos/speech.html पर एक मामूली आधुनिक) है।

मैं एक गीगाबिट कनेक्शन पर हूं इसलिए अंतराल से संबंधित नहीं है।

यह लंबे समय तक रोक के बाद सामान्य रूप से बंद हो जाता है लेकिन कभी-कभी कारण के बिना बंद हो जाता है।

यह 2 मिनट या केवल 30 सेकंड के बाद हो सकता है।

मैंने नीचे दिए गए कुछ में टिप्पणी की लेकिन मैंने इस मुद्दे का पता लगाने के लिए बिना किसी सफलता के उन सभी को आजमाया है।

var final_transcript = ''; 
    var recognizing = false; 
    var ignore_onend; 
    var start_timestamp; 
    if (!('webkitSpeechRecognition' in window)) { 
     upgrade(); 
    } else { 
     var recognition = new webkitSpeechRecognition(); 
     recognition.continuous = true; 
     recognition.interimResults = true; 

     recognition.onstart = function() { 
      recognizing = true; 
     }; 

     recognition.onerror = function (event) { 
      console.log("ERROR") 
      recognizing = false 
      recognition.stop() 
      recognizing = true 
      recognition.start() 
      if (event.error == 'no-speech') { 
       console.log("NO SPEECH") 
      } 
      if (event.error == 'audio-capture') { 
       console.log("Capture Problem") 
      } 
      if (event.error == 'not-allowed') { 
       if (event.timeStamp - start_timestamp < 100) { 
        console.log("Block") 
       } else { 
        console.log("Deny") 
       } 
      } 
     }; 

     recognition.onend = function() { 
      console.log("ONEND") 
      recognition.stop() 
      recognizing = false 
      recognition.start() 
     }; 

     recognition.onresult = function (event) { 
      var interim_transcript = ''; 
      if (typeof(event.results) == 'undefined') { 
        console.log("undefined start") 
        recognition.stop() 
        recognizing = false 
        recognition.start() 
        console.log("undefined end") 
        return; 
       } 
      for (var i = event.resultIndex; i < event.results.length; ++i) { 
       if (event.results[i].isFinal) { 
        final_transcript += event.results[i][0].transcript; 
       } else { 
        interim_transcript += event.results[i][0].transcript; 
       } 
      } 
      final_transcript = capitalize(final_transcript); 
      final_span.innerHTML = linebreak(final_transcript); 
      interim_span.innerHTML = linebreak(interim_transcript); 
     }; 

{#   recognition.onspeechend = function() {#} 
{#    console.log("SpeechEND")#} 
{#   };#} 
{##} 
{#   recognition.onpause = function() {#} 
{#    console.log("PAUSE")#} 
{#   }#} 
{##} 
{#   recognition.onsoundend = function() {#} 
{#    console.log("Sound")#} 
{#   }#} 
{##} 
{##} 
{#   recognition.onaudioend = function() {#} 
{#    console.log("AUDIO")#} 
{#   }#} 
{##} 
{##} 
{#   recognition.onnomatch = function() {#} 
{#    console.log("NOMATCH")#} 
{#   }#} 
{##} 
{#   recognition.onmark = function() {#} 
{#    console.log("MARK")#} 
{#   }#} 
{##} 
{#   recognition.onboundary = function(){#} 
{#    console.log("BOUNDARY")#} 
{#   }#} 

     } 
    var two_line = /\n\n/g; 
    var one_line = /\n/g; 
    function linebreak(s) { 
     return s.replace(two_line, '<p></p>').replace(one_line, '<br>'); 
    } 

    var first_char = /\S/; 
    function capitalize(s) { 
     return s.replace(first_char, function (m) { 
      return m.toUpperCase(); 
     }); 
    } 

    $("#start_call").click(function() { 
     $("#start_call").addClass('hidden'); 
     $("#end_call").removeClass('hidden'); 
     final_transcript = ''; 
     recognition.lang = 'en-US'; 
     recognition.start(); 
     ignore_onend = false; 
    }); 
    $("#end_call").click(function() { 
     $("#end_call").addClass('hidden'); 
     $("#start_call").removeClass('hidden'); 
     stopwatchClock.addClass('hidden'); 
     recognition.stop(); 
     recognizing = false 
    }); 
+0

मुझे यह वही समस्या है, क्या आपने कभी इसे समझ लिया है? –

+1

@ निकोनस मैं इस बात का आकलन नहीं कर सका कि समस्या का कारण क्या था जिससे मैं इसके लिए कुछ तर्क जोड़ रहा था। मैंने 10 सेकंड पहले लिखे गए शब्दों की स्थिति रखी और अंतराल पर सबसे हालिया प्रतिलेखन की तुलना की। यदि कोई परिवर्तन नहीं मिला है तो मैं मैन्युअल रूप से प्रतिलेखन को रोक और पुनरारंभ करूंगा। –

उत्तर

0

तुम मेरे GitHub पेज https://github.com/pantprateek/genieYT में फ़ाइल player.html में नमूना कार्यान्वयन देख सकते हैं। तर्क इस प्रकार है:

एक टाइमर बनाएं जो प्रत्येक 10secs के बाद मान्यता को रोकता है।

setInterval(resetVoiceRecog, 10000);

function resetVoiceRecog() {

`recognition.stop();` 

}

जब recognition.stop यह निश्चित रूप से कहा जाता है onend invokes और फिर मान्यता फिर से शुरू करते हैं।

recognition.onend = function(event) { 
     recognition.start(); 
    } 

यह विधि घंटों तक मेरे लिए काम करती है भले ही मैं कोई शब्द न बोलूं। शायद मदद कर सकता है।

संबंधित मुद्दे