• Nenhum resultado encontrado

2.3 Reconhecimento de Gestos

2.3.2 Reconhecimento de Gestos com Microsoft Kinect

Kinecté uma poderosa ferramenta de comunicação humana com o computador. Desde a primeira versão do Kinect para XBOX, desenvolvedores buscam um padrão para definir e reconhecer gestos. O Kit de Desenvolvimento de Software fornece uma API que permite fácil acesso aos dados de captura provenientes dos sensores do Kinect.

Baseado nesse fluxo de dados, os desenvolvedores classificam os gestos utilizando basicamente duas abordagens: por comparação ou por algoritmo. Cada técnica possui vantagens e desvantagens. A metodologia que o desenvolver irá escolher depende da complexidade do gesto, necessidade do projeto, tempo disponível e habilidades de desenvolvimento (WEBB; ASHLEY, 2012). Nas próximas seções abordamos as praticidades e problemas de cada uma. 2.3.2.1 Reconhecimento por Comparação

Basicamente, o conceito de reconhecer gestos por comparação envolve uma base de dados de imagens com um gesto sendo realizado. Usando esta base de dados, é possível comparar com uma sequência de dados de entrada (capturados do sensor do Kinect) com os dados das imagens gravadas. Um padrão de correspondência irá determinar se o modelo combina com os dados de entrada, e se assim for, então o gesto será reconhecido.

Nesse processo, o primeiro passo é construir uma base de dados de exemplos. Para uma maior eficiência, essa base deve incluir uma quantidade considerável de realizações dos gestos, por diferentes pessoas, de diferentes tamanhos e características físicas. A ideia é "ensinar"ao computador o gesto que deve ser reconhecido.

Essa abordagem vem da área científica conhecida como Aprendizagem de Máquina, que tem por objetivo criar algoritmos que dão aos computadores a habilidade de "aprender"como

certas tarefas podem ser realizadas sem uma programação específica. O foco é desenvolver formas do computador usar dados armazenados e reagir baseado nos dados recebidos, tais como dos sensores (WEBB; ASHLEY, 2012).

No entanto, este não é um sistema trivial de se colocar em prática. Primeiro, o sistema necessita de exemplos de usuários com diferentes formas físicas e tamanhos realizando várias variações do mesmo gesto. Pois, além de considerar diferentes pessoas realizando um determi- nado gesto, também é considerado a variedade de formas que uma única pessoa pode realizar o mesmo gesto. Então, mesmo que o sistema possua apenas um único gesto, há que capturar previamente esse gesto várias vezes pela mesma pessoa e depois por várias pessoas variadas vezes, o que já consome algum tempo. Caso o sistema possua um número maior de gestos, esse tempo será ainda maior.

Nesse processo, a vantagem que ocorre é que quanto mais dados armazenados, mais eficiente será a detecção e reconhecimento dos gestos. O inconveniente é que quanto mais gestos são gravados, maior será a base de dados que irá armazenar as informações necessárias para posterior comparação. Como resultado os recursos do sistema computacional serão requeridos exaustivamente, necessitando de um grande volume de armazenamento para os dados e ciclos de processamento para buscar a combinação dos dados. Caso o computador que execute a aplicação final não seja otimizado pode haver um comprometimento no processo de reconhecimento (CATUHE, 2012).

Ao optar por esta abordagem, o desenvolvedor pode implementar seu próprio sistema de correspondência baseado em um algoritmo de Aprendizagem de Máquina ou pode usar ferramentas disponíveis na comunidade. Até pouco tempo, o Kit de desenvolvimento de software do Kinect não incluía uma ferramenta para auxiliar o reconhecimento de gestos. Com o novo Kinecta Microsoft fornece uma ferramenta específica para este fim.

Microsoft Visual Gesture Builder (VGB)

Essa ferramenta fornece uma solução orientada a dados na detecção de gestos através de Aprendizagem de Máquina. O processo de criar uma base de dados de gestos torna-se simples usando VGB. A ferramenta envolve desde a captura dos gestos, classificação dos dados até a construção da base de dados ao ponto de ser usada em tempo de execução na aplicação (MICROSOFT, 2014).

Todo o processo pode ser realizado pelos próprios usuários ou por pessoas especialistas no domínio da aplicação. Não é necessário nenhum conhecimento de programação ou muito menos escrever uma única linha de código para construir a base de dados. No entanto, deve-se estimar os custos computacionais inerentes ao processo de busca e combinação dos dados, além do tempo de captura e treinamento dos gestos.

2.3.2.2 Reconhecimento por Algoritmo

A principal alternativa a Reconhecimento por Comparação é usar a escrita de código manual para especificar reconhecedores de gestos. Essa abordagem se baseia no rastreamento de esqueleto disponível a partir da versão 1.5 do Kit de desenvolvimento de software do Kinect (CATUHE, 2012).

Uma central de processamento interna do Kinect, dotada de complexos algoritmos é responsável pela análise e processamento das imagens de profundidade obtidos pela câmera de infravermelho do Kinect. Este processamento gera o rastreamento do esqueleto que permite predizer rapidamente e precisamente a posição tridimensional de vários pontos de articulação do corpo humano independente do tamanho, forma física e roupa (SHOTTON et al., 2011). A partir dessas informações sobre as articulações é possível escrever algoritmos para reconhecimento de gestos.

No reconhecimento por comparação, as imagens de profundidade são comparados para realização do reconhecimento. No reconhecimento por algoritmo não é necessário "treinar"uma base de dados para identificar o esqueleto. O próprio Kinect já reconhece o esqueleto automatica- mente. No entanto, o fato do dispositivo conseguir determinar a posição horizontal (coordenada X), vertical (coordenada Y) e distância do sensor (coordenada Z) de uma determinada articulação do corpo, não significa que um gesto pode ser diretamente interpretado.

Um algoritmo deve ser definido antes para poder fornecer uma semântica sobre as coordenadas das articulações capturadas e envolvidas na realização do gesto, e se todos os passos do algoritmo forem realizados com sucesso o gesto é reconhecido. Em outras palavras, as informações tridimensionais das articulações são usadas para definir regras e condições que devem ser satisfeitas para produzir um resultado, no caso o reconhecimento de um gesto específico.

Embora o reconhecimento tridimensional do esqueleto seja um grande avanço para o desenvolvimento de reconhecedores de gestos, esta abordagem também possui problemas em particular.

 Primeiro, as informações coletadas das articulações são basicamente números repre-

sentando um plano cartesiano tridimensional. Ao produzir um código usando estas informações é necessário um conhecimento específico de programação e manutenção devido a baixa abstração presente nos dados do dispositivo. Na maioria dos casos o código torna-se de difícil entendimento e manutenção. Quanto mais complexo for o gesto, maior será o algoritmo para codificar este gesto. Por exemplo, para obter o ângulo de rotação do punho de um usuário, há que se fazer várias combinações de coordenadas e convertê-las em quatérnios8

 Segundo, para se tornar eficiente, o algoritmo deve considerar os parâmetros espe-

cíficos de cada gesto, tais como duração e velocidade. Sendo o código complexo,

cabe somente aos desenvolvedores refinar o código para determinar os parâmetros apropriados para cada algoritmo.

 Por fim, atualmente as aplicações baseadas em gestos são frequentemente construídas

utilizando-se linguagens de programação de propósito geral tal como C#, acrescidas da APIs do dispositivo utilizado, tal como o Kinect. Se o dispositivo for substituído por outro mais moderno ou de fabricante diferente, certamente as aplicações terão que ser refeitas.

Codificar algoritmos para reconhecer um gesto pode ser a abordagem mais rápida, porque não é preciso "ensinar"ao computador o gesto variadas vezes por várias pessoas e a identificação do corpo humano é extraída de forma nativa do próprio dispositivo. O maior esforço é escrever um algoritmo para tratar o baixo nível dos dados provenientes dos sensores. Essa abordagem não detém um nível de abstração recomendável para não desenvolvedores. Até mesmo a especificação de um gesto simples pode se tornar bastante complexa para os usuários. É necessário um desenvolvedor treinado que possa construir um algoritmo eficiente de acordo com o dispositivo utilizado (WEBB; ASHLEY, 2012) (CATUHE, 2012).