Как использовать API распознавания речи (преобразование голоса в текст) в Cordova

В мире веб-разработки есть действительно полезный (хотя и экспериментальный) API, который позволяет легко преобразовывать голос в текст. Мы говорим о SpeechRecognition API, этот интерфейс Web Speech API является интерфейсом контроллера для службы распознавания, который также обрабатывает SpeechRecognitionEvent, отправленный из службы распознавания.

Однако этот API доступен только в Google Chrome (который выходит из iOS), и, как будто этого было недостаточно, этот API также недоступен в WebView Android. Это полностью исключает использование этого API в вашем приложении Cordova. Поэтому единственный вариант, это использовать встроенную службу распознавания речи устройства.

В этой статье вы узнаете, как использовать собственный интерфейс распознавания речи устройства в вашем Cordova Project с помощью плагина с открытым исходным кодом.

Требования

Чтобы использовать API для распознавания голоса, вам понадобится плагин Cordova, который обрабатывает собственный код распознавателя речи. В этом случае мы будем использовать плагин cordova-plugin-speechrecognition. Этот плагин позволяет вам легко использовать встроенную функцию распознавания речи с вашего устройства.

Этот плагин поддерживает платформы Android и iOS. Чтобы установить плагин в свой проект, выполните в терминале следующую команду:

cordova plugin add cordova-plugin-speechrecognition

После того, как плагин установлен в вашем проекте, window.plugins.speechRecognition переменная будет доступна в вашем проекте. Узнайте больше о плагине в его Официальный репозиторий Github здесь. Сам плагин имеет следующие требования:

  • Cordova-Android V5.0.0
  • Уровень API Android 14
  • не должен быть singleInstance, Может быть singleTask, standard, singleTop,
  • ЗАПИСЬ АУДИО разрешение
  • Интернет-соединение (очевидно)

методы

Плагин предлагает 6 методов для распознавания речи:

1. isRecognitionAvailable

Этот метод позволяет вам проверить, может ли распознавание речи использоваться на вашем устройстве или нет. Первый обратный вызов (успех) получает логическое значение со следующим значением:

window.plugins.speechRecognition.isRecognitionAvailable(function(available){
if(available){
// You can use the speechRecognition
}
}, function(err){
console.error(err);
});

2. hasPermission

Этот метод проверяет, есть ли у приложения разрешения на использование микрофона:

window.plugins.speechRecognition.hasPermission(function (isGranted){
if(isGranted){
// Do other things as the initialization here
}else{
// You need to request the permissions
}
}, function(err){
console.log(err);
});

3. requestPermission

Вы можете запросить разрешение на микрофон с помощью этого метода легко:

window.plugins.speechRecognition.requestPermission(function (){
// Requested
}, function (err){
// Opps, nope
});

4. getSupportedLanguages

Этот метод извлекает все доступные языки на устройстве в формате массива:

window.plugins.speechRecognition.getSupportedLanguages(function(data){
console.log(data); // ["es-ES","de-DE","id-ID" ........ ]
}, function(err){
console.error(err);
});

5. startListening

Этот метод инициализирует распознавание речи. В качестве третьего параметра он ожидает объект с параметрами:

  • language {String} используемый язык для распознавания (по умолчанию "en-US")
  • matches {Number} количество возвращаемых совпадений (по умолчанию 5, на iOS: максимальное количество совпадений)
  • prompt {String} отображает подсказку всплывающего окна слушателя (по умолчанию "", Только для Android)
  • showPopup {Boolean} отображать всплывающее окно слушателя с подсказкой (по умолчанию true, Только для Android)
  • showPartial {Boolean} Разрешить частичное возвращение результатов (по умолчанию false, только iOS)

Существует разница между платформами Android и iOS. На Android распознавание речи прекращается, когда говорящий заканчивает говорить (в конце предложения). В iOS пользователь должен вручную остановить процесс распознавания, вызвав метод stopListening ():

var settings = {
lang: "en-US",
showPopup: true
};
window.plugins.speechRecognition.startListening(function(result){
console.log(result);
// By default just 5 options
// ["Hello","Hallou", "Hellou" ...]
}, function(err){
console.log(err);
}, settings);

6. стопЛизинг

Этот метод останавливает распознавание, но доступен только для iOS:

window.plugins.speechRecognition.stopListening(function(){
// No more recognition
}, function(err){
console.log(err);
});

использование

Правильный способ использования распознавания речи заключается в следующем:

  1. Вы должны проверить, поддерживается ли распознавание речи.
  2. Если это поддерживается, то проверьте наличие разрешений.
  3. Если нет разрешений на использование микрофона, запросите их.
  4. Получив разрешения, инициализируйте распознаватель речи.

С помощью доступных методов плагина вы можете легко начать распознавание с помощью следующего кода (обратите внимание, что вам нужно изменить параметры):

// Handle results
function startRecognition(){
window.plugins.speechRecognition.startListening(function(result){
// Show results in the console
console.log(result);
}, function(err){
console.error(err);
}, {
language: "en-US",
showPopup: true
});
}
// Verify if recognition is available
window.plugins.speechRecognition.isRecognitionAvailable(function(available){
if(!available){
console.log("Sorry, not available");
}
// Check if has permission to use the microphone
window.plugins.speechRecognition.hasPermission(function (isGranted){
if(isGranted){
startRecognition();
}else{
// Request the permission
window.plugins.speechRecognition.requestPermission(function (){
// Request accepted, start recognition
startRecognition();
}, function (err){
console.log(err);
});
}
}, function(err){
console.log(err);
});
}, function(err){
console.log(err);
});

Если вы работаете с обещаниями, вы можете создать миниобъект, в котором будут храниться те же функции, которые предоставляет плагин, но с обещаниями, как показано в следующем примере:

window["speechRecognition"] = {
hasPermission: function(){
return new Promise(function(resolve, reject){
window.plugins.speechRecognition.hasPermission(function (isGranted){
resolve(isGranted);
}, function(err){
reject(err);
});
});
},
requestPermission: function(){
return new Promise(function(resolve, reject){
window.plugins.speechRecognition.requestPermission(function (){
resolve();
}, function (err){
reject();
});
});
},
startRecognition: function(settings){
return new Promise(function(resolve, reject){
window.plugins.speechRecognition.startListening(function(result){
resolve(result);
}, function(err){
reject(err);
}, settings);
});
},
getSupportedLanguages: function(){
return new Promise(function(resolve, reject){
window.plugins.speechRecognition.getSupportedLanguages(function(result){
resolve(result);
}, function(err){
reject(err);
});
});
},
isRecognitionAvailable: function(){
return new Promise(function(resolve, reject){
window.plugins.speechRecognition.isRecognitionAvailable(function(available){
resolve(available);
}, function(err){
reject(err);
});
});
},
stopListening: function(){
return new Promise(function(resolve, reject){
window.plugins.speechRecognition.stopListening(function(){
resolve();
}, function(err){
reject(err);
});
});
}
};

Это создаст speechRecognition Переменная в окне, которую вы можете использовать следующим образом:

window.speechRecognition.isRecognitionAvailable().then(function(available){
if(available){
return window.speechRecognition.hasPermission();
}
}).then(function(hasPermission){
function startRecognition(){
return window.speechRecognition.startRecognition({
language:"en-US",
showPopup: true
}).then(function(data){
console.log("Results",data);
}).catch(function(err){
console.error(err);
});
}
if(!hasPermission){
window.speechRecognition.requestPermission().then(function(){
startRecognition();
}).catch(function(err){
console.error("Cannot get permission", err);
});
}else{
startRecognition();
}
}).catch(function(err){
console.error(err);
});

Довольно просто, не так ли?

Голосовые команды

Вы можете использовать библиотеку голосовых команд, как Artyom.js для обработки голосовых команд (хотя API webkitSpeechRecognition и speechSynthesis недоступны, вы можете использовать командный процессор):

artyom.addCommands([
{
indexes: ["Hello","Hi"],
action: function(){
console.log("Hello, how are you?");
}
},
{
indexes: ["Translate * in Spanish"],
smart: true,
action: function(i, wildcard){
console.log("I cannot translate" + wildcard);
}
},
]);
// Start the recognition and say "hello"
window.plugins.speechRecognition.startListening(function (result) {
// The hello command should be triggered
result.forEach(function(option){
if(artyom.simulateInstruction(option)){
console.log("Matched : " + option, result);
return;
}
});
}, function (err) {
reject(err);
}, {
language: "en-US",
showPopup: true
});

К сожалению, нативное распознавание не поддерживает непрерывное распознавание (по крайней мере, не в Android, а в iOS), вы сможете использовать только «Ok Google …» в своем проекте.

Ссылка на основную публикацию
Adblock
detector