Начало работы с API распознавания речи в Javascript

Распознавание речи JavaScript API позволяет веб-разработчикам включать распознавание речи в вашу веб-страницу. Этот 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 (событие, используемое для получения распознанного текста).

OnError

// 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);
};

OnStart

// 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');
};

onresult

// 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();

Как только вы запустите метод запуска, в браузере отобразится диалоговое окно разрешения микрофона.

Попробуйте это на своем веб-или локальном сервере. Вы можете увидеть живую демонстрацию API распознавания речи, работающую в браузере на всех доступных языках из официальных демонстраций Chrome, здесь.

Поддерживаемые языки

В настоящее время API поддерживает 40 языков в Chrome. Некоторые языки имеют специальные коды в зависимости от региона (идентификаторы следуют формат BCP-47):

язык
Область, край
Код языка
африкаанс По умолчанию аф-ZA
Бахаса Индонезия По умолчанию я сделал
Бахаса Мелау По умолчанию мс-MY
мена По умолчанию ча-ES
Čeština По умолчанию CS-CZ
Dansk По умолчанию да-DK
Deutsch По умолчанию де-DE
английский Австралия ан-AU
английский Канада ан-CA
английский Индия ан-IN
английский Новая Зеландия ан-NZ
английский Южная Африка ан-ZA
английский Объединенное Королевство ан-ГБ
английский Соединенные Штаты ан-США
Español Аргентина ES-AR
Español Боливия эс-BO
Español Чили эс-CL
Español Колумбия ES-CO
Español Коста Рика ES-CR
Español Эквадор эс-EC
Español Эль Сальвадор эс-SV
Español España ES-ES
Español Estados Unidos эс-US
Español Гватемала эс-GT
Español Гондурас эс-HN
Español Мексика эс-MX
Español Никарагуа эс-NI
Español Панама эс-PA
Español Парагвай эс-PY
Español Перу ES-РЕ
Español Пуэрто-Рико эс-PR
Español Доминиканская Республика эс-DO
Español Уругвай эс-UY
Español Венесуэла эс-VE
Euskara По умолчанию ес-ES
Филиппинский По умолчанию фил-PH
Français По умолчанию а как
Galego По умолчанию GL-ES
Hrvatski По умолчанию hr_HR
зулу По умолчанию ца-ZA
Íslenska По умолчанию IS-IS
Italiano Italia он-IT
Italiano Svizzera зуд
Lietuvių По умолчанию LT-LT
мадьяр По умолчанию Hu-HU
Nederlands По умолчанию п-NL
Norsk bokmål По умолчанию NB-NO
Polski По умолчанию пл-PL
Português Brasil PT-BR
Português Португалия PT-PT
Română По умолчанию ро-RO
Slovenščina По умолчанию СЛ-SI
Slovenčina По умолчанию ск-SK
Suomi По умолчанию фи-FI
Svenska По умолчанию св-SE
Tiếng Việt По умолчанию VI-VN
Türkçe По умолчанию TR-TR
Ελληνικά По умолчанию эль-GR
български По умолчанию BG-BG
Pусский По умолчанию р-RU
Српски По умолчанию SR-RS
Українська По умолчанию ик-UA
한국어 По умолчанию ко-KR
中文 普通话 (中国 大陆) CMN-Hans-CN
中文 普通话 (香港) стп-Hans-HK
中文 中文 (台灣) стп-Hant-TW
中文 粵語 (香港) юэ-Hant-HK
日本語 По умолчанию JA-JP
हिन्दी По умолчанию привет-IN
ภาษา ไทย По умолчанию го-TH

Вы можете использовать следующий объект, если вам нужна предыдущая таблица в 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]
Ссылка на основную публикацию