1005 Interface Homem-Máquina Através do Movimento dos Olhos Gabriel de Oliveira Machado, Larissa Ferreira do Carmo, Thaís de Souza Marins, Jeronimo Costa Penha (Orientador), Maicon Stihler (Coorientador) Centro Federal de Educação Tecnológica de Minas Gerais – Unidade Leopoldina, Leopoldina - MG Resumo – Com o aumento do número de sistemas computacionais presentes no cotidiano e a necessidade do aumento da acessibilidade para pessoas com necessidades especiais, vários dispositivos que visam a melhoria da utilização destes sistemas vêm sendo criados, tais como telas sensíveis ao toque e sistemas que reconhecem comandos de voz. No entanto, a maioria destas tecnologias possui um custo elevado e algumas dificuldades na sua utilização, o que impede que sejam produzidas em grande escala. O objetivo deste trabalho é desenvolver um dispositivo de entrada capaz de detectar a direção dos olhos através de uma câmera de vídeo, com o objetivo de controlar diversos tipos de sistemas. O processo de tratamento das imagens coletadas é feito por meio de algoritmos disponibilizados pela biblioteca OpenCV, enquanto a classificação destas é realizada por uma rede neural, de forma a evitar o uso de algoritmos mais complexos e que exijam uma maior capacidade de processamento. Observa-se ainda que este dispositivo deva possuir baixo custo e apresentar uma interface para uma fácil implementação em sistemas já existentes. Palavras Chave: Visão Computacional; Redes Neurais; Automação; I. INTRODUÇÃO N os últimos anos, houve um grande aumento no número de novas tecnologias que visam a melhoria da utilização dos sistemas computacionais em geral, com a criação de vários dispositivos de entrada e saída, tais como telas sensíveis ao toque, óculos de realidade virtual, reconhecimento de voz, dentre outros. Com isso, várias destas tecnologias vêm sendo utilizadas para proporcionar uma maior acessibilidade, visando a integração de pessoas com determinadas necessidades especiais. No entanto, a maioria das tecnologias que facilitam a utilização de sistemas computacionais possuem um custo muito elevado, o que impossibilita a implementação em grande escala destas. Outro fator que impede a utilização destas tecnologias é a dificuldade na sua implementação (BAUER, 2005), uma vez que seriam necessárias várias modificações em aparelhos e sistemas já existentes, o que acaba gerando mais custos e desmotivando os responsáveis por estabelecimentos a realizar tal implementação. Uma característica importante para este trabalho é a utilização de método não intrusivo para a coleta de dados, permitindo maior facilidade para a utilização do dispositivo a ser desenvolvido. O método adotado é a captura e análise de imagens, que pode ser feita a distância por meio de uma câmera de vídeo simples, fato que evita um alto custo para o projeto como um todo. É interessante notar que a interface a ser criada não deve compreender apenas um conjunto de dispositivos, e sim qualquer sistema que possa ser controlado por meio de dispositivos de entrada comuns. Desta forma, pretende-se aumentar o número de possíveis utilizações de tal interface, sendo assim possível atingir o maior número de pessoas. II. OBJETIVO E QUESTÃO PROBLEMA Apresentadas as características do cenário atual, compreende-se a necessidade do desenvolvimento de tecnologias que, além de proporcionarem uma maior acessibilidade, sejam de baixo custo e fácil implementação, visando alcançar o maior número de pessoas (BAUER, 2005). Tendo isso em vista, decidiu-se criar um dispositivo de entrada para sistemas computacionais baseada apenas no movimento executado pelos olhos, de forma a permitir a quase qualquer pessoa o operar, possuindo ou não necessidades especiais. O objetivo deste projeto é desenvolver um dispositivo de entrada para sistemas computacionais em geral utilizando a detecção da direção do olhar, de forma a permitir o uso destes últimos de forma mais fácil e intuitiva, possibilitando ainda que pessoas com graves dificuldades motoras operem tais sistemas sem qualquer auxílio externo. O referido dispositivo deve possuir baixo custo e fácil implementação em qualquer sistema, ou seja, ser compatível com as tecnologias já existentes. Em vista da restrição de custo do sistema e, com isso, da capacidade de processamento do mesmo, optou-se por utilizar redes neurais, que são um modelo matemático relativamente simples e de processamento extremamente rápido. Um ponto que vale ser ressaltado é a necessidade do sistema de ser o mais geral o possível, de forma a garantir que uma maior variedade de futuras aplicações venham a ser desenvolvidas para o mesmo. Assim, como será melhor esclarecido, o foco deste trabalho é a criação da interface 1005 homem-máquina capaz de interpretar a imagem do usuário e apresentar como saída a direção na qual este está olhando de uma forma que possa ser interpretada por sistemas computacionais e, desta forma, permita aos usuários exercer controle sobre uma série de aplicações. principais processos, sendo eles o tratamento de imagens, a comunicação entre os programas, a coleta de amostras e o processamento pela RNA, como é mostrado de forma simplificada pela Figura 2. III. DESCRIÇÃO DE MATEIRIAS E MÉTODOS Para o desenvolvimento de um sistema que seja capaz de ser utilizado como interface dentro dos requisitos já descritos, são necessários uma série de processos, que incluem desde a captura de dados do usuário até a execução da tarefa propriamente dita. Inicialmente, os processos necessários foram divididos em dois grandes grupos, sendo estes o controle e o acionamento, como pode ser observado na Figura 1. Figura 2: Esquema representativo dos processos necessários. Fonte: Arquivo do projeto Figura 1: Representação da arquitetura geral do sistema. Fonte: Arquivo do projeto Em geral, os processos de controle são responsáveis por realizar o processamento das entradas e apresentar como saída a interpretação dos dados recebidos, que, neste caso, indicará a direção na qual o usuário está olhando. Os processos de acionamento são responsáveis por executar a ação pretendida pelo usuário efetivamente, independente de qual o tipo desta (física ou virtual). Por estar relacionada com as possíveis aplicações, a parte de acionamento não será aprofundada, visto que o objetivo deste trabalho é estabelecer uma interface geral, que possa ser utilizada em diversos tipos de aplicações. Vale ressaltar ainda que a decisão de realizar tal divisão de tarefas, além de aumentar a segurança do sistema, como um todo, impedindo que uma falha grave em uma das partes afete a outra, também possibilita que qualquer uma das partes seja substituída por outra que execute função similar, sem que sejam necessárias maiores alterações no sistema. Isso significa dizer que pode existir mais de um dispositivo capaz de realizar as funções de controle, assim como podem existir diversos dispositivos de acionamento para executar diferentes funções. A. Metodologia para a obtenção das saídas Para que, partindo da captura da imagem do usuário, obtenha-se a direção na qual este está olhando, é necessária uma série de processos com diferentes níveis de complexidade e de igual importância para o funcionamento do sistema. Em linhas gerais, são utilizadas técnicas de visão computacional para que se faça o processamento inicial da imagem capturada e, em seguida, essa imagem é usada como entrada para uma RNA (Rede Neural Artificial). Pode-se identificar quatro O primeiro passo para o funcionamento do sistema é a obtenção e tratamento das imagens obtidas da câmera de vídeo. A princípio, tal captura é feita com a resolução máxima da câmera, em cores (se disponível), e então convertida para escala de cinza, onde cada pixel da imagem é representado por um byte, que representa a intensidade do cinza naquele ponto. Só então a imagem é submetida à função da biblioteca para a detecção dos olhos presentes na imagem. Essa detecção é realizada através do método HAAR Cascade, que é capaz de detectar formas características em uma imagem, tais como faces, olhos, dentre outras, realizando comparações com modelos pré-definidos pela biblioteca OpenCV (KOMOGORTSEV, 2010). Após a execução do algoritmo, um vetor com os retângulos que representam os olhos encontrados na imagem é obtido. A partir de tais formas é possível fazer os tratamentos necessários para que se obtenha apenas a imagem do olho. O primeiro dos tratamentos é o corte da imagem delimitada pelo retângulo. Observe ainda que é necessário selecionar qual dos olhos será utilizado, caso haja mais de um presente na imagem, podendo essa escolha ser realizada de várias formas. Atualmente, o algoritmo opta pelo olho que se localize mais à direita (mais à esquerda na imagem). Uma vez obtida a imagem do primeiro corte, é necessário realizar outra redução na imagem obtida. Desta vez, o corte é ajustável por meio de parâmetros definidos em tempo de compilação, e visa remover partes irrelevantes da imagem do olho, uma vez que a captura inicial engloba regiões acima e abaixo do olho do usuário do sistema. Por fim, a imagem deve ser redimensionada para que seja processada pela rede neural da forma mais rápida possível. Essa redução é essencialmente importante, dado que, quanto maior o número de entradas de uma rede neural, maior o número de neurônios necessários para que se faça o processamento destas (SILVA, 2010), e, com isso, maior o tempo gasto para tal processamento, uma vez que um dos pontos críticos para o sistema aqui apresentado é a capacidade 1005 de processamento limitada. Deve-se considerar ainda que esta redução da resolução da imagem não deve ser muito grande, de forma que não reduza a precisão do sistema ou impossibilite o funcionamento do mesmo. Faz-se então uma comunicação entre o programa que realiza a captura e tratamento de imagens, e os programas que fazem a utilização de dados. Caso consiga estabelecer a ligação entre o socket e o programa responsável pela análise de imagens, o programa executa sua parte de captura e treinamento de imagem e aguardará o recebimento do byte de confirmação de envio. Para que o frame seja enviado, este byte deve ter o valor zero, do contrário o programa finalizará sua execução. Enquanto todo esse processo é realizado, os programas, desenvolvidos em Java, que utilizam os dados, ficam à espera. No momento que recebe o retorno do outro programa inicia-se o processamento dos dados. Para a coleta e armazenamento de amostras foi desenvolvido um programa em linguagem Java. A coleta acontece quando é solicitado ao usuário que olhe para uma direção específica, neste momento é recolhido um número de amostras ajustável. No final de cada frame é colocado um byte que indica a direção representada por tal, a afim de que o programa que executa a rede neural possa interpretá-las. Após isso as amostras são embaralhadas e salvas em um arquivo de texto, para que possa ser utilizada pelo programa encarregado do processamento das mesmas. Programa este que diferencia as entradas, os bytes que representam a imagem, e as saídas da RNA, bytes que representam as direções, que no caso atual são os N últimos bytes das amostras, sendo N é o número de neurônios de saída da rede. Uma vez que os dados necessários para o treinamento estejam devidamente armazenados em um arquivo próprio, é possível criar a rede neural e iniciar o seu treinamento. Para a criação da rede, são utilizadas as informações definidas via código (número de neurônios na camada de entrada e o tipo dos neurônios) e as informações obtidas do arquivo contendo as amostras para treinamento (número de neurônios na camada de saída). Feito isso, o arquivo é lido para que se obtenha as amostras para treino, que são carregadas para um vetor e passados como parâmetro para a função de treinamento da rede neural. Após o treinamento, os pesos sinápticos dos neurônios da rede treinada são gravados em um arquivo de texto com um formato específico (armazenando dados das camadas), de forma que o programa possa, em execuções posteriores, reconstruir a rede neural. Desta forma, o treinamento realizado não é perdido, e é apenas necessário carregar os valores dos pesos sinápticos para que a rede possa iniciar o funcionamento. Uma vez que os pesos tenham sido devidamente carregados, a execução do programa principal se baseia em um laço de repetição no qual é feita a requisição do frame de vídeo, recebimento dos dados, passagem de tais dados como parâmetro para a rede neural através de um método, que retorna as saídas da mesma. Em outra versão do código, é definida uma função para que se faça a requisição e análise de apenas um frame. Por meio desta função, é possível realizar a implementação em diversas aplicações desenvolvidas na linguagem Java, tal como a interface gráfica do sistema, que permite visualizar as saídas do sistema de forma mais clara. B. Tecnologias aplicadas Para que seja possível a implementação da metodologia apresentada, é necessária a utilização de várias tecnologias diferentes. Sendo assim, é válido apresentar melhor cada uma e a forma como é aplicada no sistema para que fique clara sua necessidade. A primeira e talvez mais crucial tecnologia aplicada são as Redes Neurais Artificiais. Uma RNA pode ser definida como um modelo matemático que tem como inspiração os neurônios, células nervosas presentes nos seres vivos inteligentes, responsáveis por permitir o processamento dos impulsos recebidos do mundo exterior, possibilitando uma tomada de decisão com relação a estes, assim como na forma como estes neurônios estão conectados entre si. Desta forma, assim como uma rede neural existente em um ser vivo, as redes neurais artificiais são capazes de adquirir conhecimento através da experiência. No caso das RNAs, o processo de adquirir conhecimento se dá através de um treinamento realizado para que a rede passa a reconhecer determinado padrão. Cada neurônio é responsável por receber um número de entradas e realizar a soma algébrica destas, uma vez multiplicadas pelo seu respectivo peso sináptico. Estes pesos sinápticos são os responsáveis por permitir que a rede se adapte e reconheça novos padrões. Em seguida, o resultado dessa soma é aplicado à função de ativação, que dará a saída daquele neurônio para as entradas aplicadas. A representação de um neurônio é apresentada pela Figura 3 Figura 3. Figura 3: Representação de um neurônio artificial. Fonte: (SILVA, 2010). Desta forma, a soma das entradas pode ser representada pela equação (1), sendo este valor aplicado na equação (2) para que se obtenha a saída do neurônio, onde f é a função de ativação do neurônio. (1) 1005 Onde uk é o valor da soma das entradas do neurônio k, m é o número de entradas, wkj é o peso da entrada j do neurônio k e xj é o valor da entrada j (HAYKIN, 2005). (2) Onde yk é a saída do neurônio k e bk é o valor do BIAS já multiplicado pelo seu peso. Como, usualmente, o valor do BIAS é definido como 1 (ou ainda -1), bk assume o valor de seu peso (wk0) (HAYKIN, 2005). Neste projeto, o tipo de rede utilizada é a Perceptron Multicamadas, que conta com neurônios que possuem a função de ativação (f) a degrau, definida pela equação (3). (3) Nesta arquitetura de RNA os neurônios são dispostos em múltiplas camadas, de forma que as saídas dos neurônios de uma dada camada servem de entrada para os neurônios da camada posterior, conforme pode ser visualizado na Figura 4. Figura 4: Representação geral das Multicamadas. Fonte: (SILVA, 2010). redes Perceptron Para realizar o treinamento da RNA, isto é, definir os pesos sinápticos dos neurônios de forma que esta apresente as saídas desejadas para um determinado conjunto de entradas, utilizase o algoritmo Backpropagation que, de forma geral, aplica uma correção nos pesos sinápticos dos neurônios através da retro propagação do erro, isto é, atribuindo a cada um a responsabilidade pelo erro apresentado na saída, partindo da camada de saída até a primeira camada de neurônios. Outra tecnologia de igual importância trata da visão computacional, mais especificamente representada pela biblioteca OpenCV. Tal biblioteca, desenvolvida pela Intel em 2000, permite manipulação de dados de imagens, manipulação de matrizes e vetores, desenvolvimento de rotinas de álgebra linear, estruturas de dados dinâmicas, desenvolvimento de algoritmos de processamento de imagem, análise estrutural, calibração de câmera, análise de movimento (tracking), reconhecimento de objetos, GUI Básica, e rotulagem de imagem. Sua principal vantagem é o fato de poder ser usada para programar em várias plataformas, como C/C++, Python, Visual Basic, Ruby, permitindo uma integração mais fácil com outros programas, evitando problemas de integração e facilitando no caso de desenvolvimento de softwares embarcados. Os processos de visão computacional, muitas vezes, necessitam de uma etapa de pré-processamento envolvendo o processamento de imagens. As imagens de onde queremos extrair alguma informação em alguns casos precisam ser convertidas para um determinado formato ou tamanho e precisam ainda ser filtradas para remover ruídos provenientes do processo de aquisição da imagem. Os ruídos podem aparecer de diversas fontes, como por exemplo, o tipo de sensor utilizado, a iluminação do ambiente, as condições climáticas no momento da aquisição da imagem, a posição relativa entre o objeto de interesse e a câmera. Os filtros são as ferramentas básicas para remover ruídos de imagens, neste caso, o ruído é aquele que aparece no processo de aquisição da imagem. Embora tenham sido utilizadas diversas linguagens de programação durante o desenvolvimento deste projeto, devese destacar o uso da linguagem Java, levando em conta que se trata de uma tecnologia bem estruturada. A tecnologia Java é usada para desenvolver aplicativos para uma ampla variedade de ambientes, de dispositivos consumidores a sistemas corporativos heterogêneos. Como qualquer linguagem de programação, a linguagem Java tem sua própria estrutura, regras de sintaxe e paradigma de programação. O paradigma de programação da linguagem Java baseia-se no conceito de OOP (Programação Orientada a Objetos), que os recursos da linguagem suportam. Estruturalmente, a linguagem Java começa com pacotes, que são mecanismos de namespace da linguagem Java. Dentro deles estão as classes e dentro das classes estão métodos, variáveis, constantes e mais. Quando se programa na plataforma Java, o código-fonte é escrito em arquivos .java e depois são compilados. O compilador verifica o código nas regras de sintaxe da linguagem e depois grava bytecode, conjunto de instruções destinadas a executar em uma Java Virtual Machine (JVM), em arquivos .class. A JVM é uma parte do software escrita especificamente para uma determinada plataforma. No tempo de execução, a JVM lê e interpreta arquivos .class e executa as instruções do programa na plataforma de hardware nativa para qual a JVM foi escrita. A JVM interpreta o bytecode como uma CPU interpretaria instruções de linguagem assembly. Desta forma, não é necessário recompilar o mesmo projeto para cada sistema operacional, basta que este sistema possua a JVM instalada. Isso garante que o sistema poderá ser executado em uma série de diferentes sistemas operacionais sem que haja maiores problemas de compatibilidade. C. Desenvolvimento do sistema Uma vez apresentados os processos pelos quais o sistema deve executar sua função, assim como as tecnologias que serão aplicadas na implementação deste propriamente dita, devemos definir como cada uma das tarefas será executada dentro do sistema. Para garantir uma melhor performance, capacidade de alteração da arquitetura e em função de algumas limitações físicas, o sistema é composto de vários programas distintos, com tarefas específicas, que se comunicam de forma a se comportarem como um único programa. 1005 O primeiro passo para o funcionamento do sistema é a captura e o devido tratamento das imagens através de uma câmera de vídeo, o que realizado pela biblioteca OpenCV para a linguagem C++, como já citado. Tal biblioteca define um tipo próprio para o armazenamento de imagens, que se assemelha a uma matriz multidimensional. As funcionalidades disponíveis são acessíveis por meio de funções também definidas. Sendo assim, foi desenvolvido um programa que faz uso de todas as funções necessárias para executar o tratamento sobre a imagem do usuário. Por não ser desenvolvido na linguagem Java, diferentemente da maioria do sistema, este módulo é composto de um executável independente, que se comunica através do protocolo TCP com o programa principal. De forma feral, o programa é responsável por capturar a imagem da câmera de vídeo e apresentar como saída os bytes que compõem apenas a imagem do olho direito do usuário (caso ambos os olhos estejam visíveis), já transformada em escala de cinza. É interessante notar que não há necessidade de especificar a câmera que será utilizada, caso o sistema possua mais de uma, ou caso esta seja substituída por outra, pois o método de captura procura escolher aquela definida por padrão. Além disso, não é necessário que a câmera possua uma resolução muito alta, não havendo grandes alterações no funcionamento em caso de troca da mesma por outra similar. Embora tenhamos citado apenas a comunicação entre o programa que realiza a captura de imagens e o que realiza o processamento da RNA, existem outros programas que compõem o sistema e que necessitam obter dados deste primeiro. Sendo assim, para que o programa que faz o tratamento da imagem possa se comunicar com os demais, foi estabelecido um protocolo de comunicação entre os dois programas, isto é, o que realiza a captura e o tratamento de imagens e o que fará uso dos dados de tais imagens. Essa forma de comunicação não é só necessária pelo uso de linguagens diferentes nos programas que compõem o sistema, mas também possibilita que exista um dispositivo apenas para a captura e tratamento das imagens, enquanto outro dispositivo realiza o processamento da RNA. A estrutura do programa que faz a captura das imagens foi, visando definir o protocolo de comunicação, definida de forma que este apenas realize o processamento do próximo frame de vídeo caso lhe seja requisitado. Para tanto, este fica à espera do recebimento de um byte. Caso o byte recebido tenha valor 0, o programa procede com a captura do frame de vídeo. Caso o valor seja diferente de 0, o programa é encerrado. Ao terminar o tratamento das imagens, o programa envia os dados pelo socket aberto ao programa que fez a requisição. Para que a rede neural possa realizar seu treinamento, é necessário que se obtenha amostras dos possíveis casos a serem identificados. Sendo assim, foi desenvolvido um programa, utilizando-se a linguagem JAVA, com o objetivo de realizar a coleta das amostras necessárias e armazená-las, de forma que o programa que processa a RNA possa fazer uso dessas amostras para o treinamento da rede. Basicamente, o programa pede ao usuário que olhe para uma das direções possíveis (esquerda, direita, cima, baixo ou centro) e então realiza sucessivas capturas através do programa de captura, enviando o byte 0 e aguardando até que exista o número determinado (o número de entradas para a RNA) de bytes disponíveis para a leitura no buffer do socket. Então o processo é repetido para todas as direções definidas, armazenando todos as amostras coletadas em uma sequência de vetores, adicionando N bytes ao final de cada um, onde N é o número se saídas da rede neural, indicando a saída esperada para as entradas neste vetor. Por fim, o processamento por parte da RNA deve ocorrer em duas fases, sendo a primeira de treinamento e a segunda de execução. Estes dos procedimentos ocorrem em uma mesma aplicação. No entanto, foi desenvolvida uma versão do programa que apenas executa a RNA. Essa versão visa dispositivos que não poderão realizar o treinamento, em função de sua baixa capacidade de processamento. Para uma melhor estruturação e desenvolvimento, a implementação da RNA foi realizada na linguagem Java, através da criação de três classes básicas: Neurônio, Camada e Rede. Cada classe armazena as informações da estrutura que representa e possui a implementação das funções que devem ser desempenhadas pela mesma através de métodos. Desta forma, a classe Camada faz uso da camada Neurônio e a classe Rede faz uso da classe Camada para desempenhar suas funções. O treinamento da RNA é realizado antes do início do funcionamento do sistema em si, uma vez que é necessário utilizar vários conjuntos de amostras para que se faça o treinamento, e não apenas do usuário do sistema. Isso é necessário para que a identificação seja a mais geral possível, sendo funcional com o maior número de pessoas. Caso a rede seja treinada com apenas uma pessoa, é possível que esta não reconheça corretamente a direção em que outra pessoa está olhando. Neste caso, a rede apenas decora as posições para uma determinada pessoa e não aprende de fato a reconhecer a direção em que uma pessoa está olhando (SILVA, 2010). Como esta é a parte mais que demanda maior número de cálculos, é necessária a execução em um sistema com grande capacidade de processamento, tal como um computador pessoal de médio porte. Desta forma, faz-se essencial que o sistema seja configurado previamente com a rede treinada, e, em função disso, que a rede seja capaz de realizar o reconhecimento com o maior número de pessoas possível. Como forma de contornar essa necessidade de processamento, foi adicionada uma funcionalidade que possibilita ao usuário realizar um treinamento específico para o mesmo, caso o sistema não o reconheça corretamente. Este último tipo de treinamento possui maior velocidade por utilizar um menor números de neurônios na RNA, visto que não é necessário processar uma quantidade grande de amostras, apenas as do usuário. Uma vez que a RNA esteja devidamente treinada, basta realizar uma chamada ao método de execução passando o vetor que representa a imagem do olho do usuário para que este retorne a direção identificada. Embora na prática seja utilizada apenas uma direção, é possível que seja identificada mais de uma (como cima e esquerda simultaneamente), o que geralmente ocorre se o usuário olhar em uma direção intermediária, entre as duas identificadas. IV. RESULTADOS E DISCUSSÃO DOS RESULTADOS Para melhor observar os resultados do funcionamento da interface, foi desenvolvida uma interface gráfica, que 1005 apresenta a direção na qual o usuário está olhando de acordo com a última leitura realizada. A interface em questão, em sua versão de quatro posições, é apresentada pela Figura 5. comunicar com a aplicação que processa a RNA através de comunicação Serial, esteja a aplicação sendo executada em qualquer tipo de hardware (computador pessoal ou Raspberry Pi, por exemplo). Foi ainda desenvolvida uma versão do sistema especialmente para que fosse executada em um Raspberry Pi, eliminando a necessidade do uso de um computador pessoal. Neste caso, a interface apresentada anteriormente foi substituída por um display de LED simples, que apresenta as informações de forma simplificada, como mostrado na Figura 7. Figura 5: Tela inicial da interface gráfica desenvolvida. Fonte: Arquivo do projeto Como é possível observar pela figura anterior, a interface já está configurada para trabalhar com uma aplicação de automação residencial, na qual o usuário seria capaz de controlar, de forma básica, os dispositivos de sua casa, o que inclui ações como ligar e desligar uma lâmpada ou controlar seu aparelho de televisão. Para a operação desta aplicação, o usuário deveria olhar para a esquerda ou direita para selecionar o dispositivo que deseja controlar e então, olhando para o quadrado inferior, seria capaz de alterar o estado em que se encontra o dispositivo selecionado, executando a ação que deseja. Para proporcionar uma visualização ainda melhor da aplicação de automação residencial, foi construída uma representação física em escala reduzida de uma residência comum, com diversos dispositivos instalados, sendo representados por LEDs e motores, como mostra a Figura 6. Figura 7: Display LCD em funcionamento. Fonte: Arquivo do projeto Embora tenha sido constatado que o Raspberry Pi é capaz de controlar a aplicação, atuando como dispositivo para os processos de controle, ficou claro que este apresenta uma performance muito inferior ao do computador pessoal, isto é, considerando a versão Raspberry Pi 1 Model B. Para uma melhor performance, é recomendado o uso de versões mais avançadas ou ainda de dispositivos similares, com maior capacidade de processamento. Complementarmente, foi desenvolvida um aplicação simples, na linguagem Java, capaz de se comunicar com o programa principal de controle do sistema, de forma a receber a informação sobre a direção na qual o usuário está olhando e a transformar em uma simulação de comando do teclado, mais especificamente da tecla direcional (“setas”) correspondente àquela direção. Esta aplicação permite ao usuário controlar, de forma primitiva, seu computador pessoal, possibilitando executar algumas ações básicas, como jogar um jogo simples, por exemplo. Acredita-se que, com certo nível de adaptação do ambiente do sistema operacional, seja possível realizar tarefas mais complexas, tais como digitar através de um teclado virtual e controlar o cursor do mouse. V. CONCLUSÕES Figura 6: Representação de residência desenvolvida. Fonte: Arquivo do projeto Neste caso, como dispositivo acionador da aplicação, foi utilizado uma placa Arduino, previamente programada para se Dados os objetivos estabelecidos e os requisitos para a interface em questão, é possível afirmar que o sistema desenvolvido pode ser utilizado por um usuário comum, se consideradas as limitações gerais do sistema, tais como disponibilidade de luz no ambiente e a eventual necessidade de um novo treinamento no primeiro uso da interface. Após a realização dos principais testes, foi possível ter uma dimensão das dificuldades que impedem um maior 1005 aprimoramento da eficiência do sistema como um todo. Em suma, é necessário estabelecer um equilíbrio entre uma RNA mais geral, capaz de identificar vários usuários e, com isso, demandar maior capacidade de processamento e perda de eficiência para cada usuário individualmente, ou uma RNA mais específica, que é capaz de identificar de forma muito eficiente e utilizando poucos recursos computacionais, poucos ou apenas um usuário. Com estes resultados em mãos, é possível adequar a capacidade de identificação de interface ao tipo de aplicação para a qual se deseja utilizá-la, seja alterando o tamanho e complexidade da RNA utilizada, ou ainda o número ou tipo de amostras utilizadas no treinamento desta. Por fim, ainda se faz necessário o desenvolvimento de novas aplicações para serem utilizadas em conjunto com a interface. Este desenvolvimento pode ainda, até certo ponto, colaborar para o aprimoramento dos parâmetros utilizados no sistema, uma vez que será possível observar melhor as verdadeiras necessidades (como agilidade, precisão e segurança) requeridas para uma interface deste tipo. VI. REFERÊNCIAS BALUJA, S; POMERLEAU, D. Non-Intrusive Gaze Tracking Using Artificial Neural Networks. School of Computer Science Carnegie Mellon University. Pittsburg, PA, 1994. BARBOZA, D, P, S. Estudo da Biblioteca OpenCV. Disponível em: < http://monografias.poli.ufrj.br/monografias/ monopoli10001999.pdf> Acesso: 18 de maio de 2016. BAUER, S. M. Assistive technology Training Online Project. University at Buffalo, Center for Assistive Technology, 2005. Disponível em: http://atto.buffalo.edu/registered/ATBasics/foundation/intro/int rotrends.php. Acesso em: 04 abr. 2016. HAYKIN, S. Neural Networks: A Comprehensive Foundation. Pearson Prentice Hall, Singapura, 2005. 2° edição. IBM. Introdução à programação Java, Parte 1: Fundamentos da linguagem Java. Disponível em: http://www.ibm.com/developerworks/br/java/tutorials/jintrotojava1/. Acesso em: 16 mai. 2016. JAVA. Obtenha informações sobre a Tecnologia Java. Disponível em: <https://www.java.com/pt_BR/about/> Acesso em: 16 mai. 2016. KOMOGORTSEV, O; SEWELL, W. Real-Time Eye Gaze Tracking With an Unmodified Commodity Webcam Employing a Neural Network. Texas State University-San Marcos Department of Computer Science. San Marcos, TX. ACM Conference on Human Factors in Computing Systems 2010. MARENGONI, M; STRINGHINI, D. Tutorial: Introdução à Visão Computacional usando OpenCV. Disponível em: <https://www.dropbox.com/s/em6e7jv6zavijrb/Tutorial%20Op encv.pdf?dl=0+> Acesso em: 18 mai. 2016. OPENCV. OpenCV Documentation. Disponível em: http://docs.opencv.org/. Acesso em: 17 jan. 2016. RASPBERRY. Raspberry Pi. Disponível em: <https://www.usinainfo.com.br/raspberry-pi-395>. Acesso em 14 de maio de 2016.