em Tecnologia

Annyang para reconhecimento de voz

Nos últimos dias do ano passado comecei um projeto de chatbot para praticar Python e Flask, chama-se Jarvis. A ideia é que sempre que eu tiver um tempo livre eu adicione algumas coisinhas a mais nele.

Desde o começo eu gostaria que o Jarvis ajudasse na prática da lingua inglesa, principalmente na conversação. Foi por isso que comecei a pesquisar meios de fazer reconhecimento de voz (speech recognition) pela web.

A opção mais comum é a Speech API do Google, entretanto ela tem algumas limitações por ter um largo uso entre os desenvolvedores. Então fui pesquisar se existia outra opção. Nessa pesquisa encontrei o Annyang, um projeto em javascript para adicionar comandos de voz ao seus aplicativos web.

Ele é muito fácil de aplicar ao site, basta adicionar o script ao html e declarar os comandos de voz que o seu site irá atender.

<script src="//cdnjs.cloudflare.com/ajax/libs/annyang/1.4.0/annyang.min.js"></script>
<script>
    if (annyang) {
        // Let's define our first command. First the text we expect, and then the function it should call
        var commands = {
            'show tps report': function() {
                $('#tpsreport').animate({bottom: '-100px'});
            }
        };

        // Add our commands to annyang
        annyang.addCommands(commands);

        // Start listening. You can call this here, or attach this call to an event, button, etc.
        annyang.start();
    }
</script>

É importante adicionar uma verificação lógica na variável annyang antes de tudo, porque se o navegador não for compatível com o reconhecimento de voz seus comandos serão ignorados e não causarão erro algum. Isso pode ser feito porque no código fonte do Annyang a variável é iniciada como false antes de fazer a verificação de suporte do navegador e caso o mesmo não tenha este suporte, ela continuará falsa.

Caso você queira adicionar um comando que possa receber qualquer palavra depois (uma variável) continua sendo muito simples: basta adicionar um asterisco antes do nome da variável e declará-la como parâmetro na função anônima do comando.

var commands = {
    'tell me *chat' : function(chat) {
        $('#question').val(chat);
        $('#the-form').submit();
    }
}

No exemplo acima mostro como estou usando no projeto Jarvis. Basta o usuário pronunciar ‘tell me‘ e a frase que gostaria de dizer em inglês, então o sistema preenche o campo do formulário com a frase e em seguida executa um submit, fazendo com que o Jarvis responda em seguida.

Caso você queira ver o que está acontecendo enquanto ele tenta reconhecer o que você está dizendo, adicione um annyang.debug(); antes do annyang.start();. Isso fará com que ele apresente no seu console Javascript o que está sendo reconhecido em tempo real. Isso é prático porque ele nem sempre consegue reconhecer e você consegue perceber o que pode estar acontecendo.

Opinião

O Annyang funciona muito bem para aquilo que se propõe, que é o reconhecimento de comandos de voz, entretanto nem sempre ele consegue reconhecer uma frase maior, diferente da Speech API do Google, talvez por problemas com a entonação ou a pronúncia. Ainda não experimentei ele com um microfone melhor, apenas com o do meu notebook, e talvez isso faça uma boa diferença na porcentagem de sucesso. Mas ele é tão fácil de implementar que vale a pena experimentar e se divertir com os comandos de voz.

No caso do Jarvis ele não fica tão prático por causa da necessidade de um comando antes de cada frase e para a prática de conversação isso é um pé no saco, mas mesmo assim vou mantê-lo no projeto por enquanto.

Observação: O Annyang não irá funcionar com arquivos locais (acessando via file:///) pois o navegador (pelo menos o Google Chrome) irá bloquear a tentativa do script de acessar o microfone. É preciso testá-lo com um servidor http.

  • Victor Ribeiro

    Olá, amigo! Procuro em cada canto desse Brasil alguém disposto a desenvolver comigo um sistema Jarvis, ou seja, uma IA simples para a web. Também uso o annyang, mas o projeto está muito bem desenvolvido (totalmente em JavaScript, por enquanto). Caso se interesse, me mande um e-mail. 😉

  • quando eu colocar este código o que eu faço depois ele so falar algo mais precisa fazer sobre o código

    • Marcus Beckenkamp

      Basicamente isso é o suficiente, tem que ver se o seu browser tem suporte para isso. Ele costuma pedir autorização para usar o microfone do computador antes.