个性化阅读
专注于IT技术分析

JavaScript语言中的语音识别API入门

本文概述

JavaScript API语音识别使Web开发人员可以将语音识别合并到你的网页中。通过此API, 你可以对Chrome 25及更高版本中的语音识别功能进行精细控制和灵活调整。该API是实验性的, 这意味着并非在所有浏览器上都可用。即使在Chrome中, API的某些属性也不被支持。有关更多信息, 请访问我可以使用语音识别。

在本文中, 你将学习如何以最基本的表达方式使用语音识别API。

实现

首先, 你需要了解浏览器是否支持API。为此, 你可以使用以下任意代码片段来验证浏览器中的窗口对象是否具有webkitSpeechRecognition属性:

if (!('webkitSpeechRecognition' in window)) {
    alert("Unable to use the Speech Recognition API");
}

// Or

if (!window.hasOwnProperty("webkitSpeechRecognition")) {
    alert("Unable to use the Speech Recognition API");
}

// Or

if(typeof(webkitSpeechRecognition) != "function"){
    alert("Unable to use the Speech Recognition API");
}

验证后, 即可开始使用此API。创建webkitSpeechRecognition类的新实例并设置基本属性:

// Create a new instance of SpeechRecognition
var recognition = new webkitSpeechRecognition();
// Define whether continuous results are returned for each recognition
// or only a single result. Defaults to false
recognition.continuous = true;
// Controls whether interim results should be returned 
// Interim results are results that are not yet final 
// (e.g. the SpeechRecognitionResult.isFinal property is false.)
recognition.interimResults = true;
// Returns and sets the language of the current SpeechRecognition. 
// If not specified, this defaults to the HTML lang attribute value
// or the user agent's language setting if that isn't set either.
// There are a lot of supported languages (go to supported languages at the end of the article)
recognition.lang = "en-US";

现在已经设置了基本选项, 你将需要添加一些事件处理程序。在这种情况下, 我们将添加基本侦听器为onerror, onstart, onend和onresult(用于检索识别的文本的事件)。

错误

// Fired when an error happens with the speech recognition
// With all the following erro codes:
// info-blocked
// info-denied
// no-speech
// aborted
// audio-capture
// network
// not-allowed
// service-not-allowed
// bad-grammar
// language-not-supported
// recognition_overlap 
recognition.onerror = function(event) {
    console.error(event);
};

启动时

// will run when the speech recognition 
// service has began listening to incoming audio 
recognition.onstart = function() {
    console.log('Speech recognition service has started');
};

结束

// run when the speech recognition service has disconnected
// (automatically or forced with recognition.stop())
recognition.onend = function() {
    console.log('Speech recognition service disconnected');
};

结果

// This event is triggered when the speech recognition service
// returns a result — a word or phrase has been positively 
//recognized and this has been communicated back to your app
recognition.onresult = function(event) {
    var interim_transcript = '';
    var final_transcript = '';

    for (var i = event.resultIndex; i < event.results.length; ++i) {
        // Verify if the recognized text is the last with the isFinal property
        if (event.results[i].isFinal) {
            final_transcript += event.results[i][0].transcript;
        } else {
            interim_transcript += event.results[i][0].transcript;
        }
    }

    // Choose which result may be useful for you

    console.log("Interim: ", interim_transcript);

    console.log("Final: ", final_transcript);

    console.log("Simple: ", event.results[0][0].transcript);
};

onresult事件接收自定义偶数对​​象作为第一个参数。结果存储在event.results属性中(SpeechRecognitionResultList类型的对象, 该对象存储SpeechRecognitionResult对象, 而该对象又包含SpeechRecognitionAlternative实例, 该实例具有包含文本的transcript属性)。

最后一步, 你需要通过执行识别对象的start方法来启动它, 或者在其运行时执行stop方法来停止它:

// start the speech recognition
recognition.start();

// Stop the speech recognition
recognition.stop();

现在, 使用语音识别API的整个功能片段应如下所示:

var recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;
recognition.lang = "en-US";

recognition.onerror = function(event) {
    console.error(event);
};

recognition.onstart = function() {
    console.log('Speech recognition service has started');
};

recognition.onend = function() {
    console.log('Speech recognition service disconnected');
};

recognition.onresult = function(event) {
    var interim_transcript = '';
    var final_transcript = '';

    for (var i = event.resultIndex; i < event.results.length; ++i) {
        // Verify if the recognized text is the last with the isFinal property
        if (event.results[i].isFinal) {
            final_transcript += event.results[i][0].transcript;
        } else {
            interim_transcript += event.results[i][0].transcript;
        }
    }

    // Choose which result may be useful for you

    console.log("Interim: ", interim_transcript);

    console.log("Final: ", final_transcript);

    console.log("Simple: ", event.results[0][0].transcript);
};

recognition.start();

一旦执行了start方法, 麦克风权限对话框将显示在浏览器中。

继续并在你的Web或本地服务器中对其进行测试。你可以在此处查看官方Chrome演示中所有可用语言在浏览器中运行的语音识别API的实时演示。

支持的语言

目前, 该API在Chrome中支持40种语言。某些语言根据地区有特定的代码(标识符遵循BCP-47格式):

语言 区域 语言代码
南非语 default af-ZA
印尼语 default 编号
马来语 default 毫秒
加泰罗尼亚语 default 胚胎干细胞
切什蒂纳 default cs-CZ
丹斯克 default 大DK
德意志 default 去DE
英语 澳大利亚 en-AU
英语 加拿大 en-CA
英语 印度 en-IN
英语 新西兰 新西兰
英语 南非 en-ZA
英语 英国 en-GB
英语 美国 zh-CN
西班牙文 阿根廷 增强现实
西班牙文 玻利维亚 es-BO
西班牙文 智利 es-CL
西班牙文 哥伦比亚 二氧化碳
西班牙文 哥斯达黎加 胚胎干细胞
西班牙文 厄瓜多尔 es-EC
西班牙文 萨尔瓦多 es-SV
西班牙文 西班牙 ES-ES
西班牙文 Estados Unidos es-US
西班牙文 危地马拉 es-GT
西班牙文 洪都拉斯 血红蛋白
西班牙文 墨西哥 es-MX
西班牙文 尼加拉瓜 es-NI
西班牙文 巴拿马 es-PA
西班牙文 巴拉圭 –
西班牙文 秘鲁 聚醚砜
西班牙文 波多黎各 es-PR
西班牙文 多米尼加共和国 es-DO
西班牙文 乌拉圭 es-UY
西班牙文 委内瑞拉 VE
Euskara default 欧盟
菲律宾语 default PH
法兰西 default fr-FR
加莱戈 default gl-ES
赫尔瓦茨基 default hr_HR
伊祖祖鲁 default 祖扎
伊斯伦斯卡 default 伊斯兰国
意大利语 意大利 IT
意大利语 Svizzera 痒
列图维奇 default LT
马盖尔 default –
荷兰 default NL
挪威语 default 否
波尔斯基 default 聚乳酸
葡萄牙语 巴西 苯丙氨酸
葡萄牙语 葡萄牙 PT-PT
罗马纳 default 滚装
斯洛文尼亚 default sl-SI
斯洛文尼亚 default sk-SK
omi美 default Fi-FI
斯文斯卡 default sv-SE
丁维特 default 病毒
图尔克 default TR-TR
Ελληνικά default 遗传资源
български default 血糖
Pусский default RU-RU
Српски default sr-RS
Українська default 英国
한국어 default ko-KR
中文 普通话(中国大陆) cmn-Hans-CN
中文 普通话(香港) cmn-汉斯-香港
中文 中文(台湾) cmn-Hant-TW
中文 粤语(香港) 粤汉香港
日本语 default ja-JP
हिन्दी default 高输入
ภาษาไทย default –

如果需要Javascript中的上一个表, 则可以使用以下对象, 并且可以如示例中所示对其进行迭代:

var allAvailableLanguages = [
    {
        "language": "Afrikaans", "countryCodes": [
            {
                "langCode": "af-ZA", "country": "Default"
            }
        ]
    }, {
        "language": "Bahasa Indonesia", "countryCodes": [
            {
                "langCode": "id-ID", "country": "Default"
            }
        ]
    }, {
        "language": "Bahasa Melayu", "countryCodes": [
            {
                "langCode": "ms-MY", "country": "Default"
            }
        ]
    }, {
        "language": "Català", "countryCodes": [
            {
                "langCode": "ca-ES", "country": "Default"
            }
        ]
    }, {
        "language": "Čeština", "countryCodes": [
            {
                "langCode": "cs-CZ", "country": "Default"
            }
        ]
    }, {
        "language": "Dansk", "countryCodes": [
            {
                "langCode": "da-DK", "country": "Default"
            }
        ]
    }, {
        "language": "Deutsch", "countryCodes": [
            {
                "langCode": "de-DE", "country": "Default"
            }
        ]
    }, {
        "language": "English", "countryCodes": [
            {
                "langCode": "en-AU", "country": "Australia"
            }, {
                "langCode": "en-CA", "country": "Canada"
            }, {
                "langCode": "en-IN", "country": "India"
            }, {
                "langCode": "en-NZ", "country": "New Zealand"
            }, {
                "langCode": "en-ZA", "country": "South Africa"
            }, {
                "langCode": "en-GB", "country": "United Kingdom"
            }, {
                "langCode": "en-US", "country": "United States"
            }
        ]
    }, {
        "language": "Español", "countryCodes": [
            {
                "langCode": "es-AR", "country": "Argentina"
            }, {
                "langCode": "es-BO", "country": "Bolivia"
            }, {
                "langCode": "es-CL", "country": "Chile"
            }, {
                "langCode": "es-CO", "country": "Colombia"
            }, {
                "langCode": "es-CR", "country": "Costa Rica"
            }, {
                "langCode": "es-EC", "country": "Ecuador"
            }, {
                "langCode": "es-SV", "country": "El Salvador"
            }, {
                "langCode": "es-ES", "country": "España"
            }, {
                "langCode": "es-US", "country": "Estados Unidos"
            }, {
                "langCode": "es-GT", "country": "Guatemala"
            }, {
                "langCode": "es-HN", "country": "Honduras"
            }, {
                "langCode": "es-MX", "country": "México"
            }, {
                "langCode": "es-NI", "country": "Nicaragua"
            }, {
                "langCode": "es-PA", "country": "Panamá"
            }, {
                "langCode": "es-PY", "country": "Paraguay"
            }, {
                "langCode": "es-PE", "country": "Perú"
            }, {
                "langCode": "es-PR", "country": "Puerto Rico"
            }, {
                "langCode": "es-DO", "country": "República Dominicana"
            }, {
                "langCode": "es-UY", "country": "Uruguay"
            }, {
                "langCode": "es-VE", "country": "Venezuela"
            }
        ]
    }, {
        "language": "Euskara", "countryCodes": [
            {
                "langCode": "eu-ES", "country": "Default"
            }
        ]
    }, {
        "language": "Filipino", "countryCodes": [
            {
                "langCode": "fil-PH", "country": "Default"
            }
        ]
    }, {
        "language": "Français", "countryCodes": [
            {
                "langCode": "fr-FR", "country": "Default"
            }
        ]
    }, {
        "language": "Galego", "countryCodes": [
            {
                "langCode": "gl-ES", "country": "Default"
            }
        ]
    }, {
        "language": "Hrvatski", "countryCodes": [
            {
                "langCode": "hr_HR", "country": "Default"
            }
        ]
    }, {
        "language": "IsiZulu", "countryCodes": [
            {
                "langCode": "zu-ZA", "country": "Default"
            }
        ]
    }, {
        "language": "Íslenska", "countryCodes": [
            {
                "langCode": "is-IS", "country": "Default"
            }
        ]
    }, {
        "language": "Italiano", "countryCodes": [
            {
                "langCode": "it-IT", "country": "Italia"
            }, {
                "langCode": "it-CH", "country": "Svizzera"
            }
        ]
    }, {
        "language": "Lietuvių", "countryCodes": [
            {
                "langCode": "lt-LT", "country": "Default"
            }
        ]
    }, {
        "language": "Magyar", "countryCodes": [
            {
                "langCode": "hu-HU", "country": "Default"
            }
        ]
    }, {
        "language": "Nederlands", "countryCodes": [
            {
                "langCode": "nl-NL", "country": "Default"
            }
        ]
    }, {
        "language": "Norsk bokmål", "countryCodes": [
            {
                "langCode": "nb-NO", "country": "Default"
            }
        ]
    }, {
        "language": "Polski", "countryCodes": [
            {
                "langCode": "pl-PL", "country": "Default"
            }
        ]
    }, {
        "language": "Português", "countryCodes": [
            {
                "langCode": "pt-BR", "country": "Brasil"
            }, {
                "langCode": "pt-PT", "country": "Portugal"
            }
        ]
    }, {
        "language": "Română", "countryCodes": [
            {
                "langCode": "ro-RO", "country": "Default"
            }
        ]
    }, {
        "language": "Slovenščina", "countryCodes": [
            {
                "langCode": "sl-SI", "country": "Default"
            }
        ]
    }, {
        "language": "Slovenčina", "countryCodes": [
            {
                "langCode": "sk-SK", "country": "Default"
            }
        ]
    }, {
        "language": "Suomi", "countryCodes": [
            {
                "langCode": "fi-FI", "country": "Default"
            }
        ]
    }, {
        "language": "Svenska", "countryCodes": [
            {
                "langCode": "sv-SE", "country": "Default"
            }
        ]
    }, {
        "language": "Tiếng Việt", "countryCodes": [
            {
                "langCode": "vi-VN", "country": "Default"
            }
        ]
    }, {
        "language": "Türkçe", "countryCodes": [
            {
                "langCode": "tr-TR", "country": "Default"
            }
        ]
    }, {
        "language": "Ελληνικά", "countryCodes": [
            {
                "langCode": "el-GR", "country": "Default"
            }
        ]
    }, {
        "language": "български", "countryCodes": [
            {
                "langCode": "bg-BG", "country": "Default"
            }
        ]
    }, {
        "language": "Pусский", "countryCodes": [
            {
                "langCode": "ru-RU", "country": "Default"
            }
        ]
    }, {
        "language": "Српски", "countryCodes": [
            {
                "langCode": "sr-RS", "country": "Default"
            }
        ]
    }, {
        "language": "Українська", "countryCodes": [
            {
                "langCode": "uk-UA", "country": "Default"
            }
        ]
    }, {
        "language": "한국어", "countryCodes": [
            {
                "langCode": "ko-KR", "country": "Default"
            }
        ]
    }, {
        "language": "中文", "countryCodes": [
            {
                "langCode": "cmn-Hans-CN", "country": "普通话 (中国大陆)"
            }, {
                "langCode": "cmn-Hans-HK", "country": "普通话 (香港)"
            }, {
                "langCode": "cmn-Hant-TW", "country": "中文 (台灣)"
            }, {
                "langCode": "yue-Hant-HK", "country": "粵語 (香港)"
            }
        ]
    }, {
        "language": "日本語", "countryCodes": [
            {
                "langCode": "ja-JP", "country": "Default"
            }
        ]
    }, {
        "language": "हिन्दी", "countryCodes": [
            {
                "langCode": "hi-IN", "country": "Default"
            }
        ]
    }, {
        "language": "ภาษาไทย", "countryCodes": [
            {
                "langCode": "th-TH", "country": "Default"
            }
        ]
    }
];

allAvailableLanguages.forEach(function(item){
    if(item.countryCodes.length > 1){
        var allCountries = "";
        console.log(item.language + " ("+item.countryCodes.length+" country(s)) ");
        
        item.countryCodes.forEach(function(countryItem){
            console.log("   "+countryItem.country + " | "+ countryItem.langCode); 
        });
        
    }else{
        console.log(item.language + " ["+item.countryCodes[0].langCode+"]");
    }
});

控制台中谁的输出将是:

// Afrikaans [af-ZA]
// Bahasa Indonesia [id-ID]
// Bahasa Melayu [ms-MY]
// Català [ca-ES]
// Čeština [cs-CZ]
// Dansk [da-DK]
// Deutsch [de-DE]
// English (7 country(s)) 
//     Australia | en-AU
//     Canada | en-CA
//     India | en-IN
//     New Zealand | en-NZ
//     South Africa | en-ZA
//     United Kingdom | en-GB
//     United States | en-US
// Español (20 country(s)) 
//     Argentina | es-AR
//     Bolivia | es-BO
//     Chile | es-CL
//     Colombia | es-CO
//     Costa Rica | es-CR
//     Ecuador | es-EC
//     El Salvador | es-SV
//     España | es-ES
//     Estados Unidos | es-US
//     Guatemala | es-GT
//     Honduras | es-HN
//     México | es-MX
//     Nicaragua | es-NI
//     Panamá | es-PA
//     Paraguay | es-PY
//     Perú | es-PE
//     Puerto Rico | es-PR
//     República Dominicana | es-DO
//     Uruguay | es-UY
//     Venezuela | es-VE
// Euskara [eu-ES]
// Filipino [fil-PH]
// Français [fr-FR]
// Galego [gl-ES]
// Hrvatski [hr_HR]
// IsiZulu [zu-ZA]
// Íslenska [is-IS]
// Italiano (2 country(s)) 
//     Italia | it-IT
//     Svizzera | it-CH
// Lietuvių [lt-LT]
// Magyar [hu-HU]
// Nederlands [nl-NL]
// Norsk bokmål [nb-NO]
// Polski [pl-PL]
// Português (2 country(s)) 
//     Brasil | pt-BR
//     Portugal | pt-PT
// Română [ro-RO]
// Slovenščina [sl-SI]
// Slovenčina [sk-SK]
// Suomi [fi-FI]
// Svenska [sv-SE]
// Tiếng Việt [vi-VN]
// Türkçe [tr-TR]
// Ελληνικά [el-GR]
// български [bg-BG]
// Pусский [ru-RU]
// Српски [sr-RS]
// Українська [uk-UA]
// 한국어 [ko-KR]
// 中文 (4 country(s)) 
//     普通话 (中国大陆) | cmn-Hans-CN
//     普通话 (香港) | cmn-Hans-HK
//     中文 (台灣) | cmn-Hant-TW
//     粵語 (香港) | yue-Hant-HK
// 日本語 [ja-JP]
// हिन्दी [hi-IN]
// ภาษาไทย [th-TH]

编码愉快!

赞(0)
未经允许不得转载:srcmini » JavaScript语言中的语音识别API入门

评论 抢沙发

评论前必须登录!