Pular para o conteúdo principal

Reconhecimento de voz

O reconhecimento de voz da Iara funciona em dois modos principais: sem resultados intermediários (interimResults é false) e com resultados intermediários (interimResults é true).

Em ambos os casos, o funcionamento geral do reconhecimento é o mesmo e baseado nas chamadas a start() e stop(), conforme descrito na próxima seção.

Funcionamento geral

O reconhecimento de voz da Iara é baseado nas chamadas a dois comandos principais: start() e stop().

Assumindo que o reconhecedor foi inicializado corretamente, basta chamar o método start() do reconhecedor para iniciar o reconhecimento de voz. Quando a aplicação julgar que é hora de terminar o reconhecimento, ex. usuário soltou o botão de gravação, basta chamar o método stop() do reconhecedor.

A Iara não fará novos reconhecimentos no dispositivo de entrada de audio enquanto start() não for chamado novamente (seguido de stop() para finalizar o reconhecimento).

Dica: veja a seção Eventos para saber mais sobre callbacks e eventos de reconhecimento de audio.

O exemplo abaixo ilustra o funcionamento geral:

recognition = new IaraSpeechRecognition();

recognition.init(
userId: 'meu@email.com',
apiToken: '197765800edb8affcb44a7ae7b4ff0a3'
).done(
// Chamar primeiramente recognition.start()
// depois de um período chamar recognition.stop().
);

recognition.onresult = function(event) {
var text = event.result.transcript;
console.log('Texto reconhecido: ' + text);
};

O parâmetro event recebido pela callback onresult contem uma propriedade chamada result, que é um objeto IaraSpeechRecognitionResult. A propriedade transcript desse resultado contém o texto que a Iara reconheceu baseados no audio de entrada.

O atributo result do evento também contém várias informações referentes ao reconhecimento, porém a propriedade result.transcript é a que contém o texto reconhecido.

Dica: ambos os reconhecimentos (com ou sem resultados intermediários) funcionam baseados nas chamadas a start() e stop(). A única diferença é na quantidade de vezes que a callback onresult ou o evento result são chamados.

Tipos de reconhecimento

Sem resultados intermediários - interimResults: false

O que controla se o reconhecedor funcionará com ou sem resultados intermediários é o atributo interimResults passado ao método init(), conforme o exemplo abaixo:

var recognition = new IaraSpeechRecognition();

// O atributo `interimResults` controla se resultados intermediários
// do reconhecimento de voz devem ser produzidos ou não. Se nada for
// informado, o valor default é false (sem resultados intermediários).
recognition.init({
userId: 'meu@email.com',
apiToken: '197765800edb8affcb44a7ae7b4ff0a3',
interimResults: false
});

Quando interimResults: false é usado no init(), a callback onresult é chamada automaticamente e uma única vez assim que stop() for invocado.

Abaixo um exemplo de reconhecimento de voz sem resultados intermediários:

var recognition = new IaraSpeechRecognition();

recognition.init({
userId: 'meu@email.com',
apiToken: '197765800edb8affcb44a7ae7b4ff0a3',
interimResults: false
}).done(function(e) {
// Configuramos botões para ativar/desativar o reconhecimento de audio.
var botaoStart = document.getElementById('btnStart');
var botaoStop = document.getElementById('btnStop');

botaoStart.addEventListener('click', function() {
recognition.start();
});

botaoStop.addEventListener('click', function() {
recognition.stop();
});
});

// Trata a callback `onresult`, chamada após `stop()` quando a Iara
// terminar de fazer o reconhecimento do audio de entrada.
recognition.onresult = function(event) {
var text = event.result.transcript
console.log('Texto reconhecido: ' + text);
};

No exemplo acima, quando o reconhecedor chamar o método done() para indiciar que tudo está corretamente configurado, dois botões HTML são configurados para ligar e desligar o reconhecimento de voz da Iara. O primeiro botão (cujo id é btnStart) é configurado para ativar o reconhecimento de voz quando for clicado. Isto é feito através do evento click do botão, que quando é disparado, faz uma chamada a recognition.start(), iniciando o reconhecimento de voz. De forma similar, o botão de id btnStop, quando for clicado, chama recognition.stop(), o que termina a operação de reconhecimento.

Por fim, no final do exemplo, uma função é atribuída à propriedade onresult, que está ligada ao evento result. No caso do conhecimento sem resultados intermediários, o evento (e a callback onresult) é chamado uma única vez, após stop() ser invocado. O tempo entre entre a chamada de onresult após stop() é indefinido e depende do poder de processamento do computador do usuário.

Abaixo um exemplo completo da utilização do reconhecimento de voz sem resultados intermediários:

<html>
<head>
<!-- Iara Speech SDK: https://developers.iarahealth.com/javascript/docs/geral-instalacao -->
<script src="https://cdn.iarahealth.com/sdk/javascript/1.9.0/iara-speech.min.js"></script>
</head>
<body>

<button id="btnStart">Iniciar</button>
<button id="btnStop">Parar</button>

<script type="text/javascript">
var myUserId = 'meu@email.com'; // use o seu userId
var myApiToken = '197765800edb8affcb44a7ae7b4ff0a3'; // use o seu apiToken

// Instancia o reconhecedor da Iara
var recognition = new IaraSpeechRecognition();

// Inicializa o SDK, i.e. autenticação, checa o ALS, baixa modelo de voz, etc.
recognition.init({
userId: myUserId,
apiToken: myApiToken,
interimResults: false // sem resultados intermediários de reconhecimento
}).done(function(e) {
// O evento principal do reconhecimento de voz é o "onresult", chamado quando
// algum audio na entrada é reconhecido.
recognition.onresult = function(event) {
// O parâmetro "event" contem uma propriedade chamada "result", que é um
// objeto IaraSpeechRecognitionResult. A propriedade "transcript" desse
// resultado contém o texto que a Iara reconheceu baseados no audio de entrada.
var text = event.result.transcript.toLowerCase();
console.log('Texto reconhecido: ' + text);
};

// Configuramos botões para ativar/desativar o reconhecimento de audio.
var botaoStart = document.getElementById('btnStart');
var botaoStop = document.getElementById('btnStop');

botaoStart.addEventListener('click', function() {
recognition.start();
});

botaoStop.addEventListener('click', function() {
recognition.stop();
});
}).fail(function(e) {
// Algum problema aconteceu. O parâmetro "e" contem várias informações sobre o erro.
console.error('Algum problema na inicialização da Iara: ' + e.errorMessage);
}).progress(function(e) {
// Esse método é invocado várias vezes pelo SDK ao longo de sua inicialização.
// Você pode usar ele para acompanhar os passos da inicialização, para informar
// ao seu usuário que seu modelo de voz está sendo baixado, por exemplo.
console.debug('A Iara está inicializando: ' + e.initType);
});
</script>
</body>

Com resultados intermediários - interimResults: true

A reconhecimento com resultados intermediários funciona de forma muito similar ao sem resultados intermediários. Quando interimResults: true é usado no init(), a callback onresult é chamada automaticamente e repetidamente depois que start() for invocado.

O evento onresult é invocado repetidamente com um intervalo variável, que depende dos recursos computacionais disponíveis no computador do usuário. Quando stop() for chamado, onresult pode ser chamado mais algumas vezes, até que eventualmente não seja mais chamado.

Dica: você pode saber se uma chamada a onresult é a última (resultado final após stop() ser chamado) através da propriedade isFinal do evento passado como parâmetro à callback que trata os resultados.

Abaixo um exemplo de reconhecimento de voz com resultados intermediários:

var recognition = new IaraSpeechRecognition();

recognition.init({
userId: 'meu@email.com',
apiToken: '197765800edb8affcb44a7ae7b4ff0a3',
interimResults: true // resultados intermediários serão produzidos

}).done(function(e) {
// Configuramos botões para ativar/desativar o reconhecimento de audio.
var botaoStart = document.getElementById('btnStart');
var botaoStop = document.getElementById('btnStop');

botaoStart.addEventListener('click', function() {
recognition.start();
});

botaoStop.addEventListener('click', function() {
recognition.stop();
});
});

// Trata a callback `onresult`, chamada repetidamente após `start()`. Quando `stop()`
// for invocado, `onresult` poderá ser chamado mais algumas vezes.
recognition.onresult = function(event) {
var text = event.result.transcript

// A propriedade `isFinal` do evento recebido informa
// se esse é o resultado final do reconhecimento (obtido depois
// que `stop()` for chamado).
if(event.isFinal) {
console.log('Texto intermediário: ' + text);
} else {
console.log('Texto final: ' + text);
}
};

Abaixo um exemplo completo da utilização do reconhecimento de voz com resultados intermediários:

<html>
<head>
<!-- Iara Speech SDK: https://developers.iarahealth.com/javascript/docs/geral-instalacao -->
<script src="https://cdn.iarahealth.com/sdk/javascript/1.9.0/iara-speech.min.js"></script>
</head>
<body>

<button id="btnStart">Iniciar</button>
<button id="btnStop">Parar</button>

<script type="text/javascript">
var myUserId = 'meu@email.com'; // use o seu userId
var myApiToken = '197765800edb8affcb44a7ae7b4ff0a3'; // use o seu apiToken

// Instancia o reconhecedor da Iara
var recognition = new IaraSpeechRecognition();

// Inicializa o SDK, i.e. autenticação, checa o ALS, baixa modelo de voz, etc.
recognition.init({
userId: myUserId,
apiToken: myApiToken,
interimResults: true // resultados intermediários serão produzidos

}).done(function(e) {
// O evento principal do reconhecimento de voz é o "onresult", chamado quando
// algum audio na entrada é reconhecido.
recognition.onresult = function(event) {
// O parâmetro "event" contem uma propriedade chamada "result", que é um
// objeto IaraSpeechRecognitionResult. A propriedade "transcript" desse
// resultado contém o texto que a Iara reconheceu baseados no audio de entrada.
var text = event.result.transcript;

// A propriedade `isFinal` do evento recebido informa
// se esse é o resultado final do reconhecimento (obtido depois
// que `stop()` for chamado).
if(event.isFinal) {
console.log('Texto intermediário: ' + text);
} else {
console.log('Texto final: ' + text);
}
};

// Configuramos botões para ativar/desativar o reconhecimento de audio.
var botaoStart = document.getElementById('btnStart');
var botaoStop = document.getElementById('btnStop');

botaoStart.addEventListener('click', function() {
recognition.start();
});

botaoStop.addEventListener('click', function() {
recognition.stop();
});
}).fail(function(e) {
// Algum problema aconteceu. O parâmetro "e" contem várias informações sobre o erro.
console.error('Algum problema na inicialização da Iara: ' + e.errorMessage);
}).progress(function(e) {
// Esse método é invocado várias vezes pelo SDK ao longo de sua inicialização.
// Você pode usar ele para acompanhar os passos da inicialização, para informar
// ao seu usuário que seu modelo de voz está sendo baixado, por exemplo.
console.debug('A Iara está inicializando: ' + e.initType);
});
</script>
</body>