SpeechRecognition не распознает правильные слова или буквы - PullRequest
0 голосов
/ 09 апреля 2020

A, B, C, D и т. Д. Появляется на экране, после чего я хочу, чтобы пользователь сказал ту же букву. Но моя проблема в том, что распознавание речи не улавливает буквы, которые я произношу вслух ... Иногда получается, что я говорю А, а иногда "в большинстве случаев", но не ...

ссылка ниже использует тот же код, но по какой-то причине он не распознает мои слова / буквы одинаково?

https://davidwalsh.name/demo/speech-recognition.php

window.SpeechRecognition = window.webkitSpeechRecognition || window.SpeechRecognition;
//speech te söylenen harflerin varyasyonlarını zannediyor bazen. Burada varyasyonlar tanıtılıyor.

var letters = [
{'letter': 'A' , 'morphs' : ['a','ah','ay']},
{'letter': 'B' , 'morphs' : ['b','be','beh']},
{'letter': 'C' , 'morphs' : ['c','ce','ceh']}
];

let finalTranscript = '';
let recognition = new window.SpeechRecognition();
//interimResults her kelimeyi tutuyor. Bizde uzun bir konuşma olmadığı için interimresults false
recognition.interimResults = false;

//maxAlternatives kelime alternatiflerini getiriyor. biz sadece bir tane alternatif istiyoruz.
recognition.maxAlternatives = 1;

//continious mode devamlı açık tutuyor. Biz sadece bir harf bekledğimiz için onresult fonksiyonunu tetiklesin diye continous mod kapalı ama onend ile arada keslince tekrar start ediyoruz.
recognition.continuous = false;

recognition.lang = 'tr-TR';

//Burada çıkacak harlerin dizisi
var LetterArray = ['A','B','C'];
//bu değişken setinterval ile dönen döngüde şu andaki harfi tutuyor.
var ThisLetter = '';
//bu değişken yukarıdaki harfin morph larını tutuyor.
var filteredletter;

recognition.onresult = (event) => {
    //eğer isfinal se yani
    if (event.results[0].isFinal)
        finalTranscript = event.results[0][0].transcript;
    //result değişkeni eğer şu anki harfle söylenen eşleşiyorsa true oluyor.
    var result= false;
    console.log(finalTranscript);
    //şu anki harfin morph ları kontrol ediliyor. Eğer morphlardan herhangi biri eşleşirse result değişkeni true olacak.
    $(filteredletter[0].morphs).each(function() { result = finalTranscript != this ? result : true; });
    //subdiv e sunucu yazıyor.
    $('.SubDiv').html(result.toString());
}
//i değişkenini harf dizisinin sonuna ulaşıp ulaşmadığımı kontrol etmek için kullanıyorum.
var i = 0;
//jQuery eğer document hazırsa
$( document ).ready(function() {
    //ses tanımayı başlat
    recognition.start();
    //setinterval ilk başlatıldığında verilen saniye sonra ilk çalışmasının yapıyor. biz hemen çalışmasının istediğimiz için yapacağım işlemleri bir fonksiyon altına tanımlıyorum.
    function ControlLetters() {
        //şu anki harfi yazıyor.
        $('.MainDiv').html('<i style="color:#000; font-size:150px;">' + LetterArray[i] + '</>');    
        //durumu temisliyor
        $('.SubDiv').html('');
        //eğer harf dizinin sonuna gelmişsek intervali sonlandırıyorum.
        if(i>= LetterArray.length - 1){
            IntervalForFiveSeconds.stop();
        }
        //şu anki harf değişkenine dizinin şu anki elemanını atıyorum.
        ThisLetter = LetterArray[i];
        //harfin morphları için en üstteki objeden şu anki harfi filtreliyorum.
        filteredletter = letters.filter(function(obj) {
            return (obj.letter == ThisLetter);
        });
        //dizinin bir sonraki elemanın için i bir artıyor.
        i++;
        //continous mode'da olmadığımız için eğer dinleme sonlanırsa ve benim hala intervalim çalışıyorsa dinlemeyi tekrar başlatıyorum.
        recognition.onend = function() {
            //eğer interval hala çalışıyorsa
            if (IntervalForFiveSeconds.isRunning())
                recognition.start();
        }
    }
    //yukarıdaki fonksiyonu çalıştır.
    ControlLetters();
    //5 sn intervali başlatıyorum.
    var IntervalForFiveSeconds = new Interval(ControlLetters,5000);
    IntervalForFiveSeconds.start();
});
//setinterval i (döngüyü) oluşturup, devam edip etmediğini ve bitirmek istediğimde bitirmek için gerekli tanımlamaları kolaylaştırmak için fonksiyon.
function Interval(fn, time) {
    var timer = false;
    //setinterval başlat
    this.start = function () {
        if (!this.isRunning())
        timer = setInterval(fn, time);
    };
    //setinterval bitir.
    this.stop = function () {
        clearInterval(timer);
        timer = false;
    };
    //çalışıyor mu
    this.isRunning = function () {
        return timer !== false;
    };
}
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Speech Recording</title>
</head>
<body>
<script type="text/javascript" src="jquery-3.2.1.js"></script>
<script type="text/javascript" src="script.js"></script>

<div class="MainDiv"></div>
<div class="SubDiv"></div>

</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...