• Nenhum resultado encontrado

Autenticação de usuário em dispositivos móveis usando gestos e redes neurais recorrentes

N/A
N/A
Protected

Academic year: 2021

Share "Autenticação de usuário em dispositivos móveis usando gestos e redes neurais recorrentes"

Copied!
85
0
0

Texto

(1)

Universidade de Brasília

Instituto de Ciências Exatas

Departamento de Ciência da Computação

Autenticação de Usuário em Dispositivos Móveis

usando Gestos e Redes Neurais Recorrentes

Luiz Henrique Campos Barboza

Monografia apresentada como requisito parcial para conclusão do Bacharelado em Ciência da Computação

Orientador

Prof. Dr. Marcus Vinicius Lamar

Brasília

2016

(2)

Universidade de Brasília — UnB Instituto de Ciências Exatas

Departamento de Ciência da Computação Bacharelado em Ciência da Computação

Coordenador: Prof. Dr. Rodrigo Bonifácio de Almeida

Banca examinadora composta por:

Prof. Dr. Marcus Vinicius Lamar (Orientador) — CIC/UnB Prof. Dr. Alexandre Zaghetto — CiC/UnB

Msc. Juarez Paulino da Silva Jr. — Supremo Tribunal Federal (STF)

CIP — Catalogação Internacional na Publicação

Barboza, Luiz Henrique Campos.

Autenticação de Usuário em Dispositivos Móveis usando Gestos e Redes Neurais Recorrentes / Luiz Henrique Campos Barboza. Brasília : UnB, 2016.

84 p. : il. ; 29,5 cm.

Monografia (Graduação) — Universidade de Brasília, Brasília, 2016. 1. redes neurais, 2. reconhecimento de gestos, 3. autenticação,

4. biometria, 5. dispositivos móveis CDU 004

Endereço: Universidade de Brasília

Campus Universitário Darcy Ribeiro — Asa Norte CEP 70910-900

(3)

Universidade de Brasília

Instituto de Ciências Exatas

Departamento de Ciência da Computação

Autenticação de Usuário em Dispositivos Móveis

usando Gestos e Redes Neurais Recorrentes

Luiz Henrique Campos Barboza

Monografia apresentada como requisito parcial para conclusão do Bacharelado em Ciência da Computação

Prof. Dr. Marcus Vinicius Lamar (Orientador) CIC/UnB

Prof. Dr. Alexandre Zaghetto Msc. Juarez Paulino da Silva Jr.

CiC/UnB Supremo Tribunal Federal (STF)

Prof. Dr. Rodrigo Bonifácio de Almeida

Coordenador do Bacharelado em Ciência da Computação

(4)

Dedicatória

(5)

Agradecimentos

Agradeço primeiramente ao meu Senhor e Salvador Jesus por ter me dado vida e saúde. Agradeço aos meus pais, Eraldo e Celi, e meu irmão Estêvão pelo apoio, incentivo e compreensão ao longo de todos os anos da minha vida acadêmica. Também agradeço ao meu professor e orientador Marcus Vinícius Lamar pelo aprendizado e pelo apoio em projetos acadêmicos e especialmente neste projeto. Deixo agradecimentos as pessoas que contribuíram na coleta de dados de movimentos ao longo de toda a pesquisa, Andreia, Ase-nate, Giovanna, Iran, Josemar, Josué, Juninho, Paulinho, Ronaldo e Thatiane. Obrigado aos meus amigos de curso que participaram comigo de momentos marcantes durante esta jornada, desde momentos divertidos até momentos extremamente tensos, noites acordadas estudando e finais de semana no laboratório. Valeu a pena.

(6)

Resumo

O uso da biometria na autenticação de usuários é cada vez mais difundido, tendo em vista a quantidade de dados sensíveis armazenados digitalmente. Grande parte da população possui smartphones com acelerômetro e giroscópio implementados em seu hardware que podem fornecer informações biométricas de uma pessoa que executa um gesto segurando o smartphone. Este trabalho propõe a implementação de redes neurais recorrentes para a distinção/identificação de usuários que executaram um mesmo gesto. Essa implemen-tação será usada em um sistema de autenticação de usuários baseado em gestos. Testes utilizando gestos simples que podem ser imitados com facilidade são feitos para verificar a eficácia da solução proposta.

Palavras-chave: redes neurais, reconhecimento de gestos, autenticação, biometria,

(7)

Abstract

Authentication systems based on biometrics are increasingly widespread together with the high amount of information stored digitally. Smartphones with a built-in accelerometer and gyroscope are used by most of World’s population and offer biometric information about a person that perform a gesture holding the mobile device. This work proposes the implementation of artificial recurrent neural networks to identify/distinguish between users that performed a gesture. The implementation is used in an authentication system based on gestures. We ran tests using simple gestures that can be easily imitated to verify the performance of the proposed solution.

Keywords: artificial neural networks, gesture recognition, authentication, biometrics,

(8)

Sumário

1 Introdução 1 1.1 Motivação . . . 2 1.2 Problema . . . 2 1.3 Hipótese . . . 2 1.4 Objetivos . . . 3 1.5 Organização . . . 3 2 Revisão Teórica 4 2.1 Segurança do acesso e biometria . . . 4

2.2 Sistema iOS . . . 5 2.2.1 Linguagem de Programação . . . 6 2.2.2 Model-View-Controller . . . 6 2.3 Sensores . . . 7 2.3.1 Acelerômetro . . . 8 2.3.2 Giroscópio . . . 9

2.3.3 Dados combinados - Atitude . . . 10

2.4 Redes Neurais . . . 12

2.4.1 O Neurônio . . . 12

2.4.2 Funções de Ativação . . . 14

2.4.3 O Processo de Aprendizado . . . 17

2.4.4 Arquiteturas de Redes Neurais . . . 18

2.4.5 Rede Neural Recorrente de Elman . . . 20

2.5 O Treinamento em redes multilayer perceptrons . . . 21

2.5.1 Algoritmo Error Back-Propagation . . . 22

2.5.2 Algoritmo Levenberg-Marquardt . . . 23

3 Sistema Proposto 24 3.1 Ambiente de desenvolvimento . . . 24

(9)

3.3 Descrição do sistema . . . 26

3.3.1 Implementação para aquisição dos dados . . . 27

3.3.2 Implementação para utilização e autenticação . . . 32

4 Resultados Obtidos 39 4.1 Gestos . . . 39

4.1.1 A complexidade do problema . . . 40

4.1.2 Critérios para escolha dos gestos . . . 45

4.2 Aquisição dos dados . . . 45

4.3 Treinamento . . . 46

4.4 Abordagem 1 - Quatro classes . . . 47

4.4.1 Círculo . . . 47

4.4.2 Triângulo . . . 50

4.4.3 Avaliação da acurácia: Tabela de confusão . . . 52

4.5 Abordagem 2 - Duas classes . . . 53

4.5.1 Círculo . . . 53

4.5.2 Triângulo . . . 57

4.6 Resultados para as abordagens . . . 60

4.7 Implementação . . . 61 4.7.1 Desempenho da implementação . . . 62 4.7.2 Autenticação na implementação . . . 64 4.8 Trabalhos relacionados . . . 66 5 Conclusão 69 5.1 Trabalhos Futuros . . . 70 Referências 71

(10)

Lista de Figuras

2.1 Model-View-Controller. . . 7

2.2 Eixos em um celular. . . 9

2.3 Atitude do dispositivo. . . 10

2.4 Modelo não-linear de um neurônio. . . 13

2.5 Modelo de um neurônio contendo o Bias como uma sinapse. . . . 13

2.6 Função Threshold. . . 15

2.7 Função Logísitca. . . 16

2.8 Função Tangente Hiperbólica. . . 17

2.9 Rede com camada única de neurônios. . . 18

2.10 Rede Neural com uma camada escondida. . . 19

2.11 Rede Neural Recorrente de Elman. . . 21

3.1 Xcode. . . 25

3.2 Representação de uma Rede Neural Recorrente Elman no MATLAB. . . . 26

3.3 Tela do aplicativo. . . 27

3.4 Diagrama de blocos do sistema implementado para aquisição dos dados. . . 28

3.5 Inicialização do Core Motion Manager. . . 28

3.6 Definição da frequência de aquisição dos sensores. . . 29

3.7 Criação do path para o subdiretório de arquivos. . . . 29

3.8 Criação dos arquivos para a escrita dos dados dos sensores. . . 29

3.9 Início da aquisição de dados do acelerômetro e do giroscópio. . . 30

3.10 Inicialização do timer para ativar o método getData(). . . . 30

3.11 Destruição do timer. . . . 30

3.12 Fim da aquisição de dados do acelerômetro e do giroscópio. . . 30

3.13 Dados do acelerômetro sendo atribuídos a Labels. . . . 31

3.14 Dados do acelerômetro sendo atribuídos a barras de progresso. . . 31

3.15 Dados dos sensores escritos nos arquivos. . . 32

(11)

3.19 Inicialização de um neurônio da camada de saída. . . 35

3.20 Dados do acelerômetro atribuídos às entradas da rede neural. . . 36

3.21 Método summingFunction de um neurônio da camada escondida. . . 36

3.22 Neurônios da camada de contexto recebem a saída de neurônios da camada

escondida. . . 37

3.23 Neurônios da camada de saída recebem a saída dos neurônios da camada

escondida. . . 37

4.1 Gestos com o celular para a autenticação. . . 40

4.2 Gráfico dos dados do acelerômetro, atitude e giroscópio de 3 gestos de um

mesmo usuário para o círculo e triângulo. . . 42

4.3 Gráfico dados de um círculo executado como gesto por dois usuários

dife-rentes para o acelerômetro, atitude e giroscópio. . . 43

4.4 Gráfico dados de um triângulo executado como gesto por dois usuários

diferentes para o acelerômetro, atitude e giroscópio. . . 44

4.5 Treinamento da rede Elman no MATLAB. . . 46

4.6 Taxas de acerto para cada uma das 7 estruturas possíveis da camada de

entrada. . . 48

4.7 Taxas de acerto para estruturas da camada escondida testadas. . . 49

4.8 Taxas de acerto para cada uma das 7 estruturas possíveis da camada de

entrada. . . 50

4.9 Taxas de acerto para estruturas da camada escondida testadas. . . 51

4.10 Taxas de acerto para cada uma das 7 estruturas possíveis da camada de

entrada. . . 54

4.11 Comparativo das taxas de acerto antes e depois de o tamanho dos conjuntos

de treino das duas classes serem igualados. . . 55

4.12 Taxas de acerto para estruturas da camada escondida testadas. . . 56

4.13 Taxas de acerto para cada uma das 7 estruturas possíveis da camada de

entrada. . . 58

4.14 Taxas de acerto para estruturas da camada escondida testadas utilizando

dados do acelerômetro na camada de entrada. . . 59

4.15 Taxas de acerto para estruturas da camada escondida testadas utilizando

dados do acelerômetro, do giroscópio e da atitude na camada de entrada. . 60

4.16 Desempenho das implementações. . . 63

4.17 Taxas de falso positivo e falso negativo para as redes neurais implementadas

(12)

Lista de Tabelas

2.1 Especificações do Bosch BMA280 e do InvenSense MPU-6500. . . 9

4.1 Tabela de confusão para o círculo como gesto. . . 52

4.2 Tabela de confusão para o triângulo como gesto. . . 52

4.3 Redes neurais implementadas. . . 62

4.4 Resultados de autenticação do sistema proposto. . . 66

4.5 Resultados de autenticação. . . 67

(13)

Capítulo 1

Introdução

Ao longo da história, o modo como o ser humano interage com o ambiente ao seu redor foi evoluindo constantemente. Principalmente a partir da Segunda Revolução Industrial, o homem passou a concentrar mais esforços na busca de meios que facilitassem e agili-zassem tarefas antes estritamente manuais ou tarefas que dependessem de uma constante monitoração humana para checar alterações, estados críticos e situações de risco. Muitas destas tarefas deixaram de ser executadas exclusivamente pelo homem, passando a ser realizadas de forma autônoma com o auxílio de sensores.

A Segunda Guerra mundial alavancou a demanda por sensores e impulsionou avanços na tecnologia utilizada. O radar, um exemplo de sensor de movimento, já havia sido

inventado há algumas décadas. Ainda que não desenvolvido por completo, passou a

ser utilizado para reduzir a desvantagem contra ataques aéreos, permitindo a detecção de aviões no espaço aéreo ao seu alcance. Assim como o radar, outras tecnologias de sensores que foram desenvolvidas ou aprimoradas para o uso militar nos tempos da guerra começaram a ter seu uso voltado para fins não-militares. Samuel Bagno, em meados do século XX, desenvolveu um sensor de movimento baseado nos princípios de um radar. O sensor criava ondas ultrassônicas em um ambiente e detectava o movimento de uma pessoa[1].

Outros dispositivos historicamente conhecidos também passaram a ser usados como sensores para detecção de movimento em diversas aplicações. Acelerômetros e giroscópios são dispositivos antigos que vêm sendo amplamente usados na indústria eletrônica. Sen-sores como estes são desenvolvidos na forma de MEMS (Microelectromechanical systems) e usados em sistemas embarcados.

Smartphones, Tablets, consoles portáteis e controles de consoles domésticos possuem

acelerômetros e giroscópios e são utilizados para diversas finalidades, desde entretenimento a monitoramento de saúde. Jogos portáteis que utilizam informações do acelerômetro e do giroscópio na jogabilidade se tornaram comuns desde no fim dos anos 2000 [2]. As

(14)

informações destes sensores também são usadas em pesquisas para o monitoramento de pessoas com disfunções motoras e na avaliação de progressos de tratamentos [3].

Uma aplicação que vem sendo estudada através do uso de acelerômetros é a autentica-ção de usuários. Existem estudos [4, 5, 6] que mostram que é possível fazer autenticaautentica-ção de usuário de modo seguro, sem o uso de impressões digitais ou senhas para evitar a exposição de informações sensíveis, utilizando o movimento do braço enquanto o usuário segura um dispositivo contendo um acelerômetro. Neste trabalho, um smartphone será utilizado para coletar os dados adquiridos pelo movimento do braço dos usuários e dife-renciar estes usuários de modo que, na execução de um mesmo movimento, o sistema seja capaz de indicar quem o executou.

1.1

Motivação

A motivação da realização deste trabalho é a pesquisa e a experimentação de uma nova forma de autenticação de usuários com um smartphone que possa ser facilmente utilizada no dia-a-dia e que abra caminho para novas novas aplicações de forma eficaz e segura. A automação residencial feita através de gestos é o principal fator de motivação para a realização deste trabalho.

1.2

Problema

Sistemas de autenticação em smartphones estão utilizando informações que podem ser sensíveis, como senhas e até mesmo impressões digitais. Informações como essas, se des-cobertas ou vazadas, podem comprometer pessoas. Outras alternativas, como a utilização de gestos na autenticação, vêm sendo estudadas, mas em sua maioria, esses sistemas de autenticação baseados em gestos têm o objetivo de classificar e identificar gestos, e não a pessoa que executou o gesto.

1.3

Hipótese

É possível criar um sistema de autenticação de usuário, executado em tempo real, baseado em gestos realizados com o braço do usuário, usando um dispositivo portátil (smartphone) de modo a distinguir/identificar o usuário que executou um gesto previamente cadastrado.

(15)

1.4

Objetivos

O objetivo geral deste trabalho é propor um sistema de autenticação de usuário baseado no movimento do braço usando machine learning com o uso de redes neurais recorrentes. O sistema deve ser capaz de distinguir o usuário que realizou o movimento com uma precisão de no mínimo 95%.

Objetivos Específicos

Dentro do objetivo do trabalho, podem ser elencados os seguintes objetivos específicos: • Estudo e levantamento do estado-da-arte em autenticação biométrica por gestos. • Definição e treinamento de estruturas de redes neurais recorrentes.

• Implementação das redes neurais em dispositivo móvel celular.

• Testes para avaliação de desempenho do sistema de autenticação em aplicação real.

1.5

Organização

Este trabalho está dividido em cinco capítulos. A contextualização e introdução do pro-blema, assim como a hipótese e os objetivos do projeto são apresentados neste capítulo de Introdução. No Capítulo 2, são apresentadas as fundamentações teóricas e os conceitos que são utilizados neste projeto. No Capítulo 3, são descritos os processos envolvidos na elaboração e na implementação do sistema de autenticação baseado em gestos utilizando redes neurais recorrentes. No Capítulo 4, o sistema é experimentado em cenários diferen-tes, comparando os resultados obtidos com estudos similares. Finalmente, no Capítulo 5, são formuladas as conclusões deste projeto.

(16)

Capítulo 2

Revisão Teórica

Este capítulo apresenta a base teórica dos principais tópicos e conceitos utilizados no desenvolvimento deste projeto. Uma breve apresentação de conceitos fundamentais sobre biometria é apresentada. Em seguida, o funcionamento de aplicativos no sistema iOS é brevemente exposto. Logo após é descrito o funcionamento do acelerômetro e do giroscópio e a forma como os dados da atitude do dispositivo são obtidos. Por último, uma revisão sobre os fundamentos de redes neurais é feita priorizando as estruturas relevantes à solução proposta neste projeto.

2.1

Segurança do acesso e biometria

Biometria é a ciência da identificação de um indivíduo baseado em suas características físicas, químicas ou comportamentais [7].

A identificação biométrica é largamente utilizada em instalações que exigem alta se-gurança e na aplicação da lei há décadas. Por exemplo, o uso de impressões digitais em documentos de identidade são utilizados até hoje para diferenciar indivíduos. Alguns estabelecimentos utilizam reconhecimento facial, reconhecimento do padrão da íris nos olhos, um dos métodos mais confiáveis de biometria, ou até mesmo reconhecimento do padrão do caminhar de uma pessoa para verificação e identificação de indivíduos. Além desses métodos, há ainda o trato biométrico pela voz, formato auricular, formato da mão, padrão de digitação, padrão venoso e assim por diante.

Atualmente, além da ampla utilização da biometria em setores de segurança, o mundo caminha para o uso da biometria para identificação e acesso de pessoas no âmbito de bens de consumo. Fabricantes investem cada vez mais em scanners de impressões digitais para automóveis, laptops, e smartphones, ou mesmo o uso de scanners de íris em caixas

(17)

eletrô-Segundo os autores Anil Jain, Ruud Bolle, Sharath Pankanti [8], qualquer caracterís-tica humana, seja física ou comportamental, pode ser usada na identificação biométrica se possuir as seguintes propriedades:

1. Universalidade

Significa que cada ser humano deve apresentar a característica a ser utilizada na identificação biométrica.

2. Singularidade

Indica que duas pessoa não podem apresentar as mesmas características. 3. Permanência

Significa que a característica deve ser invariante com o tempo. 4. Mensurabilidade

A característica deve ser mensurada quantitativamente. 5. Performance

Indica fatores que influenciam na acurácia da identificação. 6. Aceitabilidade

Indica até que ponto as pessoas estão dispostas a aceitar o sistema biométrico. 7. Evasão

Indica o quão fácil é enganar o sistema através de fraudes.

São esses sete fatores, aliados ao preço do dispositivo, que determinam os rumos da adoção da biometria como uma solução de segurança que ultrapassa as barreiras de uma senha comum.

2.2

Sistema iOS

O sistema iOS [9] é o sistema operacional para dispositivos móveis da Apple que está presente em todos os iPhones e iPads. Foi lançado em 2007 originalmente para o primeiro iPhone sob o nome de iPhone OS e desde então passou por inúmeras modificações e melho-rias. A tendência se mostra a abertura cada vez maior de funcionalidades do iOS para o programador, liberando kits de desenvolvimento para funções antes exclusivas do sistema operacional. A cada nova versão, os programadores ganham acesso a mais funcionalidades para disponibilizar recursos nativos do sistema operacional em seus aplicativos.

(18)

2.2.1

Linguagem de Programação

A linguagem de programação utilizada na criação de aplicativos no iOS é o Objective-C [10]. O Objective-Objective-C foi criado no início dos anos 80 como a principal linguagem dos sistemas operacionais da NeXT, de onde o iOS e o macOS são derivados [11]. O

fra-mework de desenvolvimento é chamado Cocoa, e pode ser usado com outras linguagens

de programação também como Python, Java ou Ruby.

O Objective-C não é uma linguagem proprietária da Apple, mas é comumente atrelada à empresa já que o macOS e o iOS são os sistemas operacionais mais populares que

usam esta linguagem de programação. Objective-C foi inovador, poderoso e de fácil

uso na década de 90, porém muitas linguagens atualmente proporcionam um ambiente mais produtivo aos desenvolvedores. Além disso, pode ser difícil para desenvolvedores de outras plataformas e linguagens distantes do C conseguirem se adaptar rapidamente ao Objective-C [12].

Pensando nisso, a Apple iniciou o desenvolvimento de uma linguagem 100% compatível com os frameworks existentes de Objective-C e agregando inovações de linguagens de programação criadas nos últimos 20 anos, aproveitando computadores mais poderosos disponíveis atualmente. Então, em Junho de 2014, a Apple lançou a linguagem Swift [13], que permitiu a criação de aplicativos para todos os sistemas operacionais da Apple, tvOS, iOS, macOS, em uma só linguagem de programação, convivendo junto com o Objective-C por enquanto, mas entregando mais facilidades aos desenvolvedores.

2.2.2

Model-View-Controller

No desenvolvimento de aplicativos iOS, se utiliza o Design Pattern MVC

(Model-View-Controller). Esse é um Design Pattern antigo que beneficia programas orientados a

obje-tos, que passam a ser mais facilmente extensíveis do que programas orientados a objetos que não são baseados em MVC.

O MVC dá a objetos dentro da aplicação um papel dentre model, view, controller e define a maneira como eles se comunicarão entre si. Objetos com papéis diferentes dentro da aplicação se comunicam através de limites abstratos que separam cada uma das três camadas. Por exemplo, o MVC define como um objeto na camada model se comunica com um objeto na camada view.

O papel de objetos em cada camada é descrito a seguir [14].

(19)

Figura 2.1: Model-View-Controller (Fonte: [14]).

da aplicação deve ser parte também de objetos na camada model assim que os dados forem carregados na aplicação.

View

Um objeto nesta camada é um objeto visível ao usuário, podendo também interagir a ações. O grande propósito de objetos na view é de mostrar os dados da camada model, permitindo ao usuário a edição destes dados.

Controller

Um objeto nesta camada age como um intermediário entre uma ou mais views de uma aplicação e seus respectivos models. Ele interpreta ações do usuário feitas através da camada view e passa os novos dados a camada model. Quando o model muda, ele passa os novos dados para a view para serem visualizados.

2.3

Sensores

O lançamento do iPhone mudou completamente o rumo do desenvolvimento de software para plataformas móveis e também causou um grande impacto no hardware dos

smartpho-nes que viriam a existir a partir de então. Os desenvolvedores tinham certeza de que seus

aplicativos iriam rodar em todos os dispositivos iPhone, algo difícil de se imaginar nos outros smartphones disponíveis no mercado na época. Entretanto, a cada nova versão do iPhone, mudanças no hardware foram feitas de modo a oferecer mais possibilidades aos desenvolvedores, como a adição de giroscópio, magnetômetro, GPS e funcionalidades de vídeo.

(20)

Neste projeto foram utilizados dois sensores disponíveis no hardware do iPhone, o acelerômetro e o giroscópio. A partir do iOS 4, os desenvolvedores tiveram acesso ao

fra-mework Core Motion [15]. Este frafra-mework permite que aplicativos recebam dados tanto

do giroscópio, presente em todos os dispositivos desde o iPhone 4, quanto do acelerômetro. Com a classe CMMotionManager, é possível receber dados do acelerômetro, do giros-cópio ou dados combinados do acelerômetro e do girosgiros-cópio em um intervalo de tempo definido pelo desenvolvedor. O Core Motion fornece medições precisas da atitude do dis-positivo, a rotação do disdis-positivo, removendo ruídos vindos do giroscópio, e da aceleração que o usuário dá ao dispositivo [16].

Nas próximas subseções estão descritos os sensores utilizados e a forma como os dados são adquiridos no iOS.

2.3.1

Acelerômetro

Um acelerômetro é um dispositivo eletromecânico que mede forças de aceleração. Tais forças podem ser estáticas como a aceleração gravitacional, ou dinâmicas que sejam cau-sadas por uma movimentação ou vibração do acelerômetro. Um acelerômetro mede as forças nos eixos cartesianos X, Y e Z, porém não mede a rotação, o que fica a cargo do giroscópio.

Tipicamente, os acelerômetros são feitos de múltiplos eixos. Dois eixos determinam a maioria dos movimentos bidimensionais e um terceiro eixo dando a opção de determinar um posicionamento em uma terceira dimensão, conforme mostrado na Figura 2.2. Carros, por exemplo, usam acelerômetros com dois eixos para determinar momento de impacto. Já dispositivos móveis utilizam acelerômetros de três eixos, dando a estes dispositivos uma grande sensibilidade a medições de aceleração.

(21)

Figura 2.2: Eixos em um celular (Fonte: [17]).

O uso do acelerômetro em dispositivos móveis é dos mais variados. Jogos mobile utilizam os recursos do acelerômetro para detectar inclinação ou alguma movimentação. No iPhone, o acelerômetro mede a aceleração linear do dispositivo. O iPhone 6, dispositivo utilizado neste projeto, utiliza dois acelerômetros, o BOSCH BMA280 de três eixos e o InvenSense MP67B de seis eixos feito exclusivamente para o iPhone 6 baseado no MPU-6500 e que contém um acelerômetro e um giroscópio [18].

Tabela 2.1: Especificações do Bosch BMA280 e do InvenSense MPU-6500.

Parâmetro Bosch BMA280 InvenSense MPU-6500 Unidade

Intervalo da Aceleração ±2, ±4, ±8, ±16 ±2, ±4, ±8, ±16 g

Frequência de dados 2000 4000 Hz

A Tabela 2.1 [19, 20] mostra o intervalo da aceleração e a frequência máxima de dados dos dois chips presentes no iPhone 6. As frequências máximas de aquisição de dados de 2000Hz e 4000Hz dos sensores permitem adquirir dados dos movimentos realizados com o smartphone com uma grande quantidade de detalhes.

2.3.2

Giroscópio

O giroscópio é um dispositivo que detecta a velocidade angular aplicada a um dispositivo. Um giroscópico eletrônico no hardware de um celular geralmente é utilizado para funções

(22)

de reconhecimento de gestos, além de ajudar a determinar a posição e orientação do dispositivo.

A partir do iPhone 4, todos os modelos de iPhones possuem um giroscópio no hardware. O uso do giroscópio pode ser observado em um jogo de tiro em primeira pessoa no celular, permitindo que o ato de olhar em uma direção no jogo aconteça simplesmente com o

usuário movendo o celular. A visão do jogador na tela acompanha o movimento do

celular, não necessitando que o usuário deslize o dedo na tela.

Como mencionado na Seção 2.3.1, o modelo do giroscópio MEMS

(Microelectrome-chanical systems) presente no iPhone 6 é o InvenSense MP67B, uma variação do modelo

MPU-6500 feita exclusivamente para a Apple. Ele opera com uso de uma placa chamada "massa de prova", que oscila quando um sinal é aplicado a placas capacitivas. Quando o dispositivo é rotacionado, a massa de prova é deslocada nas direções X, Y e Z e um processador ASIC (Application Specific Integrated Circuits) mede a variação da capaci-tância das placas. Essa variação é usada para detectar a velocidade angular aplicada ao dispositivo.

2.3.3

Dados combinados - Atitude

O uso combinado do giroscópio e do acelerômetro permite medir o movimento do dis-positivo em um sistema inercial [16]. Os dados adquiridos desta combinação através do

framework Core Motion permitem conhecer a atitude do dispositivo, ou seja, a

orienta-ção do iPhone relativa a um frame de referência através da rotaorienta-ção em torno dos ângulos Eulerianos φ, θ e ψ, ou roll, pitch, yaw respectivamente como são chamados no framework e apresentados na Figura 2.3.

(23)

O cálculo da atitude é feito utilizando quatérnios [21]. Quatérnios são definidos [22] pelas equações q = [q0 q1 q2 q3]T (2.1) e |q|2 = q2 0+ q 2 1+ q 2 2 + q 2 3 = 1 (2.2)

O quatérnio se associa à rotação em torno de um eixo pelas expressões

q0 = cos(α/2)

q1 = sin(α/2) cos(βx)

q2 = sin(α/2) cos(βy)

q3 = sin(α/2) cos(βz),

(2.3)

onde α é o valor em radianos da rotação de um ângulo e cos(βx), cos(βy) e cos(βz) são os

cossenos de direção localizando os eixos de rotação. A conversão entre quatérnios para os ângulos Eulerianos é dado por [22]

      φ θ ψ       =       atan2(2(q0q1+ q2q3), 1 − 2(q12+ q22)) arcsin(2(q0q2− q3q1)) atan2(2(q0q3+ q1q2), 1 − 2(q22+ q32))       , (2.4)

onde a função atan2 corresponde a

atan2(y, x) =                                  arctan(yx) se x > 0, arctan(yx) + π se x < 0 e y ≥ 0, arctan(yx) − π se x < 0 e y < 0, +π 2 se x = 0 e y > 0,π 2 se x = 0 e y < 0, indefinido se x = 0 e y = 0. (2.5)

As funções arctan e arcsin implementadas em linguagens de programação só geram re-sultados entre −π/2 e π/2, e para as três rotações entre −π/2 e π/2 uma não obtém todas as possíveis orientações. Para gerar todas a orientações, é necessário substituir a função

(24)

2.4

Redes Neurais

O conceito de rede neural, ramo de estudo em inteligência artificial, é inspirado em como o cérebro humano executa uma determinada tarefa ou função de interesse. Assim como o cérebro possui neurônios, uma rede neural também possui neurônios artificiais que são as unidades de processamento desse grande e massivo processador que tem a capacidade de armazenar conhecimento experimental e torná-lo disponível.

Uma rede neural pode ser comparada ao cérebro em dois aspectos [23]:

1. O conhecimento é adquirido pela rede através de um processo de aprendizado. 2. As conexões entre neurônios, conhecidas como sinapses (synaptic weights), são

usa-das para guardar o aprendizado adquirido.

Durante a fase de aprendizado da rede neural, é utilizado um algoritmo de aprendizado que tem como função alterar os pesos das sinapses para obter o desenho otimizado para as saídas experimentais.

2.4.1

O Neurônio

O neurônio é a unidade fundamental de processamento da rede neural e possui três ele-mentos básicos [23]:

1. Um conjunto de sinapses, que são conexões entre neurônios, onde cada sinapse tem um peso relacionado. Como mostrado na Figura 2.4, um neurônio k recebe um sinal

xj através da sinapse j. Esse sinal é então multiplicado pelo peso da sinapse wkj.

2. Um somador para somar os sinais de entrada, fazendo uma combinação linear destes

sinais já ponderados pelos pesos das sinapses, gerando o potencial de ativação vk.

(25)

x1 x2 xm .. . ... Bias bk wk1 wk2 wkm Pesos sinápticos Entradas P ϕ(·) Função de ativação yk Saída vk

Figura 2.4: Modelo não-linear de um neurônio.

No neurônio k mostrado na Figura 2.4 também existe um parâmetro externo chamado

Bias que pode aumentar ou diminuir o potencial de ativação que será utilizado como

entrada da função de ativação. É possível formular um modelo de neurônio equivalente

matematicamente em que o Bias se torna uma nova sinapse wk0 = bk com o valor de

entrada fixo x0 = +1 como mostra a Figura 2.5.

x0 = +1 x1 x2 xm .. . ... wk0 wk1 wk2 wkm wk0 = bk (Bias) Pesos sinápticos (Bias incluso) Entradas P ϕ(·) Função de ativação yk Saída vk

Figura 2.5: Modelo de um neurônio contendo o Bias como uma sinapse.

(26)

vk= m X j=0 wkjxj (2.6) e yk = ϕ(vk), (2.7)

onde x1, x2, ..., xm são os sinais de entrada; wk1, wk2, ..., wkm são os pesos sinápticos do

neurônio, vk é o potencial de ativação, ϕ(·) a função de ativação e yk a saída do neurônio

k.

2.4.2

Funções de Ativação

A função de ativação é sinalizada por ϕ(v) onde v é o potencial de ativação do neurônio que representa a soma do Bias com o resultado da combinação linear dos sinais de entrada. O papel da função de ativação em uma rede neural é produzir um limite de decisão não-linear por meio de combinações não-lineares das entradas ponderadas pelos pesos, definindo assim o sinal de saída do neurônio. Vamos listar dois dos principais tipos de funções de ativação [23].

Função Threshold

Essa função também é conhecida como Função Degrau e é descrita matematicamente por

ϕ(v) =      1, se v ≥ 0 0, se v < 0 (2.8)

A Função Threshold limita a saída do neurônio no intervalo [0,1] de acordo com a Equa-ção 2.8. A Figura 2.6 demonstra o comportamento da funEqua-ção.

(27)

-10 -8 -6 -4 -2 0 2 4 6 8 10 v -0.5 0 0.5 1 1.5 ϕ (v )

Figura 2.6: Função Threshold.

Um modelo de um neurônio que utiliza a função de ativação Threshold é comumente chamado de Modelo de McCulloch-Pitts, em reconhecimento a Warren McCulloch e Wal-ter Pitts, os primeiros a descreverem um modelo artificial para um neurônio biológico [24]. A função de ativação determina se a soma ponderada das entradas é maior que um valor numérico. Se sim, a saída do neurônio é 1, se não, a saída é 0. O neurônio sempre estará em um de dois estados, ativado ou desativado.

Função Sigmoide

A função sigmoide é a função mais comumente utilizada na construção de redes neurais. Funções sigmoides têm seu gráfico em formato de ’S’ e não apresentam descontinuidades em seu intervalo. Um exemplo de função deste tipo é a função logística, também chamada de Sigmoide Unipolar, que é dada pela equação

ϕ(v) = 1

1 + e(−av), (2.9)

onde a é o coeficiente de inclinação e determina a inclinação da curva. A Figura 2.7 apresenta o gráfico da função logística para quatro valores de a. Observa-se que valores maiores de a tornam a função cada vez mais não-linear, adquirindo um formato semelhante ao formato da função Threshold.

(28)

-5 -4 -3 -2 -1 0 1 2 3 4 5 v 0 0.2 0.4 0.6 0.8 1 ϕ (v ) a= 0.25 a= 0.5 a= 1 a= 2

Figura 2.7: Função Logísitca.

A tangente hiperbólica, também chamada de Sigmoide Bipolar, é um outro exemplo de função sigmoide que é utilizada quando se deseja que o resultado esteja limitado a um intervalo bipolar. A função de ativação baseada na função tangente hiperbólica é dada por

ϕ(v) = 2

1 + e(−2av) − 1, (2.10)

onde a determina o coeficiente de inclinação da curva da função. A Figura 2.8 mostra um gráfico de uma função tangente hiperbólica para quatro valores de a limitada ao intervalo [−1, 1].

(29)

-5 -4 -3 -2 -1 0 1 2 3 4 5 v -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 ϕ (v ) a= 0.25 a= 0.5 a= 1 a= 2

Figura 2.8: Função Tangente Hiperbólica.

Várias outras funções de ativações são propostas na literatura, porém de uso mais específico. A função de ativação utilizada neste trabalho na modelagem de redes neurais é a função logística.

2.4.3

O Processo de Aprendizado

A habilidade da rede neural em aprender com o ambiente e, assim, melhorar sua perfor-mance é crucial. Já foi visto que o processo de aprendizagem é feito de maneira interativa ajustando os pesos referentes a cada sinapse e o nível do Bias. Segundo Symon Haykin [23], aprendizado é um processo pelo qual parâmetros de uma rede neural são adaptados atra-vés de um processo de simulação do ambiente no qual a rede está incorporada. O tipo de aprendizado é definido pela maneira pela qual os parâmetros mudam.

Existem dois principais paradigmas de aprendizado de Redes Neurais, o aprendizado supervisionado e o não-supervisionado.

Aprendizado Supervisionado

O aprendizado supervisionado consiste na modificação dos pesos das sinapses na rede neural aplicando amostras de treinamento do sinal de entrada e o seu correspondente sinal de saída desejado. Dessa forma, a rede aprende pelas amostras fazendo um mapeamento

(30)

Aleatoriamente, uma amostra é selecionada e os pesos das sinapses são modificados de maneira que seja minimizada a diferença entre a saída desejada e a saída produzida pela rede para o sinal de entrada. Este processo de treinamento é repetido várias vezes utilizando diferentes amostras até a rede neural atingir um estado em que não existam mais mudanças significativas nos pesos das sinapses.

Aprendizado Não Supervisionado

Neste caso, não existe um supervisor acompanhando o processo de aprendizagem da rede neural. Como não existem amostras de treinamento rotuladas, a rede neural deve procurar por algum tipo de correlação ou redundância nos dados de entrada.

2.4.4

Arquiteturas de Redes Neurais

A estrutura de uma rede neural está diretamente relacionada ao algoritmo que será usado no treinamento da rede. Três tipos fundamentais de estruturas de redes neurais podem ser identificados:

Rede de Camada Única sem Realimentação (Single-Layer Feedforward)

Neste tipo de rede neural, os neurônios estão organizados em uma única camada. De uma maneira simples, existe uma camada de entrada composta pelas sinapses que levam os sinais até uma camada de saída de neurônios, onde é feita a computação. A computação só é feita na camada de neurônios que é a camada de saída.

x1 x2 x3 x4 Neurônios da camada de saída Camada de entrada y1 y2 y3 y4

(31)

A Figura 2.9 mostra um exemplo de rede neural com quatro entradas e uma única camada com quatro neurônios.

Rede de Múltiplas Camadas sem Realimentação (Multilayer Feedforward)

Este tipo de rede neural pode ter uma ou várias camadas escondidas de neurônios que também exercem computação. A função destes neurônios ocultos, ou escondidos, é con-tribuir na computação da saída de alguma maneira. Tipicamente, a rede consiste de um conjunto de nós que fazem parte da camada de entrada, uma ou mais camadas escondidas de neurônios e uma camada de saída de neurônios. O sinal de entrada propaga pela rede neural em direção à saída, de camada em camada. Uma rede de múltiplas camadas é popularmente conhecida como multilayer perceptron (MLP).

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 y1 y2 Neurônios da camada escondida Camada de entrada Neurônios da camada de saída

Figura 2.10: Rede Neural com uma camada escondida.

A Figura 2.10 mostra um exemplo de rede neural com dez entradas, uma camada escondida com quatro neurônios e uma camada de saída com dois neurônios.

Rede Recorrente

A ideia por trás de uma rede neural recorrente é fazer o uso de informações em sequência. Em uma rede neural não-recorrente, pode-se assumir que todos os inputs são

(32)

indepen-dentes uns dos outros. Mas para certas tarefas, a dependência entre os inputs se faz necessária. Por exemplo, para prever a próxima palavra em uma frase, é bom saber quais as palavras foram usadas antes. Uma rede neural recorrente faz com que a saída dos neurônios seja dependente de todos os elementos previamente computados. Um bom modo de pensar em uma rede recorrente é imaginar memórias que guardam as saídas dos neurônios e redistribuem estes valores como entradas para os neurônios juntamente com os próximos valores de input. Essas memórias fazem parte da camada de contexto.

2.4.5

Rede Neural Recorrente de Elman

A Rede Neural Recorrente de Elman (RNRE) [25] será a estrutura utilizada neste tra-balho e é um exemplo de uma multilayer perceptron recorrente que segue o paradigma de aprendizado supervisionado. A arquitetura da Rede Neural Recorrente de Elman foi desenvolvida com interesse em algoritmos de processamento de linguagem natural, mas seu criador, Jeffrey Elman, sugeriu que a rede pode ser aplicada a qualquer problema que requeira processamento sequencial das entradas.

(33)

Figura 2.11: Rede Neural Recorrente de Elman.

A Rede Neural Recorrente de Elman faz o uso de uma camada de contexto composta por neurônios que atuam como memórias, armazenando os valores de cada neurônio da camada escondida e realimentando-os para todos os neurônios da camada escondida. A Figura 2.11 mostra a estrutura de uma Rede Neural Recorrente de Elman.

2.5

O Treinamento em redes multilayer perceptrons

O treinamento de uma multilayer perceptron, como a Rede Elman, geralmente é feito de forma supervisionada utilizando o algoritmo de retropropagação de erros (Error

Back-Propagation). Este algoritmo tem como função encontrar as derivadas da função de erro

com relação aos pesos e Bias da rede neural [26]. A função de erro calcula a diferença entre a saída fornecida pela rede neural e a saída desejada em relação a um determi-nado padrão de entrada [27]. Outras variações desse algoritmo propostas para otimizar a convergência em certos casos também são utilizadas em treinamentos de redes neurais

(34)

2.5.1

Algoritmo Error Back-Propagation

Basicamente, o algoritmo Error Back-Propagation passa por duas etapas, a etapa forward e a etapa backward. Na etapa forward, os sinais de entrada são aplicados aos neurônios e seus efeitos são propagados pela rede, camada por camada, até chegar à camada de saída, produzindo a resposta da rede em relação às entradas. Nesta etapa, os pesos sinápticos são fixos. Na etapa backward, são calculadas as derivadas da função de erro em relação aos pesos sinápticos. O sinal do erro é propagado da camada de saída para a camada de entrada. Esse sinal de erro corresponde à diferença entre a saída do resultado da etapa

forward em relação à saída desejada estipulada nos targets do treinamento. Nesta etapa,

os pesos sinápticos são todos ajustados de acordo com algum método de otimização, com um dos mais populares sendo o método do gradiente descendente [28], para que o sinal da rede seja mais próximo ao sinal desejado, diminuindo o erro. O Error Back-Propagation é apresentado no Algoritmo 1.

Algoritmo 1 Algoritmo Error Back-Propagation

Inicialização

Os pesos sinápticos e os Bias são inicializados aleatoriamente no intervalo [0, 1]. Apresentação dos padrões de treinamento

O conjunto de padrões data de treinamento é apresentado à rede neural.

for d in data do

Etapa Forward

Começando pela camada de entrada, computa as atividades dos neurônios em cada camada.

Etapa Backward

Computa as derivadas da função de erro de acordo com o resultado da camada de saída.

for layer in layers do

Computa as derivadas da função de erro de acordo com as entradas dos neurônios da camada anterior.

Computa as derivadas da função de erro de acordo com os pesos sinápticos entre a camada anterior e a camada posterior.

Computa as derivadas da função de erro de acordo com os resultados da camada posterior.

end for

Atualiza os pesos sinápticos.

end for

Critérios de parada comuns são o número de épocas de treinamento e o valor mínimo de erro atingido pelo algoritmo. Uma medida de erro bastante utilizada é o Erro Médio Quadrático definido por

(35)

EM Q = 1 ne

Te, (2.11)

onde n é o número de padrões de entrada, e é um vetor que armazena o erro relativo a todos os padrões de entrada da rede.

2.5.2

Algoritmo Levenberg-Marquardt

O algoritmo Levenberg-Marquardt [29] é o algoritmo usado no treinamento das redes neu-rais deste projeto. Trata-se de um método de otimização e aceleração da convergência do

Error Back-Propagation, sendo considerado mais eficiente para treinamentos de redes de

tamanhos pequeno e médio. O algoritmo Error Back-Propagation é popular e amplamente utilizado ainda nos dias de hoje, porém possui uma convergência lenta. Esse problema da convergência é melhorado com o algoritmo Gauss-Newton [30]. Este algoritmo usa deri-vadas de segunda ordem da função de erro para avaliar a curvatura da superfície de erro, achando tamanhos de passos adequados em cada direção, possibilitando uma convergência mais rápida, especialmente para superfícies de erro quadráticas.

O Levenberg-Marquardt combina conceitos do método do gradiente descendente [27], herdando sua estabilidade, e do algoritmo Gauss-Newton, herdando sua velocidade. É mais robusto que o Gauss-Newton pois converge mesmo em casos onde a superfície de erro é mais complexa do que em uma situação quadrática, permitindo também maior variabilidade nos parâmetros iniciais de entrada.

A ideia do algoritmo Levenberg-Marquardt é um treinamento combinado, onde o al-goritmo muda para o método gradiente descendente em torno de uma área com curva-tura complexa até a curvacurva-tura local possibilitar uma aproximação quadrática. Então, o algoritmo passa a se comportar como o Gauss-Newton, aumentando a velocidade de convergência significantemente [30].

(36)

Capítulo 3

Sistema Proposto

Este capítulo descreve a proposta e a implementação de uma aplicativo iOS com um sis-tema de autenticação de usuário baseado em gestos utilizando uma rede neural recorrente. A rede neural foi criada e treinada no MATLAB, e sua estrutura foi implementada no código do sistema.

3.1

Ambiente de desenvolvimento

Para a criação de qualquer aplicativo no sistema operacional iOS, é necessário um compu-tador com o sistema operacional macOS e com a IDE Xcode [31] instalada como mostrado na Figura 3.1.

(37)

Figura 3.1: Xcode.

Para o programador testar seus aplicativos em um dispositivo iPhone ou iPad, é neces-sário ter uma conta de desenvolvedor ativa no site Apple Developer [32]. Existem ainda outras alternativas de plataformas para desenvolvimento de aplicativos para dispositivos iOS como o Qt for iOS [33]. A linguagem de programação utilizada neste projeto foi o Objective-C [10].

3.2

Ambiente de Treinamento

A rede neural implementada no aplicativo foi criada no MATLAB [34] utilizando uma Rede Neural Recorrente de Elman. Amostras de gestos coletadas de pessoas que partici-param do experimento são rotuladas e utilizadas nos treinamentos para definir a estrutura da rede neural a ser implementada. A Figura 3.2 mostra o exemplo de uma rede contendo 9 neurônios na camada de entrada, 16 neurônios na camada escondida e de contexto, e 2 neurônios na camada de saída.

(38)

Figura 3.2: Representação de uma Rede Neural Recorrente Elman no MA-TLAB (Fonte: [34]).

A rede é treinada utilizando o algoritmo Levenberg-Marquadt com base em valores de input e target selecionados para o treinamento. Após o treinamento, um script é executado para transportar os valores dos pesos sinápticos e Bias da rede treinada no MATLAB para o código fonte do aplicativo.

3.3

Descrição do sistema

Foram feitas duas implementação diferentes do sistema, uma para a aquisição de dados e outra para utilização e autenticação. As características de cada uma das implementações são listadas a seguir:

Implementação para aquisição de dados:

– Utilizada para coleta de gestos de pessoas para treinamento das redes neurais; – Utiliza todos os dados dos sensores (acelerômetro, giroscópio e atitude); – Dados dos gestos são salvos em arquivos texto em um subdiretório do

aplica-tivo;

Implementação para utilização e autenticação:

– Uma rede neural é implementada utilizando os valores de pesos sinápticos e

Bias resultantes do treinamento no MATLAB.

– Alguns dados dos sensores podem não ser utilizados como entradas da rede

neu-ral, dependendo da estrutura da camada de entrada definida para determinado cenário.

(39)

Figura 3.3: Tela do aplicativo.

A Figura 3.3 mostra a interface do aplicativo implementado mostrando os dados do acelerômetro, giroscópio e atitude. A interface é semelhante tanto na a implementação para aquisição dos dados quanto na implementação para utilização e autenticação.

3.3.1

Implementação para aquisição dos dados

Todos os dados dos sensores são utilizados no sistema implementado para a aquisição

de dados dos usuários a serem utilizados no treinamento das redes neurais. Após o

botão Start ser pressionado, o sistema cria 3 novos arquivos para a escrita dos dados do acelerômetro, do giroscópio e da atitude, e começa a receber dados dos sensores na frequência de amostragem definida enquanto o usuário realiza o gesto. A cada amostra, o sistema escreve os dados recebidos nos arquivos. Após o botão Stop ser pressionado, o sistema fecha os arquivos utilizados e deixa de receber dados dos sensores. Se o botão Start for pressionado novamente, o sistema mais uma vez começa a receber dados dos sensores e

(40)

a escrevê-los em 3 novos arquivos. Para n gestos realizados existirão 3n arquivos texto em um subdiretório do aplicativo contendo dados dos gestos do acelerômetro, do giroscópio e da atitude. Início Start pressionado? Recebe dados dos sensores Salva dados da amostra Stop pressionado? Fim Mostra dados na tela Não Sim Não Sim

Figura 3.4: Diagrama de blocos do sistema implementado para aquisição dos dados.

O diagrama de blocos da Figura 3.4 ilustra o funcionamento do sistema implementado para a aquisição de dados.

Nessa implementação, o primeiro passo é inicializar os objetos que fazem parte do aplicativo. O framework Core Motion permite o acesso aos dados dos sensores. A classe CMMotionManager permite começar a receber esses dados em intervalos de tempo regulares ou somente quando necessário. A inicialização de um objeto motionManager desta classe é feita conforme a Figura 3.5.

(41)

A seguir, é configurada a frequência na qual o motionManager irá emitir os dados do acelerômetro e do giroscópio. Como exemplo, as duas frequências foram definidas como 10Hz na Figura 3.6.

Figura 3.6: Definição da frequência de aquisição dos sensores.

1 self->motionManager.accelerometerUpdateInterval = 0.1; // 10 Hz

2 self->motionManager.deviceMotionUpdateInterval = 0.1; // 10 Hz

Após definir a frequência de amostragem, é criado o path para o subdiretório onde serão criados os arquivos contendo os dados dos sensores como mostra a Figura 3.7.

Figura 3.7: Criação do path para o subdiretório de arquivos.

1 self->filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,

NSUserDomainMask, YES) objectAtIndex:0];

O acelerômetro e o giroscópio já estão prontos para enviar dados ao aplicativo. Porém, é preciso definir ainda quando os dados começarão a ser recebidos e o que será feito com eles. O aplicativo possui os botões de Start e Stop, mostrados na Figura 3.3

O botão Start é o gatilho para o início da aquisição de dados. Se não for pressionado, o aplicativo permanecerá inativo. Quando o usuário pressiona o botão Start, três novos arquivos texto são criados para a escrita dos dados do acelerômetro, do giroscópio e da atitude como mostra a Figura 3.8 e a aquisição de dados é iniciada pelos sensores, como na Figura 3.9. Um timer também é inicializado com a frequência de amostragem definida pelo desenvolvedor, como mostra a Figura 3.10, para ativar o método getData() que irá tratar os dados recebidos pelos sensores.

Figura 3.8: Criação dos arquivos para a escrita dos dados dos sensores.

1 self->fileName1 = [NSString stringWithFormat:@"Acelerometro%d.txt",n];

2 self->fileAtPath1 = [filePath stringByAppendingPathComponent:fileName1];

3

4 self->fileName2 = [NSString stringWithFormat:@"Giroscopio%d.txt",n];

5 self->fileAtPath2 = [filePath stringByAppendingPathComponent:fileName2];

6

7 self->fileName3 = [NSString stringWithFormat:@"Attitude%d.txt",n];

(42)

Na Figura 3.8, onde mostra a criação dos arquivos texto dentro do subdiretório do aplicativo, o nome de cada arquivo é dado em função de n, o número de gestos realizados pelo usuário. Um gesto é contabilizado toda vez que o botão Start é pressionado.

Figura 3.9: Início da aquisição de dados do acelerômetro e do giroscópio.

1 [self->motionManager startAccelerometerUpdates]; 2 [self->motionManager startDeviceMotionUpdates];

Figura 3.10: Inicialização do timer para ativar o método getData().

1 self->timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self

selector:@selector(getData:) userInfo:nil repeats:YES];

O botão de Stop pode ser pressionado a qualquer momento a partir de então. Se pressionado, o Stop destrói o timer e informa ao acelerômetro e ao giroscópio para que parem de enviar dados ao aplicativo conforme as Figuras 3.11 e 3.12 respectivamente.

Figura 3.11: Destruição do timer.

1 [self->timer invalidate];

Figura 3.12: Fim da aquisição de dados do acelerômetro e do giroscópio.

1 [self->motionManager stopAccelerometerUpdates]; 2 [self->motionManager stopDeviceMotionUpdates];

O método getData() é chamado de acordo com a frequência de amostragem definida no timer. Dentro do método, a interface para a visualização dos dados é atualizada. Valores dos dados recebidos dos sensores são atribuídos a barras de progresso e labels. A Figura 3.13 mostra como os valores X, Y e Z do acelerômetro são atribuídos às labels na tela do aplicativo. Já a Figura 3.14 mostra os mesmos valores X, Y e Z do acelerômetro sendo atribuídos a barras de progresso de modo que a amplitude seja [-1,1].

(43)

Figura 3.13: Dados do acelerômetro sendo atribuídos a Labels.

1 self->xlabel_acc.text = [NSString stringWithFormat:

@"%.4f",self->motionManager.accelerometerData.acceleration.x];

2 self->ylabel_acc.text = [NSString stringWithFormat:

@"%.4f",self->motionManager.accelerometerData.acceleration.y];

3 self->zlabel_acc.text = [NSString stringWithFormat:

@"%.4f",self->motionManager.accelerometerData.acceleration.z];

Figura 3.14: Dados do acelerômetro sendo atribuídos a barras de progresso.

1 self->xbar_acc.progress = self->motionManager.accelerometerData.acceleration.x/2 + 0.5; 2 self->ybar_acc.progress = self->motionManager.accelerometerData.acceleration.y/2 + 0.5; 3 self->zbar_acc.progress = self->motionManager.accelerometerData.acceleration.z/2 + 0.5;

A Figura 3.15 mostra como os valores dos 3 eixos do acelerômetro, do giroscópio e da atitude de uma amostra são escritos nos arquivos texto dentro do método getData().

(44)

Figura 3.15: Dados dos sensores escritos nos arquivos.

1 // Escrita no arquivo

2 [self appendText:[self->xlabel_acc.text stringByAppendingString:@" "] toFile:self->fileAtPath1];

3 [self appendText:[self->ylabel_acc.text stringByAppendingString:@" "] toFile:self->fileAtPath1];

4 [self appendText:[self->zlabel_acc.text stringByAppendingString:@"\n"] toFile:self->fileAtPath1];

5

6 [self appendText:[self->xlabel_rot.text stringByAppendingString:@" "] toFile:self->fileAtPath2];

7 [self appendText:[self->ylabel_rot.text stringByAppendingString:@" "] toFile:self->fileAtPath2];

8 [self appendText:[self->zlabel_rot.text stringByAppendingString:@"\n"] toFile:self->fileAtPath2];

9

10 [self appendText:[self->xlabel_att.text stringByAppendingString:@" "] toFile:self->fileAtPath3];

11 [self appendText:[self->ylabel_att.text stringByAppendingString:@" "] toFile:self->fileAtPath3];

12 [self appendText:[self->zlabel_att.text stringByAppendingString:@"\n"] toFile:self->fileAtPath3];

Os arquivos salvos em um subdiretório do aplicativo podem ser facilmente acessados utilizando um cabo USB e um File Manager para iPhone. Dessa forma, é possível exportar todas as amostras de gestos salvas nos arquivos para um computador e, em seguida, para o MATLAB.

3.3.2

Implementação para utilização e autenticação

Como Objective-C é uma linguagem orientada a objeto, toda a estrutura do sistema

é divida em classes. A criação da rede neural é feita através de objetos das classes

HiddenNeuron, ContextNeuron e OutputNeuron. Objetos da classe HiddenNeuron são os neurônios da camada escondida da Rede Recorrente de Elman. Esses objetos têm como entrada os sinais vindos do acelerômetro (X, Y, Z), do giroscópio (X, Y, Z) e a atitude (roll, pitch, yaw) e mais a saída dos neurônios da camada de contexto. Inicialmente, a saída de todos os neurônios da camada de contexto é setado como zero. Para cada uma das

(45)

da rede no MATLAB. O resultado da combinação linear das entradas com os pesos de acordo com a Equação 2.6 será a entrada da função de ativação do neurônio, a função logística, ou Sigmoide Unipolar, descrita na Equação 2.9. A saída de cada neurônio da camada escondida será a saída da função de ativação.

Para cada neurônio da camada escondida, existe um neurônio na camada de contexto que atua como uma memória, guardando o último valor da saída do neurônio da camada escondida correspondente. O valor armazenado em todos os neurônios da camada de con-texto no instante t será usado como entrada para todos os neurônios da camada escondida no instante t + 1, conforme mostra a Figura 2.11.

Paralelamente, além de servir de entrada para a camada de contexto, a saída de todos os m neurônios da camada escondida será a entrada para todos os j neurônios da camada de saída, com cada neurônio da camada de saída contendo m entradas. Na camada de saída, os neurônios também possuem pesos sinápticos atribuídos às entradas definidos pre-viamente pelo algoritmo de treinamento no MATLAB. Assim como na camada escondida, o resultado da combinação linear das m entradas de cada neurônio da camada de saída com os pesos sinápticos será a entrada da função de ativação Sigmoide Unipolar descrita na Equação 2.9, de acordo com a Equação 2.6. O resultado da função de ativação de cada neurônio da camada de saída será o resultado da rede neural para o instante t.

Assim como na implementação para a aquisição dos dados, um objeto da classe CMMotionManager precisa ser inicializado para ter acesso aos dados do acelerômetro e do giroscópio como mostra a Figura 3.5. A frequência de amostragem deve ser definida dentro dos limites definidos na Tabela 2.1 para o hardware do iPhone 6 como mostra a Figura 3.6. Os botões Start e Stop também estão presentes nessa implementação. O botão Start inicia a aquisição de dados e o botão Stop chama o método de autenticação.

(46)

Início Start pressionado? Recebe dados dos sensores Stop pressionado? Fim Mostra dados na tela Não Sim Não Rede Neural

Saída da rede neural foi a esperada para uma porcentagem de amostras ≥ porcentagem de confiança? Sim Autenticação bem sucedida Usuário não identificado Sim Não

Figura 3.16: Diagrama de blocos do sistema implementado para utilização.

O diagrama de blocos da Figura 3.16 mostra o funcionamento do sistema implementado para autenticação.

Os neurônios de toda a rede neural devem ser inicializados, já atribuindo os valores de seus pesos sinápticos e do Bias definidos pelo treinamento da rede neural com o MATLAB. O valor inicial de todas as entradas é definido como zero. A Figura 3.17 apresenta um exemplo da inicialização do primeiro neurônio da camada escondida. Da mesma forma, todos os m neurônios da camada escondida são inicializados com seus respectivos pesos e

(47)

Figura 3.17: Inicialização de um neurônio da camada escondida.

1 self.n1 = [[HiddenNeuron alloc]

2 initWithValues:0 Input_2:0 ... Input_k:0

3 Bias:21.3724

4 Weight_1:-25.0332 Weight_2:23.9151 ... Weight_k:4.0461

5 Context_1:0 Context_2:0 ... Context_m:0

6 Weight_C1:5.7804 Weight_C2:0.0839 ... Weight_Cm:1.4738];

Procedimento similar é realizado para os neurônios da camada de contexto e da camada de saída, como mostram as Figuras 3.18 e 3.19 respectivamente, onde o primeiro neurônio da camada de saída e o primeiro neurônio da camada de contexto são inicializados.

Figura 3.18: Inicialização de um neurônio da camada de contexto.

1 self.c1 = [[ContextNeuron alloc] initWithValues:0];

Figura 3.19: Inicialização de um neurônio da camada de saída.

1 self.on1 = [[OutputNeuron alloc]

2 initWithValues:0 Input_2:0 Input_3:0 ... Input_m:0

3 Bias:-4.6509

4 Weight_1:-11.5520 Weight_2:17.1566 ... Weight_m:-0.4441];

O método getData(), diferentemente da implementação para aquisição de dados, não escreve os dados dos sensores em arquivos texto. São realizadas computações da rede neural, calculando a saída da rede para os valores de entrada, e atualizações da interface do aplicativo com os dados dos sensores a cada chamada do método, que é ativado de acordo com a frequência de amostragem definida no timer para receber os dados.

Os valores registrados pelos sensores nesta chamada do método são atribuídos às en-tradas dos neurônios da camada escondida da rede neural. Por exemplo, para uma rede neural com m neurônios na camada escondida, a Figura 3.20 mostra os valores X, Y e Z recebidos do acelerômetro na amostra atual e resultados da amostra anterior salvos nos neurônios da camada de contexto sendo atribuídos às entradas da rede.

(48)

Figura 3.20: Dados do acelerômetro atribuídos às entradas da rede neural. 1 for (i = 0; i < m; i++) { 2 [self.HiddenLayer[i] setInput_1: self->motionManager.accelerometerData.acceleration.x]; 3 [self.HiddenLayer[i] setInput_2: self->motionManager.accelerometerData.acceleration.y]; 4 [self.HiddenLayer[i] setInput_3: self->motionManager.accelerometerData.acceleration.z]; 5

6 [self.HiddenLayer[i] setContext1: self.c1.data];

7 [self.HiddenLayer[i] setContext2: self.c2.data];

8 ...

9 [self.HiddenLayer[i] setContextm: self.cm.data];

10 }

Com todas as entradas já definidas, o método summingFunction() é chamado para todos os neurônios da camada escondida. O método executa a combinação linear de todas as entradas com seus respectivos pesos sinápticos, usando o resultado como entrada da função de ativação que por sua vez dá como resultado a saída do neurônio, como mostra a Figura 3.21 para uma rede neural com m neurônios na camada escondida e k entradas.

Figura 3.21: Método summingFunction de um neurônio da camada escondida.

1 -(float) summingFunction {

2 float soma;

3

4 soma = (self.bias + (self.input_1 * self.weight_1) + (self.input_2 *

self.weight_2) + ... + (self.input_k * self.weight_k) + (self.context1

* self.wc1) + (self.context2 * self.wc2) + ... + (self.contextm *

self.wcm)); 5

6 self.output = [self activationFunction:soma];

7 return self.output;

8 }

Logo que as saídas dos m neurônios da camada escondida estão definidas para a amostra atual, esses resultados são salvos nos m neurônios da camada de contexto para

(49)

Paralelamente, todos os m neurônios da camada escondida atribuem suas saídas a todos os j neurônios da camada de saída como mostra a Figura 3.23.

Figura 3.22: Neurônios da camada de contexto recebem a saída de neurônios da camada escondida.

1 for (i = 0; i < m; i++) {

2 [self.ContextLayer[i] setData:self.HiddenLayer[i].output];

3 }

Figura 3.23: Neurônios da camada de saída recebem a saída dos neurônios da camada escondida.

1 for (i = 0; i < j; i++) {

2 [self.OutputLayer[i] setInput_1:self.HiddenLayer[0].output];

3 [self.OutputLayer[i] setInput_2:self.HiddenLayer[1].output];

4 ...

5 [self.OutputLayer[i] setInput_m:self.HiddenLayer[m - 1].output];

6 }

Da mesma forma que os neurônios da camada escondida, cada neurônio da camada de saída usa o resultado da combinação linear de suas entradas com os pesos sinápticos como entrada da função de ativação que calcula a saída do neurônio para a amostra atual através do método summingFunction(). A saída da rede neural para as amostras utilizadas como entrada no instante t é dada pelo resultado dos neurônios da camada de saída.

Autenticação

Os dados das amostras são salvos em um array durante o gesto. O método authenticate() é chamado quando o usuário pressiona o botão Stop. Para a autenticação ocorrer, a por-centagem de amostras em um gesto cuja saída da rede neural apresentou o resultado esperado deve ser no mínimo igual a porcentagem de confiança. A escolha da porcen-tagem de confiança deve-se à semelhança dos dados obtidos pelos sensores para pessoas diferentes nas primeiras amostras em um mesmo gesto. Estas primeiras amostras durante o gesto podem resultar em inconstâncias na saída da rede neural antes de a rede começar a acertar de fato e apresentar o resultado correto na saída. Análises sobre a porcentagem de confiança a ser utilizada na autenticação serão feitas no próximo capítulo.

(50)

Este capítulo apresentou o sistema proposto e sua implementação em um iPhone. No próximo capitulo serão feitas avaliações e medidas obtidas com esta implementação.

(51)

Capítulo 4

Resultados Obtidos

O projeto foi abordado de duas maneiras diferentes. A primeira abordagem utiliza quatro classes de rótulos para o treinamento, verificando a eficácia da Rede Recorrente de Elman em distinguir quatro usuários diferentes que seriam previamente cadastrados no aplicativo. A segunda abordagem utiliza apenas duas classes de rótulos para o treinamento. Nesta abordagem, verifica-se a eficácia da rede neural na distinção de duas classes de pessoas, usuário cadastrado e usuário não-cadastrado.

Foram realizados testes utilizando dois gestos diferentes em cada uma das abordagens para verificar qual a melhor combinação de sensores a serem utilizados na camada de entrada. Também foram realizados testes para definir a melhor quantidade de neurônios na camada escondida em cada uma das abordagens. Após os testes realizados, a estrutura da abordagem mais eficaz é utilizada na implementação do sistema de autenticação no iPhone.

Este trabalho foi desenvolvido utilizando o software MATLAB R2015b [34] para a rea-lização dos treinamentos e o software Xcode 7.3.1 [31] para a implementação do aplicativo no iPhone 6 com processador Apple Cyclone 1.4 GHz de 2 cores e 1GiB RAM utilizando a sistema operacional iOS 9.3.3 [9].

4.1

Gestos

Foram escolhidos dois gestos distintos para cada uma das abordagens. O círculo foi o primeiro gesto escolhido por ser um gesto simples no qual o usuário não varia bruscamente a aceleração ao executá-lo. O usuário segura o celular com a mão direita, de frente para a tela e desenha um círculo no ar começando pela lado esquerdo conforme a Figura 4.1a.

(52)

(a) Círculo (b) Triângulo

Figura 4.1: Gestos com o celular para a autenticação.

O segundo gesto foi um triângulo isósceles, com a base sendo o lado diferente. Tam-bém é um gesto simples, mas de complexidade maior que o círculo pois o usuário deve desacelerar e logo depois acelerar o dispositivo ao desenhar no ar cada um dos vértices do triângulo, fornecendo aos sensores mais nuances das características de cada usuário ao executar o gesto. O usuário segura o celular com a mão direita, de frente para a tela e desenha um triângulo no ar começando pelo canto inferior esquerdo como mostra a Figura 4.1b.

Na realização dos experimentos, foi criado um banco de dados com amostras dos gestos de cada usuário divididos entre círculo e triângulo. Para a utilização do círculo, foram coletados dados de 116 gestos de um total de 4 pessoas de 21, 25, 51 e 55 anos de idade utilizados especificamente para o treinamento, cada pessoa realizando o gesto por mais de 25 vezes. Foram coletados mais dados de 60 gestos das mesmas pessoas a serem utilizados especificamente para os testes, cada pessoa realizando o gesto por 15 vezes.

Para a utilização do triângulo, foram coletadas dados de 476 gestos de um total de 10 pessoas de 12 a 55 anos de idade. Cada pessoa realizou o gesto por mais de 40 vezes. Os gestos são escolhidos aleatoriamente para treinamento e testes numa proporção de 75% e 25% respectivamente. Um mesmo gesto, seja círculo ou triângulo, tem de 20 a 50 amostras, dependendo do tempo que cada pessoa leva para executar, e contém dados de três eixos variando ao longo do tempo para o acelerômetro, giroscópio e atitude.

Referências

Documentos relacionados

In this work, improved curves are the head versus flow curves predicted based on the correlations presented in Table 2 and improved by a shut-off head prediction

Segundo o mesmo autor, a animação sociocultural, na faixa etária dos adultos, apresenta linhas de intervenção que não se esgotam no tempo livre, devendo-se estender,

O objetivo do curso foi oportunizar aos participantes, um contato direto com as plantas nativas do Cerrado para identificação de espécies com potencial

2°) KERKHOFF, A.J., MORIARTY, P.E. The latitudinal species richness gradient in New World woody angiosperms is consistent with the tropical conservatism hypothesis. Avalie

Apesar da existência do projeto desde 2004 e da inserção da ação como área de atuação do Mafra em Forma da SMS - programa institucionalizado por meio de lei - o desafio atual

Se você vai para o mundo da fantasia e não está consciente de que está lá, você está se alienando da realidade (fugindo da realidade), você não está no aqui e

UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO UNIDADE ACADÊMICA DE GARANHUNS TERMO DE CONSENTIMENTO LIVRE E ESCLARECIDO Convidamos o a Sr a para participar da Pesquisa intitulada