APIs e Microsserviços

6 mai, 2011

Acessando a API Speech do Google Chrome 11

Publicidade

Recentemente, o Google transformou a versão 11 do seu Chorme em
beta, e com ela, um novo recurso interessante – suporte para a API Speech do HTML5. Isso significa que você
será capaz de falar com o seu computador, e o Chrome será capaz de
interpretá-lo. Esse novo recurso já está disponível há um tempo em dispositivos
Android, então muitos de vocês já devem estar acostumados com ele.

Se você está executando a versão 11 do Chrome, pode testar as novas
capacidades do Speech ao ir até a
página de teste no site html5rocks.com

Genial! Mas como ele funciona? Eu comecei a destrinchar o código-fonte do Chrome para descobrir se o reconhecimento do Speech é implementado como uma biblioteca construída dentro do Chrome,
ou se ele envia o áudio de volta para o Google para processá-lo – sei que já
vi bibliotecas Sphynx na
construção do Android, mas eu tinha certeza de que o último era o caso – e o
reconhecimento do Speech foi muito
bom, o que é muito difícil de fazer sem modelos de linguagens muito bons – não
é algo que você seria capaz de escrever em um browser.

Achei os arquivos que eu estava procurando na fonte do Chromium: http://src.chromium.org/viewvc/chrome/trunk/src/content/browser/speech/

Parece que o áudio é coletado pelo microfone, e então passado via HTTPS POST para um serviço web do
Google, que responde com um objeto JSON. Olhando para o código do seu áudio,
parece que o áudio pode ser tanto FLAC quanto Speex – mas
parece ser uma versão do Speex especialmente
modificada – não tenho certeza de qual é, mas ele simplesmente não me pareceu
muito certo.

Se esse é o caso, não deveria haver motivo para eu não conseguir POSTAR algo eu
mesmo.

A URL ouvida no speech_recognition_request.cc
é:

https://www.google.com/speech-api/v1/recognize


Algumas pequenas linhas de PERL (ou PHP ou apenas use wget na linha de comando):

#!/usr/bin/perl

require LWP::UserAgent;

my $url = "https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=en-US";
my $audio = "";

open(FILE, "<" . $ARGV[0]);
while(<FILE>)
{
$audio .= $_;
}
close(FILE);

my $ua = LWP::UserAgent->new;

my $response = $ua->post($url, Content_Type => "audio/x-flac; rate=16000", Content => $audio);
if ($response->is_success)
{
print $response->content;
}

1;

Esse rápido script PERL usa LWP::UserAgent para POSTAR o áudio
binário do meu clip de áudio; eu gravei um pequeno arquivo wav, e então o converti para FLAC
na linha de comando (veja SoX
para mais informações)

Para executá-lo, apenas faça:

[root@prague mike]# ./speech i_like_pickles.flac


A resposta é bastante simples no JSON:

{
"status": 0,
"id": "b3447b5d98c5653e0067f35b32c0a8ca-1",
"hypotheses": [
{
"utterance": "i like pickles",
"confidence": 0.9012539
},
{
"utterance": "i like pickle"
}]
}

Não tenho certeza se o Google tem objetivo de tornar isso uma API público e
usável, mas ela funciona – e tem todos os tipos de possibilidades!


?        

Texto original disponível em http://mikepultz.com/2011/03/accessing-google-speech-api-chrome-11/