menu
Uveb

20:42
Синтез та розпізнавання мови - виконання дій
Розпізнавання української мови на JavaScript з можливістю програмування на виконанння дій по ключових словах.
Працює тільки в Chrome та Firefox, причому у кожного по-своєму. На Android також працює, хоча функціональність обмежена в порівнянні з ПК.

Розпізнавання - у класі Recognizer. Починає слухати після визову start(), закінчує після stop(). Накопичує розпізнаний текст як transcript. Вміє повертати проміжні результати розпізнавання, якщо передати обробник у start():




Приклади роботи скрипту розпізнавання мови та виконання дій:
Натисніть Старт та говоріть Українською мовою ("телеграм" або "логотип" або "зателефонувати").

Html

Код
<input id="interim" placeholder="Прогрес розпізнавання"><br>
<textarea id="message" placeholder="Результат"></textarea><br>
<button id="recognize">Старт</button><br>
<span class="cod1"></span>

Js

Код
<script>
function isMobile() {
return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
}
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition || window.mozSpeechRecognition || window.msSpeechRecognition;
class Recognizer {
constructor() {
this.recognition = new SpeechRecognition();
this.recognition.lang = "uk-UK";
if (!isMobile()) {
this.recognition.continuous = true;
this.recognition.interimResults = true;
}
this.isRecognizing = false;
this.transcript = "";
}
start(handler) {
this.transcript = "";
this.recognition.onresult = (event) => {
this.onResult(event, handler);
};
this.recognition.start();
this.isRecognizing = true;
console.log("Started recognition");
}
stop() {
this.recognition.abort();
this.isRecognizing = false;
console.log("Stopped recognition");
}
onResult(event, handler) {
var interim_transcript = "";
for (var i = event.resultIndex; i < event.results.length; ++i) {
var result = event.results[i];
if (result.isFinal) {
this.transcript += result[0].transcript;
} else {
interim_transcript += result[0].transcript;
}
}
console.log(interim_transcript);
handler(interim_transcript);
}
}
const btnRecognize = document.querySelector("#recognize");
const txtInterim = document.querySelector("#interim");
const txtMessage = document.querySelector("#message");
const recognizer = new Recognizer();
function showText(text) {
txtInterim.value = text;
txtMessage.value = recognizer.transcript;
  var asis = document.getElementById('message').value;
if ((asis.indexOf("телеграм") != -1) || (asis.indexOf("Телеграм") != -1) || (asis.indexOf("Telegram") != -1) || (asis.indexOf("telegram") != -1)){
  setTimeout('window.open("https://t.me/uveb_net", "_blank"); ',1000);  
  }
if ((text.indexOf("логотип") != -1) || (text.indexOf("Логотип") != -1)){
setTimeout(function(){$('.cod1').load('/blog .img-responsive')}, 1000);  
}
if ((text.indexOf("Зателефонувати") != -1) || (text.indexOf("зателефонувати") != -1)){
setTimeout('window.open("tel:+380956619008",); ',1000);  
}
}
function start() {
txtInterim.value = "";
txtMessage.value = "";
recognizer.start(showText);
btnRecognize.innerHTML = "Зупинити";
}

function stop() {
recognizer.stop();
btnRecognize.innerHTML = "Старт";
}

btnRecognize.addEventListener("click", () => {
if (!recognizer.isRecognizing) {
start();
} else {
stop();
}
});  
</script>
Категорія: JavaScript | Переглядів: 354 | Додав: Uveb | Рейтинг: 3.0/6