LoCoBoard: um quadro interativo de baixo custo baseado em algoritmos de visão computacional
Resumo
Na atual era digital, a utilização de interfaces naturais entre os seres humanos e as máquinas está a tornar-se mais imperativa do que nunca. Isto é particularmente importante nas instituições de ensino, onde a utilização de ferramentas e aplicações interativas pode trazer novas vantagens (p. ex., facilitar a exposição e a compreensão de conceitos complexos, estimular o trabalho colaborativo, melhorar as práticas de ensino, etc.). Os Quadros Interativos (IW) estão a tornar-se ferramentas úteis e a sua utilização está a aumentar em vários níveis de ensino; no entanto, estas soluções são normalmente dispendiosas, o que torna lenta a sua utilização e disseminação, sobretudo em países com economias mais frágeis.
Neste contexto, o projeto LoCoBoard (Low-Cost interactive whiteBoard) propôs a criação de um IW de código aberto, com requisitos de hardware de baixo custo (cf. um computador equipado com webcam, um videoprojetor e um dispositivo apontador de infravermelhos). Discutimos aqui a estrutura física e lógica do protótipo de IW proposto. É também apresentado um quadro de análise para comparar a eficiência do protótipo com a de sistemas relacionados. Acreditamos que a solução proposta pode facilitar o acesso aos IW e, consequentemente, aumentar a sua utilização e difusão.
Introdução
Ao longo das últimas décadas, a evolução tecnológica tem sido notável, mas a interação Humano-Computador continua a ser realizada, na maioria dos casos, através do tradicional teclado, monitor e rato. O futuro, contudo, deverá assentar mais na utilização de interfaces naturais, como a fala, os gestos e a manipulação manual [1].
Em particular, a utilização de IW em cenários de ensino está a tornar-se uma tendência importante. Estes IW podem ajudar a expor e manipular conceitos complexos, permitir o trabalho colaborativo entre professores e estudantes e melhorar as práticas pedagógicas [2]. Embora exista uma vasta gama de soluções comerciais de IW, estas são geralmente demasiado dispendiosas, o que restringe a sua utilização a poucas instituições de ensino.
O principal objetivo deste projeto foi a criação de uma solução de IW baseada em software, utilizando apenas um projetor para visualizar as imagens do ecrã do computador na parede, um computador equipado com uma webcam para captar a imagem projetada e um dispositivo apontador de Infravermelhos (IR) para gerar os pontos de interação. Outro objetivo importante deste projeto centrou-se em disponibilizar uma solução multiplataforma, para aumentar a aceitação e a disseminação.
O protótipo LoCoBoard utiliza vários algoritmos de visão computacional para processar as imagens captadas e detetar as interações IR. A aplicação adapta-se às condições de luz do ambiente (cf., Background Subtraction) e à focagem, e devolve as coordenadas dos pontos de interação. Estas coordenadas são depois distribuídas a outras aplicações, através de TUIO, ou usadas diretamente para controlar o cursor/a interação. O protótipo desenvolvido demonstra que, com o software adequado a correr numa plataforma de hardware comum, é possível obter um sistema de IW genérico, barato e útil para qualquer sala de aula.
Uma das partes mais importantes do sistema é o algoritmo de deteção de blobs. Os blobs são um conjunto de píxeis com características comuns que podem ser isolados numa imagem. Este projeto efetuou também uma comparação entre o sistema de deteção desenvolvido e outras plataformas semelhantes, como o Touchlib [3],[4] e o Tbeta [5]. O protótipo utiliza vários algoritmos de deteção, que foram comparados entre si segundo diferentes critérios: desempenho, precisão e consumo de CPU.
LoCoBoard – Quadro Interativo de Baixo Custo
Esta secção apresenta a arquitetura e o funcionamento do sistema. Um dos seus principais elementos arquiteturais é o módulo de deteção de BLOBs, que utiliza vários algoritmos que são também comparados nesta secção.
Arquitetura
O sistema é composto por um software de código aberto, instalado num computador comum, uma webcam (ou qualquer outro tipo de câmara genérica), um dispositivo apontador com uma fonte de infravermelhos integrada e um mecanismo de projeção (videoprojetor). A robustez e a simplicidade de utilização são dois fatores principais para a aceitação do sistema pelo utilizador (i.e., usabilidade).
O principal objetivo da câmara é “sentir” (i.e., ver) o ambiente, captando um fluxo de vídeo composto pela radiação infravermelha emitida pelo dispositivo apontador. Uma forma simples de o conseguir é colocar à frente da lente da câmara um filtro de luz que só deixe passar a luz infravermelha, como película fotográfica. Utilizamos como dispositivo apontador uma caneta com um LED IR montado na ponta e uma pilha (power) alojada no interior da caneta.
A primeira fase é a calibração, para estabelecer um fator de escala entre as resoluções do quadro (i.e., da projeção) e do computador; isto permite-nos mapear os movimentos do dispositivo apontador sobre a projeção. A saída do sistema permite a interação do rato no computador através do deslocamento do apontador sobre a projeção ou o envio das coordenadas através do protocolo TUIO [6-8].

O diagrama de blocos (Figura 1) é composto por quatro tarefas principais que o nosso sistema tem de processar para ser bem-sucedido. A primeira é a aquisição de uma imagem pela câmara, que será genérica para cada câmara suportada pela framework utilizada, i.e., OpenCV [9-12]. Em seguida, aplicamos alguns filtros para melhorar a qualidade da imagem, para um melhor processo de reconhecimento dos Blobs IR. Utilizamos métodos adaptativos de subtração de fundo para isolar as ações em primeiro plano, i.e. a interação do dispositivo apontador IR à frente da projeção. A terceira fase centra-se nos algoritmos que desenvolvemos para a deteção e o seguimento de Blobs IR. Mais adiante, debruçar-nos-emos com maior profundidade sobre a implementação dos algoritmos. Por fim, na última fase, enviamos as coordenadas dos Blobs IR identificados; se não existir nenhum blob, é devolvido (-1, -1).
Algoritmos
Esta secção descreve como é efetuada a análise de cada imagem para detetar a interação; esta posição é devolvida no formato de coordenadas cartesianas (eixo x, eixo y). Um vídeo é composto por uma sequência de imagens consecutivas. Cada imagem representa uma matriz de píxeis. Cada píxel tem três valores, que representam as componentes vermelha, verde e azul do espaço de cor RGB. Convertendo uma imagem para tons de cinzento, temos apenas um valor por píxel. No processamento em tempo real, para cada imagem, esta transformação revela-se essencial: a análise pode ser até três vezes mais rápida do que com imagens a cores (menos píxeis a analisar diminuem o custo de CPU). Além disso, a aplicação não consegue reconhecer nem distinguir cores diferentes. Outro aspeto a considerar é a coordenada do apontador de infravermelhos. Estas são indicadas usando como origem o píxel do canto superior esquerdo de cada imagem adquirida pela câmara (0,0), e a coordenada máxima é definida como (largura da imagem, altura da imagem). Dependendo da resolução da câmara, podemos trabalhar com diferentes resoluções.
Em seguida, apresentamos uma breve descrição dos cinco algoritmos de deteção e monitorização dos BLOBs gerados pela caneta IR. Na Figura 2 podemos ver a legenda comum que será utilizada para todos eles.

Algoritmo Simples de Deteção (A1)
Este algoritmo efetua um varrimento da imagem píxel a píxel, como ilustrado na Figura 3, para encontrar um valor que exceda um limiar ou um valor máximo aceitável definido pelo utilizador durante o arranque. Este algoritmo recolhe as coordenadas de todos os pontos que têm um valor acima do limiar e devolve a média dos valores no eixo x e no eixo y.

Algoritmo Simples de Deteção com Salto (A2)
Este algoritmo é semelhante ao anterior, mas permite definir um valor de salto S. Assim, entre duas leituras de píxeis, o algoritmo ignora S-1 píxeis. O processo de cálculo das coordenadas do PI é o mesmo do algoritmo anterior, ou seja, devolver a média dos valores recolhidos no eixo x e no eixo y. Este algoritmo fornece resultados mais precisos no cálculo do centro do BLOB quando o valor definido para o salto S é pequeno.
Algoritmo Simples de Deteção com Salto – segunda versão (A3)
As diferenças entre este algoritmo e o anterior visam reduzir o custo do processamento de cada imagem num caso específico: quando existe um PI ao longo de imagens consecutivas e este não se encontra no canto direito da imagem (largura da imagem, altura da imagem).
O algoritmo começa a pesquisar a imagem usando o valor de salto definido pelo utilizador (cf., algoritmo A2); quando encontra um píxel com valor acima do limiar, interrompe a pesquisa e aplica um subalgoritmo nessa área para determinar as coordenadas do PI (ver Figura 4).
Para encontrar o centro do PI, pesquisa nas quatro direções possíveis a partir do ponto encontrado. Primeiro na horizontal, determinando o máximo e o mínimo ao longo dessa linha. Em seguida, aplica uma pesquisa na vertical usando como origem, no eixo x, a média entre o mínimo e o máximo encontrados anteriormente e, no eixo y, o mesmo valor do ponto original. Com a mesma técnica, encontra um máximo e um mínimo na vertical, ou eixo y. Estes dois conjuntos de valores ([min x-axis, max x-axis]; [min y-axis, max y-axis]) fornecem o centro do PI (ver Figura 5).
Algoritmo com Previsão e Aproximação em Espiral (A4)
Este algoritmo propõe uma abordagem diferente das anteriores. Centra-se não tanto na deteção, mas no seguimento do PI. Deverá apresentar melhores resultados quando um ponto se desloca ao longo de imagens consecutivas (operação de arrastamento do dispositivo apontador). Utilizamos neste algoritmo um vetor que armazena informação sobre o seu deslocamento, i.e., a diferença da sua posição entre duas imagens consecutivas. Considerem-se as três imagens consecutivas seguintes: F1, F2 e F3. Todas contêm um PI em movimento, com as respetivas coordenadas p1 = (x1, y1), p2 = (x2, y2) e p3 = (x3, y3). O valor do vetor de deslocamento do PI entre F1 e F2, Δs, é calculado da seguinte forma:
Δs = (Δx, Δy) = (x2-x1, y2-y1)
Podemos então reutilizar Δs para prever a posição futura de p3; com base nesta previsão, aplicamos uma pesquisa em espiral para encontrar as coordenadas finais do PI em F3. Esperamos que o deslocamento se mantenha em imagens consecutivas (valor Δs), pressuposto que é válido a menos que a operação de arrastamento termine abruptamente. A estimativa das novas coordenadas do PI em F3 é calculada através da fórmula:
Previsão = P2 + Δs = (Δx + x2, y2 + Δy)

Com base nesta previsão, começamos a pesquisar na imagem segundo o nosso modelo em espiral. A principal diferença consiste em usar a estimativa de p3 que acabámos de calcular, em vez da origem (0, 0). Utilizamos um mecanismo em espiral para encontrar o mais rapidamente possível a solução, i.e., uma coordenada com um valor acima do limiar. O mecanismo tradicional de pesquisa em espiral teria um custo de CPU muito elevado, pelo que optámos por construir previamente uma tabela (lookup table) com as distâncias no eixo x e no eixo y para simular o movimento de uma espiral, como se pode ver na Figura 6.
Quando um PI desaparece, a expansão da espiral a toda a imagem pode ser ineficiente quando comparada com métodos de pesquisa lineares. As razões estão relacionadas com o armazenamento da imagem em memória. Enquanto uma pesquisa em espiral efetua repetidamente saltos entre várias zonas de memória, uma pesquisa linear analisa posições de armazenamento consecutivas, o que permite que o processo seja executado mais rapidamente. Por isso, decidimos limitar a sua expansão com um parâmetro que corresponde ao número máximo N de níveis permitidos. Quando o algoritmo não encontra nada na área de pesquisa em espiral e ainda resta uma área da imagem por analisar, passa para uma abordagem linear para pesquisar e verificar a presença ou ausência de um PI nos restantes píxeis da imagem.
Algoritmo Multiponto (A5)
Este algoritmo permite um varrimento linear simples da imagem, recolhendo informação de todos os PI, como podemos ver na Figura 7. Em seguida, analisa os valores recolhidos e determina diferentes grupos para saber quantos pontos existem em cada imagem. Por fim, analisa estes grupos para saber quais são as coordenadas do respetivo centroide, como ilustrado na Figura 8. O algoritmo descrito foi adaptado do algoritmo descrito por Erik van Kempen [13]. O autor, em [13], salienta a eficiência temporal desta técnica, usada para o reconhecimento de vários pontos de interesse num único varrimento da imagem.

Código-fonte
Pode encontrar todo o código-fonte em C++ em http://code.google.com/p/locoboard/
Artigo completo
Pode encontrar o artigo completo em http://dx.doi.org/10.1155/2013/252406 ou http://bdigital.ufp.pt/handle/10284/1228.
Referências
[1] S. Ballmer, “Microsoft at International Consumer Electronics Show 2009 Virtual Pressroom,” Ballmer on Natural User Interface, 2009.
[2] Ekbutechnology, “Interactive Whiteboards and My Teaching Goals,” Interactive Whiteboards and My Teaching Goals.
[3] D. Wallin, “Wallin’s Webpage – Touchlib,” Touchlib Homepage, 2008.
[4] NUI Group, “Touchlib,” Touchlib – Home.
[5] NUI Group, “CCV – Tbeta,” Comunity Core Vision, 2008.
[6] reacTIVision, “Protocol TUIO – Tangible User Interface,” TUIO.org, 2009.
[7] TUIO.org, “TUIO Protocol Specification 1.1,” TUIO Protocol Specification 1.1.
[8] T. Bovermann, R. Bencina, E. Costanza, and M. Kaltenbrunner, “TUIO: A protocol for table-top tangible user interfaces,” 2005.
[9] M. Ferreira and A. Moraes, “Tutorial OpenCV,” 2007.
[10] G. Bradski and A. Kaehler, Learning OpenCV: Computer Vision with the OpenCV Library, O’Reilly Media, Inc., 2008.
[11] Vadim Pisarevsky, “Introduction to OpenCV,” 2007.
[12] Intel®, “Intel® IPP – Open Source Computer Vision Library (OpenCV),” 2009.
[13] E.V. Kempen, “Blob detection V: growing regions algorithm,” 2008.