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