3. Conceitos Teóricos
3.2. S ENSOR 3D K INECT
3.2.4. Ferramentas para desenvolvimento
As principais funcionalidades utilizadas em aplicações e bibliotecas de desenvolvimento para o sensor 3D Kinect são disponibilizadas através dos projetos OpenNI, OpenKinect e Microsoft Kinect for Windows. Algumas bibliotecas que utilizam estes projetos nas suas implementações são as que podem ser observadas na Figura 18.
Figura 18 - Bibliotecas que usam o OpenNI [30]
3.2.4.1. OpenKinect
Em 2010, Hector Martin colocou o seu projeto OpenKinect no Github. Este é um projeto open source desenvolvido à volta do driver libfreenet, que pode ser usado em Linux, Windows e MAC. O libfreenet contém a biblioteca nuclear de acesso ao sensor 3D Kinect, permitindo o controlo do motor, das câmaras, do áudio, dos LEDs e acelerómetros da plataforma [30]. Também contém uma biblioteca que analisa as saídas do sistema, de modo a oferecer uma camada de abstração para, por exemplo, o seguimento das mãos ou do esqueleto. Permite o desenvolvimento em Java, C++, C#, Actionscript, Python, entre outras [43].
3.2.4.2. Microsoft Kinect for Windows
Em 2011, aquando do lançamento da segunda versão do sensor 3D Kinect, a Microsoft lançou um SDK não comercial para Windows. Permite aceder à informação dos sensores e o facto de ser desenvolvido pela Microsoft assegura a qualidade da API, bem como uma boa documentação com informação relativa às bibliotecas existentes. Consegue detetar até 20 articulações e consegue seguir até 6 utilizadores em simultâneo, Figura 19 [31][44].
Este SDK consegue realizar uma deteção preditiva de articulações, mantendo assim um nível de precisão relativamente elevado, quando comparado com outros. Além disso, pode utilizar a resolução máxima da câmara RGB (1024x768), realizar gravações áudio e recorrer a comandos por voz para controlo do sistema [43]. Permite ainda o desenvolvimento em C++, C# ou Visual Basic [31] [44].
23
Figura 19 – O Microsoft Kinect for Windows reconhece até seis pessoas e consegue seguir duas [44]
Tem como principal desvantagem, o facto de só ser compatível com o sistema operativo Windows.
3.2.4.3. OpenNI
Quando a PrimeSense verificou o interesse e as conquistas da comunidade open source, decidiu disponibilizar o seu próprio driver e API (OpenNI) [30]. O OpenNI (Open Natural Interaction) além de ser open source, permite o desenvolvimento em várias linguagens de programação tais como, C, C++ e C#, pode ser usado em diversas plataformas e foi desenvolvido de modo a ser compatível com vários sistemas do tipo RGB-D [31][44]. Deteta até 20 articulações, com 2 utilizadores em simultâneo e requer menos capacidade computacional que o Kinect for Windows, dado que os algoritmos a que recorre são mais rápidos e leves computacionalmente [43].
O OpenNI é composto por dois conjuntos de APIs, uma para ser implementada pelos dispositivos sensores e outra implementada pelos componentes de middleware. Assenta numa estrutura de três camadas, com cada camada representando uma parte integrante, Figura 20. A camada superior representa o software que implementa aplicações naturais de interação. A camada do meio é o próprio OpenNI, fornecendo interfaces de comunicação que interagem com ambos os sensores e componentes de middleware. A camada inferior são os dispositivos de hardware que captam as imagens e o som [30].
24
Figura 20 - As três camadas abstratas do OpenNI [30]
A API permite que múltiplos componentes sejam registados na framework OpenNI. Esses componentes são chamados módulos e são utilizados para produzir e processar dados sensoriais.
Os módulos suportados são:
Módulos sensoriais:
o Sensor de profundidade;
o Projetor laser de infravermelhos; o Câmara RGB;
o Dispositivos de Áudio.
Componentes de Middleware que processam dados sensoriais, Figura 21: o Análise do corpo inteiro;
o Análise de ponto da mão; o Deteção de gestos; o Analisador de cena.
Figura 21 - Algumas funcionalidades do OpenNI: Localização da mão (esq.), esqueleto (meio) e seguimento da mão (dir.) [30]
25
Existe um conjunto de componentes definidos pelo OpenNI, chamados de Nós de Produção (Production Nodes) que gerem o processo de criação dos dados requeridos pelas aplicações com Interação Natural. Cada nó de produção encapsula a funcionalidade relacionada com a criação de um tipo de dados específico. A API dos nós de produção só define a linguagem. A lógica da geração de dados deve ser implementada pelos módulos que se conectam ao OpenNI. Cada nó de produção tem um tipo, e está relacionado com o sensor ou com o middleware:
Sensor:
o Dispositivo – representa um dispositivo físico, habilita configuração do dispositivo;
o Gerador de Profundidade – gera um mapa de profundidade; o Gerador de Imagem – gera mapa de cores da imagem;
o Gerador de Infravermelhos – gera mapa de infravermelhos da imagem; o Gerador de Áudio – gera stream de áudio.
Middleware:
o Gerador de Alerta de Gestos – gera callbacks para a aplicação quando gestos específicos são identificados;
o Analisador de Cena – analisa a cena, incluindo separação entre o foreground e o background;
o Gerador de Ponto da Mão – suporta deteção e seguimento de mão;
o Gerador de Utilizador – gera representação de um corpo numa cena tridimensional.
O OpenNI define recursos, permitindo aos fornecedores de middleware decidirem se implementam ou não tais recursos. Os recursos suportados pelo OpenNI são:
Visão Alternativa: transforma os dados para aparecerem como se o sensor estivesse noutro local;
Recorte: tem como saída uma área selecionada da frame;
Sincronização de frames: permite que dois sensores sincronizem as frames;
Espelhar: espelhamento dos dados produzidos por um gerador;
Deteção de Pose: reconhece se um utilizador está numa determinada posição;
Esqueleto: tem como saída os dados do esqueleto do utilizador. Estes dados incluem a localização das articulações do esqueleto e a habilidade de seguir as posições do esqueleto;
Posição do utilizador: permite a um gerador de profundidade otimizar o mapa de profundidade de saída que é gerado para uma área específica da cena;
Mão atinge limite: alerta quando o ponto de mão atinge os limites do campo de visão [30].
3.3. Técnicas de deteção de movimento
As técnicas de deteção de movimento, são associadas a tarefas de inferência de alto nível, tais como deteção, localização ou classificação de objetos em movimento, e, frequentemente, consideradas como uma etapa de pré-processamento. A importância destas técnicas pode ser avaliada pelo elevado número de algoritmos que foram desenvolvidos até hoje e pelo, ainda maior número de artigos publicados sobre este assunto. De facto, a deteção de movimento é fundamental para uma ampla gama de aplicações, além disso, o número de métodos de deteção de movimento propostos até à data é enorme [45].
Os métodos mais comuns de deteção de movimento são o optical flow, background subtraction e frame difference [37]. Estes três métodos são abordados neste documento.
26
3.3.1. Background subtraction
A subtração de fundo é uma técnica muito utilizada para deteção de movimento de objetos numa cena e separá-los da parte estática dessa mesma cena [46] [47]. Esta técnica é geralmente aplicada a dados de vídeo obtidos por câmaras estáticas, tanto em cenários interiores, como exteriores. É uma tarefa fundamental em aplicações de visão por computador, como, por exemplo, sistemas de videovigilância [46].
Esta técnica está associada à deteção de objetos que se deslocam a partir da diferença entre a frame atual e uma frame de referência. Basicamente, a imagem de fundo deve ser uma representação da cena, sem os objetos que exibiram deslocamento, devendo ser atualizada regularmente, para refletir as adaptações às condições de luminosidade e configurações de geometria [47].
Têm sido propostos vários métodos de subtração de fundo. Todos eles procuram estimar o modelo de fundo a partir de uma sequência temporal de frames. As abordagens orientadas ao pixel são as mais populares. Nessas abordagens cada pixel é modelado de forma independente e as relações espaciais locais são adicionadas ao modelo em etapas de pós-processamento. Estes algoritmos consomem poucos recursos computacionais e permitem adaptar localmente cada pixel à resposta do algoritmo [46] [47].
Alguns dos métodos utilizados para aplicar a subtração de fundo são:
Running Gaussian average; Temporal median filter; Mixture of Gaussians;
Kernel density Estimation (KDE); Sequential KD approximation; Cooccurence of image variations;
Eigenbackgrounds.
3.3.2. Frame difference
Um outro método habitualmente utilizado para detetar deslocamento de objetos é pela comparação de duas ou mais sequências de imagens. A comparação da imagem pela análise de todos os seus pixéis é conhecida pelo método da diferença de frames [48]. É considerado um método simples e fácil de implementar, mas os resultados poderão não ser tão precisos como os de outros métodos, devido à sua sensibilidade a interferências causadas por alterações do brilho do background [49]. Utiliza uma técnica específica para escolher qual a imagem de referência a ser utilizada para a deteção de movimento. Esta técnica é conhecida por template matching. Existem duas formas de template matching: a estática (static template matching) (STM), que tem por base a subtração de fundo e a dinâmica (dynamic template matching) (DTM), que permite adaptações às alterações ambientais [48].
3.3.3. Optical flow
Para a deteção de obstáculos e seguimento objetos em movimento, é necessário, à priori, calcular o fluxo ótico, que é uma estimativa do movimento aparente entre duas imagens diferentes [50].
Quando se caminha, conduz ou se move a cabeça, a visão muda. Mesmo quando se dorme, o meio envolvente está em permanente movimento. A compreensão que se tem sobre este movimento parece tão simples que muitas vezes é dado como garantido. De facto, esta capacidade de compreender um mundo em mudança é essencial para a sobrevivência, sem isso, não haveria continuidade das perceções [51].
27
Em termos simples, o fluxo ótico é o movimento aparente dos pixéis ou regiões de uma imagem entre duas frames. Subjacente ao fluxo ótico está o pressuposto de constância do brilho, isto é, os valores de imagem (brilho, cor, etc.) permanecem constantes ao longo do tempo, embora a sua posição na imagem 2D possa mudar. Os algoritmos para calcular o fluxo ótico exploram esta hipótese de diversas formas, para calcular um campo de velocidades que descreva o movimento horizontal e vertical de cada pixel na imagem. O fluxo ótico é difícil de calcular, por duas razões principais. Primeiro, em regiões da imagem que tenham homogeneidade irregular, o fluxo ótico é ambíguo porque o pressuposto de constância de brilho é satisfeito por vários movimentos diferentes. Em segundo lugar, em cenas reais o pressuposto de constância de brilho é violado nos limites do movimento e devido a mudanças de iluminação, sombras, transparência ou reflexos. Para resolver o primeiro, todos os métodos de fluxo ótico utilizam algum tipo de pressuposto sobre a variação espacial do fluxo ótico que é utilizado para resolver a ambiguidade. O segundo problema pode ser resolvido através de métodos estatísticos robustos que tratam das violações do pressuposto de constância do brilho [51].
Em 1981 Berthold Horn and Brian Schunck apresentaram a primeira investigação sobre o fluxo ótico. Diversos métodos importantes sobre o fluxo ótico têm sido apresentados, como os de Thomas Brox [52] [53], que, no entanto, passados tantos anos, se baseiam na teoria de Horn & Schunck. A teoria de Horn & Schunck explica que o fluxo ótico é a distribuição das velocidades aparentes dos padrões de brilho numa imagem, ou seja, é um campo de vetores velocidade associado a uma sequência de imagens. O fluxo ótico surge tanto do movimento dos objetos da cena quanto do movimento da câmara. Inicialmente, assume-se, na medição de movimento de imagem que o padrão de brilho da cena permanece constante numa região da imagem, num curto intervalo de tempo [54].
Na maioria dos métodos para cálculo do fluxo ótico, considera-se que os pontos que se moveram de uma imagem para outra mantêm o mesmo valor dos pixéis em escala de cinzentos [50].
Como é necessário partir de pressupostos para o cálculo do fluxo ótico, existem diversos métodos, que, apesar das suas naturais diferenças, assentam em três etapas de processamento:
1. Suavização da imagem com filtros passa-baixo para extrair a estrutura do sinal de interesse e melhorar a taxa de sinal-ruído;
2. Extração de características básicas como as derivadas espácio-temporais;
3. Integração destas características para produzir um campo de fluxo bidimensional, o que geralmente envolve mais pressupostos em relação à suavização do campo de fluxo subjacente [55].
Em 1994 Barron, Fleet e Beauchemin [55] publicaram um trabalho, onde compararam os vários métodos de fluxo ótico, concluindo, após os resultados experimentais com os algoritmos, que um dos métodos mais confiáveis é o de Lucas e Kanade [56], que utiliza o pressuposto da coerência espacial, considerando que o fluxo é constante numa vizinhança pequena. Este método só é válido para pequenos deslocamentos. Como as matrizes geradas são pequenas, estas são facilmente invertíveis, contudo, isso não é garantido, e, quando assim é, uma opção admissível consiste em utilizar uma estratégia em multiresolução que calcula o fluxo num nível de baixa resolução e propaga a informação [55].
Para que o cálculo do fluxo ótico seja mais completo, é necessário ter em consideração alguns pressupostos sobre a natureza do movimento. A cor é uma fonte natural de informação adicional que ajuda a resolver este problema [57]. A ausência de gradientes de brilho em alguns pontos de imagem pode comprometer a estimativa de fluxo ótico em imagens em tons de cinza. Assim, um método que utiliza a informação de cor é considerado. Neste método, que se baseia no algoritmo de Lucas e Kanade [56], os pixéis são agrupados em regiões de
28
movimento semelhante. Para a estimativa de fluxo ótico, apenas alguns pixéis de cada grupo são considerados. Além disso, as informações dos canais da imagem são utilizadas para obter um sistema de equações mais restrito. O vetor de fluxo ótico de cada grupo de pixéis é obtido a partir deste sistema de equações [57].
3.4. A evolução da interação Homem-máquina
Sempre que se fala sobre um qualquer sistema computorizado, imediatamente se imagina um teclado para introduzir dados e um rato para interagir. Os avanços tecnológicos têm tido progressos significativos no desenvolvimento de novas tecnologias de interação, que irão, de forma gradual, substituir os métodos de interação tradicionais por interações mais naturais com o utilizador.
As interfaces WIMP (Windows, Icons, Menus and Pointer) desenvolveram-se a partir de princípios simples [58]:
As divisões espaciais são simples e utilizam retângulos sobrepostos;
Os itens que não estão a ser utilizados podem ser representados por pequenos ícones;
Os comandos são substituídos por menus;
A interação ocorre através de objeto apontador, que permite a movimentação entre os itens da interface.
Nos últimos anos tem-se observado significativos avanços tanto em tecnologias de hardware como de software e que suportam novos tipos de interações, Figura 19. Estes permitiram o paradigma de interação natural com o utilizador (NUI), que é geralmente utilizado para descrever as interfaces que prometem reduzir as barreiras entre o Homem e a máquina. Existem diversas abordagens NUI para a interação [58].
O desenvolvimento de sistemas interativos deve obrigatoriamente ter em consideração a área da Interação Homem-Máquina (IHM), uma vez que o sucesso dos sistemas depende, em grande medida, da sua usabilidade. A usabilidade pode ser definida como a qualidade de um sistema relativamente à facilidade de aprendizagem, à facilidade de utilização e à satisfação dos seus utilizadores. Desta forma os fatores relevantes para a usabilidade de um sistema são a eficácia, eficiência e satisfação com que utilizadores atingem objetivos determinados em ambientes específicos. Trata-se, portanto, de uma medida de qualidade de um sistema interativo em que o fator humano é fundamental e a sua usabilidade é claramente um dos fatores determinantes [59]. Um sistema, para ter sucesso, necessita de um equilíbrio entre estes conceitos [60][61].
Os princípios da IHM são:
1. Melhoria do desempenho das tarefas dos utilizadores e redução do esforço; 2. Evitar erros desastrosos por parte dos utilizadores;
3. Procurar um equilíbrio entre as tarefas a executar e as informações necessárias/apresentadas;
4. Promover experiências interativas agradáveis, envolventes e satisfatórias; 5. Promover a confiança.
29
30
Conforme referido anteriormente, o principal objetivo da IHM é a conceção de sistemas que minimizem a barreira comunicativa entre o homem e a máquina, ou seja, aproximar o mais possível a resposta da máquina à tarefa que o Homem pretende realizar. As melhorias das IHM procuram tornar o trabalho com a máquina mais natural. Exploram a rede sensorial humana - visão, audição, fala, tato, paladar e olfato [61].
Sensores, como o sensor 3D Kinect, têm a capacidade de monitorizar os movimentos em 3D, tornando-os dispositivos apropriados para a interação do Homem com a máquina, seguindo os movimentos da mão. Este progresso tecnológico é muito importante para aplicações no domínio das artes, da saúde e bem-estar, jogos de computador, desenho assistido por computador ou controlo remoto para robôs. A combinação dos dados RGB e da profundidade permite reduzir a complexidade de seguimento do alvo em ambientes complexos [62].
Para que a IHM baseada nas mãos humanas ocupe uma posição dominante, é necessário aprimorar alguns problemas-chave, como a segmentação da mão a partir da imagem captada. Com o sensor 3D Kinect, pode-se facilmente separar a mão do background [63].
3.4.1. Tecnologias de superfície multiponto
A “riqueza” da interação está relacionada com o número de graus de liberdade (DOF). A GUI (Graphical User Interface) convencional baseia-se no movimento em torno de um único cursor 2D, utilizando um rato. Isto resulta em dois graus de liberdade. Se a interação resulta da identificação de dois dedos, por exemplo, diz-se que tem 4 graus de liberdade, e assim por diante [3] [64] [65].
Foram registadas diversas patentes para a construção de superfícies multiponto, sendo algumas das mais importantes as de Johnson - Touch actuable data input panel assembly [66], Kasday - Touch position sensitive surface [67] ou Mallos - Touch position sensitive surface [68]. Entretanto, a Apple, com o lançamento do iPhone, introduziu os dispositivos móveis com interação multiponto e a Microsoft, em 2007, lançou uma mesa multitoque, a MS Surface [69]. As interfaces sem toque mais comuns fazem uso das mãos dos utilizadores para controlar um cursor no ecrã [70].
O multiponto permite a interação de uma forma mais natural e mais confortável, através do toque com os dedos no ecrã. O utilizador simplesmente toca numa representação gráfica de um determinado item, sendo mais intuitivo que a utilização do rato. A capacidade de reconhecer a presença de dois ou mais pontos de contato com a superfície oferece a possibilidade de implementar funcionalidades mais avançadas. Além disso, a interface multiponto permite a interação via movimentos pré-definidos, geralmente gestos [6] [70]. A combinação criteriosa de simples gestos com os dedos e animações de tela, representando metáforas físicas, tornaram a interface multiponto semelhante a um objeto físico que se pode manipular de forma intuitiva [72].
O reconhecimento de múltiplos pontos de interação simultâneos implica frequentemente a pressão de cada um de forma independente, assim como a sua posição e isso permite gestos e interação através de vários dedos ou mãos, aumentando a qualidade de utilização da tela. São diversas as abordagens de composição e estudo de ecrãs multiponto [70].
3.4.2. Natural User Interface (NUI)
O desenvolvimento de técnicas naturais e intuitivas de interação é um objetivo importante da IHM. Atualmente, a interação com os sistemas computacionais continua a ser feita maioritariamente com o rato e teclado. Mas a nossa interação com o mundo é feita através das mãos, corpo e voz. Assim, interfaces baseadas na interação com as mãos são uma forma
31
natural e intuitiva de interagir com computadores. Estas interfaces podem ser usadas, por exemplo, em realidade virtual, sistemas de apoio à reabilitação física, sistemas de controlo de dispositivos elétricos para pessoas acamadas, sistemas de informação geográfica ou jogos. O uso generalizado do sensor 3D Kinect provocou um aumento de investigação e criação de novas interfaces baseadas no corpo e voz humana, Figuras 23 e 24 [73].
Figura 23- Exemplos de sistemas que fazem uso dos gestos como forma de interação [74]
Figura 24 – Interação Natural com o Utilizador com recurso ao sensor 3D Kinect [75]
Todavia, o reconhecimento dos gestos das mãos e dos dedos através do sensor 3D Kinect ainda é um problema em aberto, devido à sua baixa resolução (640x480), considerando que as mãos ocupam uma parcela pequena da imagem de corpo inteiro. Os métodos tradicionais de visão por computador para reconhecimento de gestos das mãos estão longe de ser satisfatórios, devido às limitações dos sensores óticos utilizados e a dependência das
32
condições de iluminação e dos fundos. As luvas de dados garantem uma precisão elevada, mas são um artefacto e isso é um forte entrave à naturalidade que se pretende dos gestos das mãos. Assim, de facto, sendo o sensor 3D Kinect um dispositivo de hardware comum, cujo funcionamento passa totalmente despercebido ao utilizador, pode muito bem, com propriedade, ser usado e aprimorado para a criação de interfaces naturais baseadas nos gestos [73].
3.5. Visão por computador e processamento de
imagem digital
O processamento de imagens e visão por computador têm tido um expressivo desenvolvimento nas últimas décadas. O primeiro grande impulso nesta área surgiu com o início do programa espacial dos Estados Unidos. O uso de técnicas computacionais de aprimoramento de imagens começou a ser feito com imagens da lua transmitidas por sonda. Desde essa altura, a área de processamento de imagem e visão por computador cresceu de