8

yinelenen ifadeler, bu benim Android (ve masaüstünde çoğaltmak değil) ifadeleri sonucu speech recognition API çoğaltmaları bulundu.Konuşma tanıma API Android

Her bir deyim için, iki sonuç döndürür. İlki

enter image description here

ve ikincisi Gördüğünüz gibi, ikinci karşılığında, ifade yineleniyor

enter image description here

, her kopya final olarak işaretlenir ve ikincisi ötesinde olduğunu resultIndex. İlk dönüşte sadece bir kopya var, final ve resultIndex'un ötesindedir.

Yalnızca ikinci bir dönüş alırım, ancak sorun mobil Chrome'da gerçekleşmesi, ancak masaüstü Chrome'da gerçekleşmemesidir. Masaüstü Chrome yalnızca ilk dönüşü döndürür.

Yani, soru şu: tasarım davranışından mı bu? Öyleyse, daha sonra tüm bilgisayarlar için tek bir son ifade nasıl ayırt edilir?

Ya da ses yankısı gibi bir hata olabilir, o zaman soru nasıl eko önlemek/kontrol etmektir?

GÜNCELLEME

Html olduğunu şöyle:

<input id="recbutton" type="button" value="Recognize"> 
<div id="output"> 

    <div> 
    Initial text 
    </div> 

</div> 

Kod aşağıdaki gibidir:

var recognition = null; 
var recognitionStarted = false; 
var printcount = 1; 
var lastPhrase = null; 

$(function() { 
    attachRecognition(); 
}); 

$('#recbutton').click(function() { 
    if(!recognitionStarted) { 
    recognition.start(); 
    } 
    else { 
    recognition.stop(); 
    } 
}); 

function printOut(text) { 
    var id = 'printcount' + printcount; 
    printcount++; 

    $('#output').append(
    "<div id='" + printcount + "'>" + text + "</div>" 
); 

    $("#output").animate({ scrollTop: $("#output").prop('scrollHeight')}); 

    return printcount; 

} 


function attachRecognition() { 

    if (!('webkitSpeechRecognition' in window)) { 

    $('button').prop('disabled', true); 

    recognition = null; 

    } else { 
    $('button').prop('disabled', false); 

    recognition = new webkitSpeechRecognition(); 

    recognition.continuous = true; 
    recognition.interimResults = true; 
    recognition.lang = "en-US"; 

    recognition.onstart = function(event) { 
     recognitionStarted = true; 
     printOut("speech recognition started"); 
    }; 

    recognition.onend = function(event) { 
      recognitionStarted = false; 
      printOut("speech recognition stopped"); 
    }; 

    recognition.onresult = function(event) { 

     var finalPhrase = ''; 
     var interimPhrase = ''; 
     var result; 
     var printcount; 

     for(var i=0; i<event.results.length; ++i) { 
     result = event.results[i]; 
     if(result.isFinal) { 
      finalPhrase = finalPhrase.trim() + ' ' + result[0].transcript; 
     } 
     else { 
      interimPhrase = interimPhrase.trim() + ' ' + result[0].transcript; 
     } 
     } 

     if(!lastPhrase) { 
     printcount = printOut(''); 
     lastPhrase = $('#' + printcount); 
     } 

     lastPhrase.html(finalPhrase.trim() + ' ' + interimPhrase.trim()); 

     if(finalPhrase.trim()) { 
     lastPhrase = null; 
     } 


    }; 
    } 
} 

JsFiddle: https://jsfiddle.net/dimskraft/envwao8o/1/

cevap

1

bu deneyin:

recognition.continuous = false; 
recognition.interimResults = false; 
recognition.maxAlternatives = 1; 

JSFiddle: result.isFinal özelliği ilişkin Chrome mobilden sağlanan https://jsfiddle.net/envwao8o/4/

+1

recognition.continuous olay işleyicisi kapsamı dışında başlatmak bir değişken olduğunu

if (isFinal) { transcript = result[0].transcript; if(transcript == lastDebounceTranscript) { return; } lastDebounceTranscript = transcript; } 

; kullanıcıdan sürekli girişi kabul etmeyecektir. – dirtyhandsphp

0

sonuç Krom masaüstünde olanlardan farklı olmasına bir hata ya da her halükarda var gibi görünüyor. Geçici bir (birinci) alternatif güven niteliğini kontrol etmektir: Aynı zamanda bazen nihai sonuç (aynı confidence değeriyle) iki kez yayılması anlamına benziyor

onResultHandler(event) { 
    let i = event.resultIndex; 
    let result = event.results[i]; 
    let isFinal = result.isFinal && (result[0].confidence > 0); 
} 

, bu durumda size isteyebilirsiniz Bu gibi bunu sektirilmesini ya da sadece ilk etkinliği işlemek: lastDebounceTranscript false =

İlgili konular