Pedro Franceschi

  • Archive
  • RSS
  • Ask me anything

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! :)

    • #siri
    • #iphone 4s
    • #projeto
    • #Projeto novo
  • 1 month ago
  • 19
  • Permalink
  • Share
    Tweet

19 Notes/ Hide

  1. my9online liked this
  2. honest-spy liked this
  3. vivianebittar liked this
  4. vivianebittar reblogged this from pedrofranceschi
  5. bykalyl reblogged this from pedrofranceschi
  6. naattypriscilaa reblogged this from pedrofranceschi
  7. evekurth reblogged this from pedrofranceschi
  8. apponomics reblogged this from pedrofranceschi
  9. elvispco liked this
  10. eusoumatt liked this
  11. eusoumatt reblogged this from pedrofranceschi
  12. thiagosk liked this
  13. aquietlife liked this
  14. aquietlife reblogged this from pedrofranceschi and added:
    You’re the man!
  15. erko liked this
  16. erko reblogged this from pedrofranceschi
  17. ehmemo liked this
  18. pedrobrasileiro reblogged this from pedrofranceschi
  19. nohabloinglez liked this
  20. loveismuchmorethanaword liked this
  21. loveismuchmorethanaword reblogged this from pedrofranceschi
  22. pedrofranceschi posted this
← Previous • Next →

About

Lorem ipsum sit dolor amet. Hello World. White and Nerdy. That's what you will find here.
pedrohfranceschi@gmail.com

Twitter

loading tweets…

  • RSS
  • Random
  • Archive
  • Ask me anything
  • Mobile

Effector Theme by Carlo Franco.

Powered by Tumblr