• No results found

Conforme a Figura 5.2, no LibrasTV, alguns componentes da solução proposta são integrados na estação de TV (módulo "Tradutor de LIBRAS"), e outros são executados como uma aplicação interativa no receptor de TV Digital.

Integrados na estação de TV, os componentes de Filtragem, Extração de Legendas e Tradução Automática compõem o módulo "Tradutor de LIBRAS"e foram implementados utilizando a linguagem de programação C++ e considerando as características apresenta- das nas Seções 4.1 e 4.2.

Os componentes de Filtragem e Extração de Legendas foram desenvolvido com base nas definições das especificações MPEG-2 Sistemas [ISO/IEC 1996] e ABNT NBR 15606- 1 [ABNT 2007], respectivamente. A especificação MPEG-2 Sistemas define como extrair os diversos fluxos elementares (áudio, vídeo, legendas, closed caption, etc.) de um fluxo MPEG-2 TS, enquanto que a ABNT NBR 15606-1 define, dentre outras coisas, como ex- trair textos a partir de um fluxo elementar de legenda ou closed caption no SBTVD. Esses componentes recebem um fluxo MPEG-2 TS, identificam os pacotes de legendas (Filtra- gem) e extraem as sentenças em Português e as informações de sincronização (etiquetas de tempo - timestamps) desses pacotes (Extração de Legendas).

O componente de Tradução Automática recebe as sentenças em Português e as tra- duz para uma seqüência de glosas em LIBRAS. Ele foi desenvolvido de acordo com o

82 CAPÍTULO 5. CENÁRIOS DE USO diagrama de classes ilustrado na Figura 5.3.

A classe principal desse componente é a classeTranslattorController. Ela possui um método receiveSentencesToTranslate() que recebe sentenças em Português e utiliza os métodos translate(), tokenize(), removeTokens(), replaceDactylology() e replaceLexical()

para traduzir essa sentença para uma seqüência de glosas em LIBRAS. Ele também possui instâncias das classes MorphologicSyntacticAnalyzer e RuleAnalyzer que são utilizadas, respectivamente, para classificar os tokens morfo-sintaticamente e aplicar as regras de tradução armazenadas na base de tradução.

Figura 5.3: Diagrama de classe do componente de Tradução Automática

A classificação Morfológica e Sintática é realizada com base no corpus "Bosque"3 [Freitas et al. 2008]. Esse corpus foi desenvolvido pelo projeto "Floresta Sintática"[Freitas et al. 2008] e possui 9.368 sentenças e 186.000 palavras em língua portuguesa. Essas sentenças foram obtidas do jornal brasileiro "Folha de São Paulo"e do jornal português "Público", e foram classificadas morfológica e sintaticamente por lingüistas. Na imple- mentação deste classificador, no entanto, apenas as sentenças do corpus em Português Brasileiro foram utilizadas nessa implementação.

A classeMorphologicSyntacticAnalyzerpossui uma instância da classePPMManager. Essa classe, inicialmente, utiliza o algoritmo do PPM-C [Moffat 1990] para construir um

5.1. LIBRASTV 83 modelo estatístico da língua portuguesa baseado nas sentenças do Bosque. Em seguida, o PPM-C [Moffat 1990] é aplicado para classificar os tokens morfológica e sintaticamente. O modelo do PPM foi implementado utilizando uma cadeia de Markov de ordem 5. Esse valor de ordem foi definido empiricamente com o objetivo de manter um bom equilíbrio entre precisão e tempo de execução.

A classe RuleAnalyzeraplica as regras de tradução definidas na base de "Regras de Tradução"(ver Figura 4.2) para a seqüência de tokens e utiliza um dicionário de Português- LIBRAS para realizar a substituição léxica. Conforme mencionado na Seção 4.2., na substituição léxica, alguns tokens são substituídos para adaptar o significado da sentença rescrita para LIBRAS, uma vez o vocabulário de LIBRAS é menor do que o vocabulário da língua portuguesa [Santos et al. 2009]. Esse dicionário Português-LIBRAS foi desen- volvido em duas partes. A primeira parte foi extraída do "Dicionário Ilustrado de Libras do Estado de São Paulo"que possui 43.606 entradas, 3.340 imagens e 3.585 vídeos, onde um intérprete representa os sinais de LIBRAS. A segunda parte foi gerada por especialis- tas em LIBRAS, considerando a variação de inflexão verbal entre as línguas, isto é, que os verbos conjugados em Português são traduzidos para sua forma infinitiva em glosa. O dicionário Português-LIBRAS completo utilizado possui 295.451 entradas.

Para codificar a seqüência de glosas no fluxo MPEG-2 TS, um componente de Codi- ficação também foi implementado no "Tradutor de LIBRAS". Esse componente também foi desenvolvido utilizando a linguagem C++ e funciona da seguinte forma. Inicialmente, ele recebe a seqüência de glosas do componente de Tradução Automática e gera as men- sagensLCMeLDMde acordo com o protocolo definido na Seção 5.1.1. Essas mensagens são então encapsuladas em eventos DSM-CC juntamente com as informações de sincro- nização (etiquetas de tempo - timestamps) e são, em seguida, empacotadas em pacotes TS para multiplexação.

O multiplexador então recebe os pacotes TS gerados pelo componente de Codificação, multiplexa esses pacotes no fluxo MPEG-2 TS juntamente com os pacotes de áudio, vídeo e dados, e encaminha o fluxo MPEG-2 TS resultante para ser modulado e transmitido pela rede de difusão.

No lado do receptor, uma aplicação Ginga-J4, agrupa as funcionalidades dos compo-

nentes de Animação e Distribuição para gerar e exibir de forma sincronizada, respecti- vamente, o vídeo (ou trilha) de LIBRAS. Essa aplicação também possui um módulo de Decodificação, responsável por decodificar os eventos DSM-CC e extrair a seqüência de glosas e informações de sincronização encapsuladas nesses eventos. Na Figura 5.4, é

4Ginga-J é parte procedural do middleware Ginga, o middleware do SBTVD. As APIs do Ginga-J são

84 CAPÍTULO 5. CENÁRIOS DE USO ilustrado o diagrama de classes dessa aplicação.

Figura 5.4: Diagrama de classes da aplicação LibrasTV.

A classe principal dessa aplicação é a classeLIBRASController. Essa classe possui ins- tâncias das classesLIBRASProcessoreLIBRASPlayer, que implementam as funcionalida- des dos componentes de Decodificação e de Animação e Distribuição, respectivamente. Ela também possui instâncias de outras classes Ginga, como, por exemplo, as classes

javax.tv.xlet.Xletecom.sun.dtv.ui.event.UserInputEventListenerque são responsáveis por

controlar as entradas do usuário pelo controle remoto e por gerenciar o ciclo de vida da aplicação, respectivamente.

5.1. LIBRASTV 85 e utiliza instâncias da classe com.sun.dtv.broadcast.event.BroadcastEventManager para se registrar e capturar os eventos DSM-CC recebidos pela aplicação. Dessa forma, aLI-

BRASProcessorpode manipular objetos do tipocom.sun.dtv.broadcast.BroadcastReceivedEvent,

que são instâncias dos eventos DSM-CC nas aplicações Ginga-J.

A classeLIBRASPLayerentão recebe a seqüência de glosas e as informações de sin- cronização, extraídas pelas instâncias da classeLIBRASProcessor, gera um vídeo de LI- BRAS (Animação) com o auxílio do Dicionário de LIBRAS e exibe essa trilha como uma janela de LIBRAS de forma sincronizada sobre o vídeo do programa (Distribuição). Para isso, essa classe utiliza a API "Java Media Framework (JMF) 1.0", disponível no pacote

javax.mediado Ginga-J.

Nessa versão do protótipo, o Dicionário de LIBRAS foi armazenado em um disposi- tivo de memória externa (USB - Universal Serial Bus) do receptor e os sinais do Dicio- nário foram gerados com base no modelo do avatar-3D apresentado na Seção 4.5.4. Para suavizar a transição entre sinais consecutivos, uma configuração (posição) neutra foi uti- lizada no início e no final da representação de todos os sinais do Dicionário de LIBRAS. Essa posição foi definida de acordo com a sugestão de intérpretes de LIBRAS e posiciona as mãos e os braços de forma estendida em linha reta para baixo e com uma expressão facial neutra (isto é, sem aplicar qualquer movimento nos ossos da face do avatar-3D).

A Figura 5.5, ilustra algumas capturas de tela da janela de LIBRAS gerada pelo pro- tótipo apresentado. Essa aplicação foi testada e validada numa versão adaptada do Open- ginga5, implementação de código aberto do middleware Ginga.

Figura 5.5: Capturas de tela da execução da aplicação LibrasTV sobre o Openginga

(a) (b)

Na próxima seção será apresentado o protótipo da solução proposta para Web, deno- minado LibrasWeb.

5O Openginga é uma implementação de código aberto do middleware Ginga disponível em gingacdn.

86 CAPÍTULO 5. CENÁRIOS DE USO