Siri em Português no iPhone 4S

Então a Apple lançou o Siri, o fantástico assistente de voz do iPhone 4S, mas mais uma vez esqueceu dos brasileiros. Conversando com alguns amigos, inclusive gringos, sobre a viabilidade de fazer um port do Siri para Português, a maioria achou que seria difícil, ou até impossível, visto que a Apple colocou bastante protocolos de comunicação em cima do Siri, para garantir a velocidade nos reconhecimentos. E muitos desses protocolos são privados.
Até que na terça-feira a noite, me veio uma idéia. O aplicativo Dragon Dictation, da Nuance, faz reconhecimento de voz, e muito bem feito, por sinal, do Português brasiliero. Por que então não temos o Siri na nossa língua? Talvez devido a uma questão burocrática, talvez devido a falta de agilidade da Apple Brasil, talvez ambos.
Então surgiu a questão: como fazer o Siri detectar áudio em Português, usando como base o reconhecimento de voz do Dragon Dictation?
Todo o trabalho do Siri em Português foi feito usando o SiriProxy, excelente proxy para o Siri desenvolvido pelo usuário plamoni, em Ruby, que redireciona todo o tráfego dos servidores do Siri para o seu computador, permitindo assim, modificá-lo. Mas antes de tudo, precisava conseguir transformar o áudio que o Siri envia para os servidores da Apple em um arquivo de áudio convencional.
Descobri que o áudio é enviado utilizando diversos codecs diferentes para otimizar o tamanho. Consegui transformar todos os bytes enviados para a Apple num arquivo de áudio, mas faltava um comando do ffmpeg ainda para poder torná-lo audível. Com a ajuda do Micael Silva, mestre do ffmpeg ( :P ), consegui fazer isso, e aqui ficam meus agradecimentos a ele! :)
Com o arquivo de áudio que o Siri envia para o servidor, “só” faltava reconhecer o conteúdo dele. Para isso, precisava reverter a API do Dragon Dictation. Liguei o Wireshark, mas devido ao HTTPS utilizado na comunicação, ele não me ajudou muito. Até que o@amagus me deu a idéia de decompilar a API do Dragon Dictation em Java e entender o protocolo, e aqui ficam meus agradecimentos a ele também por essa ideia! :)
Porém, mesmo entendendo a comunicação, ainda passei uma madrugada com problemas de reconhecimento por parte da Nuance. Faltava um certificado de segurança, único para cada aparelho. Mas no final, consegui obter a resposta do significado do áudio.
Com isso, bastava traduzir o áudio para inglês, regravá-lo em inglês, e enviar para a Apple. Mas ainda assim, nem sempre o áudio regravado em inglês, com a API de Text->Speech do Mac OS X, tinha um conteúdo aceitável pela Nuance (muitas vezes o áudio era incompreensível para o reconhecimento de voz).
Então foi necessário usar um pouco de matemática para isso. Primeiro eu gravava o áudio em inglês usando várias variáveis diferentes (velocidade, pitch, etc). Depois, rodava um algoritmo que eu bolei, baseado nas anotações abaixo, para comparar os padrões e calcular quais deles são estatisticamente mais confiáveis.
Basicamente, o algoritmo pega o sinal de áudio, aplica a Transformada de Fourier, faz uma ordenação progressiva das séries harmônicas e compara dois sinais utilizando o método da similaridade do cosseno em dimensão-N.

Sabendo o áudio mais confiável, bastava enviar o novo áudio, agora gravado em inglês, para a Apple, e enviar o resultado para o aparelho, simulando uma requisição normal do Siri.
O resultado é esse:
O hack, no momento, não tem como ser disponibilizado para o público por questões técnicas. Existem umas 10 integrações com diferentes APIs e modelos matemáticos para obter esse resultado, e é muito difícil encontrar uma forma de disponibilizar isso no momento.
Porém, assim que o Jailbreak do iPhone 4S estiver disponível, trabalharei arduamente para fazer o Siri em Português brasileiro funcionar no iPhone 4S, não dependendo assim da Apple para isso! :)
19 Notes/ Hide
-
my9online liked this
-
honest-spy liked this
-
vivianebittar liked this
-
vivianebittar reblogged this from pedrofranceschi
-
bykalyl reblogged this from pedrofranceschi
-
naattypriscilaa reblogged this from pedrofranceschi
-
evekurth reblogged this from pedrofranceschi
-
apponomics reblogged this from pedrofranceschi
-
elvispco liked this
-
eusoumatt liked this
-
eusoumatt reblogged this from pedrofranceschi
-
thiagosk liked this
-
aquietlife liked this
-
aquietlife reblogged this from pedrofranceschi and added:
You’re the man!
-
erko liked this
-
erko reblogged this from pedrofranceschi
-
ehmemo liked this
-
pedrobrasileiro reblogged this from pedrofranceschi
-
nohabloinglez liked this
-
loveismuchmorethanaword liked this
-
loveismuchmorethanaword reblogged this from pedrofranceschi
-
pedrofranceschi posted this