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/