Você está na página 1de 106

UNIVERSIDADE FEDERAL DA PARAÍBA

Centro de Energias Alternativas e Renováveis


Departamento de Engenharia Elétrica

VÍTOR JOSÉ COSTA RODRIGUES

Sistema Embarcado de Monitoramento e


Identificação Pessoal Baseado na
Tecnologia LoRa

João Pessoa - PB
2019
ii

VÍTOR JOSÉ COSTA RODRIGUES

Sistema Embarcado de Monitoramento e


Identificação Pessoal Baseado na
Tecnologia LoRa

Trabalho de Conclusão de Curso submetido ao


Departamento de Engenharia Elétrica da Uni-
-versidade Federal da Paraı́ba como parte dos
requisitos necessários para a obtenção do grau
de Bacharel em Engenharia Elétrica.

Área de Concentração: Eletrônica

Orientador: Prof. Dr. Fabrı́cio Braga Soares de Carvalho

João Pessoa - PB
2019
Catalogação na publicação
Seção de Catalogação e Classificação

R696s Rodrigues, Vitor Jose Costa.


Sistema Embarcado de Monitoramento e Identificação
Pessoal Baseado na Tecnologia LoRa / Vitor Jose Costa
Rodrigues. - João Pessoa, 2019.
106 f. : il.

Orientação: Fabrício Braga Soares de Carvalho.


Monografia (Graduação) - UFPB/CEAR.

1. Processamento Digital de Imagens. 2. LoRa. 3.


Reconhecimento Facial. 4. Python. I. Carvalho, Fabrício
Braga Soares de. II. Título.

UFPB/BC
iv

VÍTOR JOSÉ COSTA RODRIGUES

Sistema Embarcado de Monitoramento e


Identificação Pessoal Baseado na
Tecnologia LoRa

Trabalho de Conclusão de Curso submetido ao


Departamento de Engenharia Elétrica da Uni-
-versidade Federal da Paraı́ba como parte dos
requisitos necessários para a obtenção do grau
de Bacharel em Engenharia Elétrica.

Área de Concentração: Eletrônica

Aprovado em: 20/09/2019

Fabrı́cio Braga Soares de Carvalho, D. Sc.


Universidade Federal da Paraı́ba
Orientador

José Maurı́cio Ramos de Souza Neto, D. Sc.


Universidade Federal da Paraı́ba
Avaliador

Rafael de Sousa Marinho, M. Sc.


Universidade Federal da Paraı́ba
Avaliador

Ravi Barreto Dória Figueiredo, M. Sc.


Universidade Federal da Paraı́ba
Avaliador

João Pessoa - PB
2019
v

Dedico este trabalho à todos aqueles


que me auxiliaram nesta jornada.
Esta conquista também é de vocês.
vi

Agradecimentos
Agradeço primeiramente a meus pais, por sempre reconhecerem meu esforço, pelo apoio
nos momentos difı́ceis e por me ensinarem o valor da integridade e da dedicação.
À minha querida Jaqueline, pelo carinho e zelo, pelos momentos de intensa alegria
nessa jornada tortuosa e, principalmente, por me fazer crescer ainda mais como pessoa e
sempre me incentivar a mostrar o melhor que eu tenho a oferecer.
Aos amigos de longa data, que tiveram mais fé em mim do que eu jamais tive, e que
sempre me fizeram encontrar meu rumo quando me sentia perdido.
Aos novos amigos, que fiz durante este curso, com os quais compartilhei suor e noites
mal dormidas, compartilhei risadas e bons momentos, mas acima de tudo compartilhei
aprendizado tanto como pessoa quanto como profissional.
Aos professores que tiveram papel crucial na minha formação. Em especial, aos pro-
fessores José Maurı́cio, Rafael e Fabrı́cio, pela prestatividade em ajudar, pelo aprendizado
que se estendeu além da sala de aula, pelos inúmeros aconselhamentos e, principalmente,
por acreditarem no meu potencial e abrirem as portas para inúmeras oportunidades de
crescimento como engenheiro e cientista.
vii

“You can, you should, and if you’re


brave enough to start, you will.”

Stephen King
viii

Resumo

Com a crescente tendência de incorporação da tecnologia em ambientes e atividades do


cotidiano humano, cada vez mais se discutem métodos para integração entre dispositivos e
para uma melhor interação entre máquinas e homens. Dessa forma, o papel das Redes de
Sensores Sem Fio é de grande importância para sistemas automatizados como uma forma
de coleta e/ou processamento de dados de forma não invasiva. Redes que envolvem moni-
toramento de ambientes através de sistemas de captura de vı́deo e imagem já começaram
a ser implementadas em diferentes paı́ses, com aplicações que envolvem desde análise de
perfis de consumidores até a aplicação automatizada de multas em infratores da lei. Es-
tudos recentes indicam um interesse tanto da academia quanto da comunidade leiga em
integrar as redes de monitoramento sem fio existentes na atualidade às novas tecnologias
de transmissão a longa distância, como o LoRa. Como forma de explorar este tópico, neste
trabalho desenvolveu-se um protótipo de sistema de monitoramento inteligente como base
para uma futura implementação de uma rede de sensores de monitoramento baseada em
LoRa. O sistema desenvolvido consiste em uma central de processamento, uma interface
para recebimento de dados e um único nó sensor. A operação do sistema se dá de forma
autônoma e é inicializada através da detecção de presença humana, pelo nó sensor, captu-
rando uma imagem dos indivı́duos presentes a cada detecção. Os dados são transmitidos
através de dispositivos LoRa indiretamente até a central de processamento, serializados
através da interface receptora. Na central de processamento, são executados métodos de
Detecção e Reconhecimento Facial por Redes Neurais Artificiais, utilizando a linguagem
Python. Foram realizados testes para ajustar o sistema e verificar sua eficácia. Os re-
sultados foram satisfatórios, indicando a viabilidade de uma expansão para uma rede de
múltiplos nós sensores .

Palavras-Chaves: Processamento Digital de Imagens, LoRa, Reconhecimento Facial


e Python.
ix

Abstract

With the ever increasing tendency of incorporating technology into environments and ac-
tivities of the everyday human life, it is discussed more and more which methods are suited
for integration between devices and for a better interaction among man and machine. As
such, the role of the Wireless Sensor Networks is of great importance to automated sys-
tems as a mean to collect and/or process data on a non-invasive manner. Networks related
to monitoring environments through systems of video and image capturing have already
begun to be implemented in several countries, with applications that range from analy-
sing consumer profiles to applying automated fines to lawbreakers. Recent studies have
shown interest from both the academy and the outside community to integrate wireless
surveillance network currently available with the new long range transmission technology,
such as LoRa. As a way of exploring this topic, in this work it was developed a prototype
system of intelligence monitoring as a basis to a future implementation of a LoRa-based
wireless monitoring sensor network. The system developed consists of a processing hub,
and data receiving interface and a single sensor node. The operation of this system hap-
pens autonomously and it is initiated through the detection of human presence, by the
sensor node, capturing an image of the individuals present at each detection. The data is
transmited through LoRa devices indirectly to the central hub, serialized upon arriving at
the receptor interface. Methods of Facial Detection and Recognition are employed at the
central hub, through the usage of Artificial Neural Networks and the Python programming
language. Many tests were conducted to both adjust the system and verify its efficacy.
The results obtained were satisfatory, indicating the viability of a future expantion to a
fully fledged multi-nodal sensor network.

Keywords: Digital Image Processing, LoRa, Facial Recognition and Python.


x

Lista de Figuras
2.1 Interesse ao Longo do Tempo para o termo “LoRa” . . . . . . . . . . . . . 20
2.2 Camadas de Operação do LoRa . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3 Processo de Espalhamento de Sinal . . . . . . . . . . . . . . . . . . . . . . 22
2.4 Estrutura de Pacotes LoRa . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.5 Topologia de Rede LoRaWAN . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.6 Estrutura de Mensagem de Uplink . . . . . . . . . . . . . . . . . . . . . . . 25
2.7 Estrutura de Mensagem de Downlink . . . . . . . . . . . . . . . . . . . . . 25
2.8 Janelamento de espaços para recepção na Classe A . . . . . . . . . . . . . 26
2.9 Estrutura de uma Recepção sincronizada por Sinal . . . . . . . . . . . . . 26
2.10 Janelamento de espaços para recepção na Classe C . . . . . . . . . . . . . 27
3.1 Espectro Visı́vel da Luz . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2 Analogia Elétrica do Detector Piroelétrico Irradiado . . . . . . . . . . . . . 29
3.3 Circuito de Condicionamento para o Cristal Piroelétrico . . . . . . . . . . . 30
3.4 Encapsulamento Metálico de um Sensor PIR . . . . . . . . . . . . . . . . . 30
3.5 Lentes de Fresnel em um Circuito Piroelétrico . . . . . . . . . . . . . . . . 31
4.1 Diferenças entre uma Câmera de Haleto de Prata e uma Câmera Digital . 34
4.2 Estrutura Tı́pica de uma Câmera Digital . . . . . . . . . . . . . . . . . . . 35
4.3 Leitura de Pixels em Rolling Shutter . . . . . . . . . . . . . . . . . . . . . 37
4.4 Relação entre a percepção de cores e a reflexão de radiação de luz visı́vel . 38
4.5 Estrutura do Olho Humano . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.6 Distribuição de Células Fotorreceptoras na Retina Humana . . . . . . . . . 40
4.7 Faixas de absorção de luz visı́vel para os três tipos de cones . . . . . . . . . 40
4.8 Representação Abstrata do Espaço de Cores RGB . . . . . . . . . . . . . . 41
4.9 Representação Abstrata do Espaço de Cores CMYK . . . . . . . . . . . . . 41
4.10 Representação Abstrata dos Espaços de Cores HSL e HSV . . . . . . . . . 42
4.11 Plano de Crominâncias do Espaço de Cores YIQ para Y = 0,5 . . . . . . . 42
4.12 Plano de Crominâncias de outro Espaço de Cores Y’CbCr para Y = 0,5 . . 43
4.13 Reprodução de uma Imagem Real (à esquerda) e sua Luminância (à direita) 44
4.14 O arranjo de um Filtro Bayer sobre os pixels de um sensor . . . . . . . . . 44
4.15 Topologias de CFAs alternativas ao Filtro de Bayer . . . . . . . . . . . . . 45
4.16 O arranjo de fotodiodos e seus nı́veis de absorção no Foveon X3 . . . . . . 45
4.17 Exemplo de Imagem a ser Comprimida . . . . . . . . . . . . . . . . . . . . 47
4.18 Nı́vel de Cinza obtido na linha 100 da Figura 4.17 . . . . . . . . . . . . . . 47
4.19 Matriz de Componentes de Frequência Cossenoidais . . . . . . . . . . . . . 50
4.20 Ordem de serialização da matriz quantizada Buv . . . . . . . . . . . . . . . 51
4.21 Diagrama de Blocos de um sistema SCCB a 3 Fios . . . . . . . . . . . . . 53
4.22 Diagrama de Blocos de um sistema SCCB a 2 Fios . . . . . . . . . . . . . 53
4.23 Diagrama de uma Transmissão de Dados SCCB a 3 Fios . . . . . . . . . . 54
4.24 Ciclos de Transmissão no SCCB . . . . . . . . . . . . . . . . . . . . . . . . 54
5.1 Estrutura básica de uma RNA com 1 camada oculta . . . . . . . . . . . . 57
5.2 Exemplo de aplicação em Python do módulo Face Recognition . . . . . . . 59
6.1 Diagrama de Elementos do Sensor Embarcado Proposto. . . . . . . . . . . 60
6.2 Módulo Sensor de Imagem OV7670. . . . . . . . . . . . . . . . . . . . . . . 61
6.3 Formatos de Imagem compatı́veis com OV7670. . . . . . . . . . . . . . . . 61
6.4 Novo Diagrama de Elementos do Sensor Embarcado. . . . . . . . . . . . . 62
6.5 Módulo de Cartão de Memória MicroSD. . . . . . . . . . . . . . . . . . . . 62
xi

6.6 Placa de Prototipagem Arduino Mega2560 Rev3. . . . . . . . . . . . . . . 63


6.7 Diagrama de Processos do Sensor Embarcado Desenvolvido. . . . . . . . . 64
6.8 Módulo LoRa E32 da Ebyte. . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.9 Diagrama de pinos do E32-TTL-100. . . . . . . . . . . . . . . . . . . . . . 65
6.10 Módulo HC-SR501 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.11 Diagrama de Elementos do Receptor de Dados . . . . . . . . . . . . . . . . 67
6.12 Diagrama de Processos do Receptor de Dados . . . . . . . . . . . . . . . . 68
6.13 Placa de Prototipagem Arduino Uno Rev3 . . . . . . . . . . . . . . . . . . 68
6.14 Diagrama de Elementos da Unidade de Processamento . . . . . . . . . . . 69
6.15 Diagrama de Processos da Unidade de Processamento . . . . . . . . . . . . 70
7.1 Valores possı́veis para o parâmetro SPED do módulo E32-TTL-100 . . . . 74
7.2 Imagem Utilizada no Teste - lenna50c.jpg . . . . . . . . . . . . . . . . . . . 75
7.3 Imagens Obtidas no Teste . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.4 Alternativas Ótimas baseadas nos Resultados Obtidos . . . . . . . . . . . . 77
7.5 Primeira Imagem do Teste Cor x Cinza - Lenna.jpg . . . . . . . . . . . . . 78
7.6 Segunda Imagem do Teste Cor x Cinza - Elfheim.jpg . . . . . . . . . . . . 78
7.7 Comparativos Cor x Cinza para o arquivo Lenna.jpg . . . . . . . . . . . . 79
7.8 Comparativos Cor x Cinza para o arquivo Elfheim.jpg . . . . . . . . . . . . 80
7.9 Imagem Utilizada no Teste - lenna240g.jpg . . . . . . . . . . . . . . . . . . 81
7.10 Mapa da Região onde os testes foram efetuados . . . . . . . . . . . . . . . 82
7.11 Área de Cobertura Estimada (Esboço) . . . . . . . . . . . . . . . . . . . . 83
7.12 Face Matching utilizando a tolerância padrão de 0,6 . . . . . . . . . . . . . 85
7.13 Face Matching utilizando a tolerância ajustada de 0,5 . . . . . . . . . . . . 85
7.14 Banco de Dados de Rostos Conhecidos . . . . . . . . . . . . . . . . . . . . 86
7.15 Teste de Identificação de Rosto Conhecido . . . . . . . . . . . . . . . . . . 86
7.16 Verificação da Resolução Mı́nima Necessária para Reconhecimento Facial . 87
7.17 Resultados Obtidos na Primeira Etapa do Teste . . . . . . . . . . . . . . . 87
7.18 Resultados Obtidos na Segunda Etapa do Teste . . . . . . . . . . . . . . . 88
7.19 Resoluções de um rosto no limiar de incerteza . . . . . . . . . . . . . . . . 88
7.20 Verificação da Incerteza de Rostos em Relação à Resolução . . . . . . . . . 88
7.21 Imagem Utilizada no Teste - Lı́deres do G7 . . . . . . . . . . . . . . . . . . 89
7.22 Resultados da Identificação de Faces do Algoritmo . . . . . . . . . . . . . . 90
7.23 Rostos Desconhecidos Extraı́dos da Imagem . . . . . . . . . . . . . . . . . 90
7.24 Primeira Imagem Utilizada no Teste - L240G.JPG . . . . . . . . . . . . . 91
7.25 Segunda e Terceira Imagens Utilizadas no Teste . . . . . . . . . . . . . . . 91
7.26 Retorno do Sistema para o envio de L240G.JPG . . . . . . . . . . . . . . . 92
7.27 Retorno do Sistema para o envio de VEJ240G.JPG . . . . . . . . . . . . . 92
7.28 Retorno do Sistema para o envio de VO GQVGA.JPG . . . . . . . . . . . 93
7.29 Rosto Desconhecido Extraı́do de VO GQVGA.JPG . . . . . . . . . . . . . 93
A.1 Pares de Rostos Utilizados da Seção 7.4 . . . . . . . . . . . . . . . . . . . . 105
xii

Lista de Tabelas
6.1 Tabela de Instruções do módulo E32-TTL-100 . . . . . . . . . . . . . . . . 66
6.2 Parâmetros de Configuração para o módulo E32-TTL-100 . . . . . . . . . . 66
7.1 Baud Rate x Taxa de Transmissão de Dados para Lenna.jpg em 50px . . . 75
7.2 R obtido na conversão para Escala de Cinza - Lenna.jpg . . . . . . . . . . 79
7.3 R obtido na conversão para Escala de Cinza - Elfheim.jpg . . . . . . . . . . 80
7.4 Tabela de Alcances e Tempos de Resposta Obtidos . . . . . . . . . . . . . 83
7.5 Distâncias obtidas comparando pares de rostos similares. . . . . . . . . . . 85
B.1 Tabela de Custos Estimados - Sensor Embarcado . . . . . . . . . . . . . . 106
B.2 Tabela de Custos Estimados - Receptor de Dados . . . . . . . . . . . . . . 106
B.3 Requisitos Mı́nimos e Recomendados - Unidade de Processamento . . . . . 106
xiii

Siglas

APS Sensores de Pixels Ativos (Active Pixel Sen-


sors) 36
C.C. Corrente Contı́nua 49
CCD Dispositivo de Carga Acoplada (Charge-
Coupled Device) 35–38
CDMA Acesso Múltiplo por Divisão em Código (Code
Division Multiple Access) 21
CFA Array de Filtros de Cores (Color Filter Array)
44, 45
CMOS Semicondutores Complementar de Óxido
Metálico (Complementary Metal Oxide Semi-
conductors) 36, 37
CPU Unidade Central de Processamento (Central
Processing Unit) 39, 106
CRC Checagem de Redundância Cı́clica (Cyclic Re-
dundancy Check ) 23–25
CSS Espalhamento Espectral Chirp (Chirp Spread
Spectrum) 21, 22
DCT Transformada Discreta do Cosseno (Discrete
Cosine Transform) 49, 50
DPI Pontos Por Polegadas (Dots Per Inches) 47
DSSS Espalhamento Espectral por Sequência Direta
(Direct Sequence Spread Spectrum) 21, 22
FDMA Acesso Múltiplo por Divisão em Frequência
(Frequency Division Multiple Access) 21
FHSS Espalhamento Espectral por Salto em
Frequência (Frequency Hopping Spread
Spectrum) 21, 22
FSCM Modulação de Deslocamento de Chirp em
Frequência (Frequency Shift Chirp Modula-
tion) 22
GSM Sistema Global para Comunicações Móveis
(Global System for Mobile Communications)
17
HOG Histograma de Gradiente Orientado (Histo-
gram of Oriented Gradient) 55, 58
HP Hewlett & Packard 59
IDE Ambiente de Desenvolvimento Integrado (In-
tegrated Development Environment) 69
IL&M Industrial Light & Magic 59
IoT Internet das Coisas (Internet of Things) 17,
18, 20
LoRa Rádio de Longo Alcance (Long Range Radio)
19, 20, 22–24, 65, 87, 94
LPWAN Rede de Grande Área e Baixo Consumo (Low
Power Wide Area Network ) 18–20, 84
xiv

MOS Óxiodo Metálico Semicondutor (Metal Oxide


Semiconductor ) 35
OSI Interconexão de Sistema Aberto (Open System
Interconnection) 21
P&G Procter & Gamble 17
PCB Placa de Circuito Integrado (Printed Circuit
Board ) 47
PDI Processamento Digital de Imagens 31, 32, 38,
43, 45, 46
PIL Biblioteca de Imageamento do Python
(Python Imaging Library) 71
PIR Passivo Infravermelho (Passive Infrared ) 27,
28, 82
RFID Identificadores por Radiofrequência (Radiofre-
quency Identifiers) 17
RLE Codificação Run-Length (Run-Length Enco-
ding) 46–49, 52
RNA Redes Neurais Artificiais 55–58
RSISF Redes de Sensores de Imagem Sem Fio 18, 19,
94
RSSF Redes de Sensores sem Fio 18, 19
SCCB Barramento Serial de Controle de Câmera (Se-
rial Camera Control Bus) 52–55, 60
SPI Interface Serial de Periféricos (Serial Periphe-
ral Interface) 55, 63, 64
SVM Máquina de Vetores de Suporte (Support Vec-
tor Machine) 55
UMC Unidade Microcontrolada 63, 64
WLAN Rede Sem Fio de Área Local (Wireless Local
Area Network ) 17
WMAN Rede Sem Fio de Área Metropolitana (Wire-
less Metropolitan Area Network ) 17
WPAN Rede Sem Fio de Área Pessoal (Wireless Per-
sonal Area Network ) 17
xv

Sumário
1 Introdução 17
1.1 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.1.1 Objetivos Gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.1.2 Objetivos Especı́ficos . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2 LoRa 20
2.1 Camada Fı́sica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Camada de Rede (LoRaWAN) . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2.1 Classe A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.2 Classe B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.3 Classe C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3 Sensores Piroelétricos (PIR) 27

4 Processamento Digital de Imagens 31


4.1 Visão Computacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.2 Sensores de Imagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2.1 CCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.2.2 CMOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.3 Processamento de Cores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.3.1 Percepção Visual Humana . . . . . . . . . . . . . . . . . . . . . . . 38
4.3.2 Espaços e Modelos de Cores . . . . . . . . . . . . . . . . . . . . . . 41
4.4 Cores em Sensores de Imagem . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.5 Compressão de Imagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.5.1 Compressão JPEG . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.6 SCCB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5 Reconhecimento Facial 55
5.1 Redes Neurais Artificiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.2 Dlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.3 Linguagem Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.3.1 Módulo face recognition para Python . . . . . . . . . . . . . . . . . 59

6 Descrição do Sistema 60
6.1 Sensor Embarcado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.1.1 Sensor de Imagem (Câmera) . . . . . . . . . . . . . . . . . . . . . . 60
6.1.2 Armazenamento Externo . . . . . . . . . . . . . . . . . . . . . . . . 62
6.1.3 Unidade Microcontrolada . . . . . . . . . . . . . . . . . . . . . . . . 63
6.1.4 Transceptor LoRa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.1.5 Sensor de Presença . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.2 Receptor de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.3 Unidade de Processamento . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.3.1 Algoritmo de Leitura Serial de Dados . . . . . . . . . . . . . . . . . 69
6.3.2 Algoritmo de Reconstrução de Imagem . . . . . . . . . . . . . . . . 71
6.3.3 Algoritmo de Reconhecimento Facial . . . . . . . . . . . . . . . . . 71
xvi

7 Resultados Experimentais 73
7.1 Otimização de Transmissão variando Baud Rate e Taxa de Transmissão de
Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.1.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.1.2 Análise dos Resultados . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.2 Otimização de Transmissão por escolha de Padrão de Cores . . . . . . . . . 77
7.2.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
7.2.2 Análise dos Resultados . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.3 Análise de Alcance e Interferência de Sinal em Ambiente Urbano . . . . . . 81
7.3.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.3.2 Análise dos Resultados . . . . . . . . . . . . . . . . . . . . . . . . . 82
7.4 Otimização do Reconhecimento por Ajuste na Tolerância do Face Matching 84
7.4.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.4.2 Análise dos Resultados . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.5 Análise da Identificação de Rostos Conhecidos . . . . . . . . . . . . . . . . 86
7.5.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.5.2 Análise dos Resultados . . . . . . . . . . . . . . . . . . . . . . . . . 87
7.6 Análise da Verificação de Rostos Desconhecidos . . . . . . . . . . . . . . . 89
7.6.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.6.2 Análise dos Resultados . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.7 Validação do Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
7.7.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
7.7.2 Análise dos Resultados . . . . . . . . . . . . . . . . . . . . . . . . . 92

8 Considerações Finais 93
8.1 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

A Pares de Rostos Utilizados da Seção 7.4 105

B Tabelas de Custos 106


17

1 Introdução
Quando Kevin Ashton cunhou o termo Internet das Coisas (IoT, Internet of Things)
em 1999, durante uma apresentação comercial para a Procter & Gamble (P&G), era mais
uma forma de chamar a atenção dos acionistas para sua proposta de modernizar a linha
de produção da P&G utilizando a Internet (na época, em grande ascensão) em conjunto
com a tecnologia de sua área de pesquisa, os Identificadores por Radiofrequência (RFID,
Radiofrequency Identifiers). Sua ideia era eliminar, ao limite do que era tecnologicamente
possı́vel, as falhas, perdas e atrasos pertinentes ao ambiente de produção industrial, cau-
sados pela dependência de intermediários humanos para a troca de informações entre
dispositivos. Em sua visão, esses problemas só deixariam de existir quando as máquinas
pudessem interagir entre si e tomar decisões otimizadas sem precisar da interferência hu-
mana. Para ele, a integração entre a Internet e os RFIDs era a variável restante para
solucionar esta equação (Ashton 2009).
Atualmente, 20 anos depois daquela apresentação, Ashton tornou-se referência no
empreendedorismo de tecnologia e ainda hoje alavanca o desenvolvimento de soluções
de RFID que sejam integráveis ao mundo altamente interligado em que vivemos. Sua
expressão, “Internet das Coisas”, um arranjo de três palavras que tanto chamou a atenção
de acionistas, entusiastas e da mı́dia especializada da época, hoje carrega um significado
muito maior do que as próprias palavras. Algo que vai além do RFID e da Internet. É um
conceito que define a complexa e crescente integração dos elementos ao nosso redor em
uma malha inteligente, se adaptando para desempenhar melhor seus papéis e estando a par
das rápidas mudanças que ocorrem no mundo contemporâneo. Alguns estudiosos inclusive
preferem utilizar um novo termo, mais abrangente, a “Internet do Tudo” (Internet of
Everything), que engloba todas as relações entre dados, pessoas e a tecnologia (ou seja,
todas as “coisas”, por assim dizer) no mundo atual (Buyya e Dastjerdi 2016).
A metafisicidade do conceito de IoT, sendo uma área que integra pessoas com diferentes
formações e diferentes visões, acaba por tornar sua definição bastante fluida e pouco
intuitiva para o entendimento de um leigo. Porém, o cerne de toda essa subjetividade
conceitual é bastante sólido e simples: IoT é toda e qualquer tentativa de integração
pervasiva de tecnologia que permeia um ou mais aspectos do cotidiano (Atzori, Iera e
Morabito 2010).
As formas de integração são diversas, geralmente se recorrendo a tecnologias de comu-
nicação sem fio, como Wi-Fi, Bluetooth, ZigBee, GSM e o já mencionado RFID, já que
é muitas vezes menos complexo e menos custoso gerenciar canais de comunicação pelo ar
do que gerenciar redes de cabos e barramentos. Inúmeras são as aplicações existentes e
o potencial para o surgimento de novas aplicações é imenso, inviabilizando uma tenta-
tiva de classificação detalhada destas. A quantidade de dispositivos integrados em IoT
também é ampla, já sendo maior do que a população humana. Espera-se que, em 2020,
seja alcançada a marca dos 12 bilhões de dispositivos conectados (Vilarino 2017).
Traçando um paralelo com as classificações de redes sem fio por alcance, é possı́vel
mencionar três sub-áreas da IoT que possuem grande força no mercado atual: a WLAN
e as Smart Homes, a WMAN e as Smart Cities e a WPAN e os Smart Wearables.
Enquanto os conceitos de Smart Homes e Smart Wearables já possuem algumas
décadas de mercado, a ideia de Smart Cities (ou Cidades Inteligentes), apesar de ser tão
antiga quanto as demais, apenas prosperou nos últimos anos, tendo como principal causa o
surgimento de redes de informação cada vez mais complexas, essenciais em integrações de
larga escala, como no caso de sistemas metropolitanos. Com a crescente necessidade por
18

um sistema que comporte este tipo de complexidade, naturalmente tecnologias baseadas


em Wi-Fi e Ethernet são as primeiras escolhas (Zanella 2014).
Entretanto, o uso de redes de larga escala de Wi-Fi e Ethernet demanda uma também
grande infraestrutura para seu funcionamento, com a instalação de servidores, antenas,
vias para cabeamento, dentre outros. O projeto destas infraestruturas exige tempo e
dinheiro, o que torna sua adoção por órgãos de gestão pública um processo bastante
lento e delicado, especialmente considerando que muitos polı́ticos não têm conhecimentos
técnicos necessários para implementação de medidas que facilitem esta modernização.
Outro grande problema para redes de IoT em escalas metropolitanas é o peso da
logı́stica necessária para processar todos os dados constantemente fornecidos por inúmeros
dispositivos de uma maneira organizada e eficiente. Para Zanella (2014), a questão da
logı́stica de dados e a problemática da adoção por órgãos públicos podem ser solucionadas
ao se estabelecer em cada região metropolitana um corpo público, como um departamento
ou uma secretaria, dedicado somente a gerenciar a integração inteligente da cidade.
Enquanto não se estabelece uma solução definitiva a respeito de como integrar metrópoles
de maneira inteligente, as cidades se automatizam de maneira orgânica, gerando inúmeros
micro-cosmos de IoT por iniciativas próprias, em áreas de aplicação diversas, seja pela mão
de empresas, associações e ONGs, ou mesmo pela mão de pessoas fı́sicas (Petrov 2019).
Nesses micro-cosmos, em que raramente é necessária uma rede densa de informações,
as demais tecnologias de comunicação acabam se sobressaindo. Segundo Colotta et al.
(2018), com o desenvolvimento de sua 5a geração, o Bluetooth vem se especializando cada
vez mais para atender as necessidades dos pequenos e médios desenvolvedores de IoT. Na
Indústria, também é possı́vel encontrá-lo, disputando espaço com o já bem estabelecido
ZigBee. Entretanto, o alcance limitado destas tecnologias as torna pouco eficientes em
aplicações de controle e/ou monitoramento a longas distâncias.
Desse nicho, inicialmente pequeno, porém em rápida expansão na atualidade, surgiu
a demanda para uma tecnologia aplicável em sistemas embarcados que concilie tanto
a eficiência energética quanto o grande alcance. Às soluções que surgiram para suprir
esta demanda, deu-se o nome de Rede de Grande Área e Baixo Consumo (LPWAN, Low
Power Wide Area Network ), das quais os exemplos mais conhecidos são o SigFox e o
LoRa. Espera-se que, até 2022, 100% da população humana possua cobertura LPWAN
(Patel, Shangkuan e Thomas 2017).
Para obter bom desempenho no alcance de transmissão sem aumentar o gasto de
potência, as tecnologias LPWAN precisam sacrificar seu desempenho na velocidade de
transmissão. O Sigfox investe fortemente no quesito de longa distância, possuindo um
alcance nominal de até 50km, mas com isso, sacrifica sua velocidade de transmissão,
limitada a apenas 100bps. O LoRa, por outro lado, possui abordagem que visa balancear
tanto longas distâncias quanto rápidas velocidades de transmissão, com taxas de dados na
ordem de dezenas de kbps e com um alcance nominal na faixa de 10km (Medeiros 2018).
A maioria das aplicações baseadas em LPWAN hoje envolve Redes de Sensores sem Fio
(RSSF), que por si só não necessitam de um sistema que transmita longos pacotes a altas
velocidades. No entanto, tendo em vista que LPWAN é um tópico especialmente quente
na atualidade de IoT, é razoável assumir que, em pouco tempo, haverá uma demanda
considerável de redes de baixo consumo e longas distâncias capazes de transferir largas
quantidades de dados a velocidades razoáveis.
Um tipo de aplicação que imediatamente irá se beneficiar deste tipo de tecnologia
são as Redes de Sensores de Imagem Sem Fio (RSISF), atualmente já implementadas
em diversas áreas, como em Segurança Pública, Monitoramento Ambiental, Robótica de
19

Enxame, Aeronaves Não-tripuladas (Drones Militares), Observação Espacial, entre outros.


Os dados com que as RSISF tipicamente lidam, as Imagens, são volumosos por na-
tureza. A tı́tulo de exemplo, uma imagem RAW (Sem Compressão) com resolução 4K e
profundidade de cor de 24 bits ocupa mais de 189MB. Por conta disso, o avanço das RSISF
está intimamente ligado ao avanço no desenvolvimento tanto de dispositivos embarcados
que realizem processos de compressão de imagem quanto de dispositivos de transmissão
a longas distâncias com altas velocidades.
Dadas as restrições da atualidade, a tecnologia preferida para implementar RSISF é
o Wi-Fi. No entanto, há um grande interesse, tanto por parte de pesquisadores quanto
pela comunidade leiga em se desenvolver soluções baseadas em LPWAN. Nos artigos
Pham (2016) e Jebril et al. (2018), dois exemplos de RSISF aplicados a monitoramento
são apresentados. Em ambos os casos, os trabalhos explicitam as dificuldades de imple-
mentação por conta da tecnologia atual, porém justificam que, mesmo com as limitações
tecnológicas, as RSISF baseadas em redes LPWAN ainda possuem diversas vantagens.

1.1 Motivação
Neste contexto, para que se desenvolvam soluções mais eficientes no futuro, é preciso
analisar as alternativas tecnológicas disponı́veis no momento.
A tecnologia LoRa tem tido bastante sucesso em outros tipos de RSSF, bem como
em aplicações ponto-a-ponto de sensoriamento remoto, com diversos estudos de caso que
comprovam sua aplicabilidade. No caso das RSISF, no entanto, existem poucos trabalhos
acadêmicos que apresentem resultados conclusivos.
Vê-se então a necessidade de contribuir com a área, investigando a aplicabilidade de
uma rede RSISF baseada em LoRa. Como desafio adicional, decidiu-se por implementar
esta rede do zero, utilizando componentes de baixo custo. Dessa forma, é preciso verificar,
além do funcionamento da rede, o funcionamento dos elementos da mesma, ou seja, o Nó
Sensor, o Gateway e a Central de Dados. Tendo isso em vista, é possı́vel desenvolver estes
três elementos antes da implementação da RSISF, ao imaginá-los como um sistema de
comunicação ponto-a-ponto, contendo um único Nó Sensor.
Busca-se, com isso, não apenas verificar a eficiência de RSISF baseados em LoRa, mas
também a viabilidade em implementar sistemas de processamento remoto de imagem com
dispositivos de baixo custo.

1.1.1 Objetivos Gerais


No presente trabalho, tem-se como objetivo principal a implementação de um Sistema
Inteligente de Monitoramento e Identificação Sem Fio baseado na tecnologia de Baixo
Consumo LoRa.
Este sistema deve ser composto por três estágios: uma central de processamento, uma
interface para recebimento de dados e um módulo embarcado.
A operação do sistema deve ser inteiramente autônoma. Ao detectar a presença hu-
mana, o módulo embarcado deve capturar a imagem dos indivı́duos detectados e então
enviá-la à central de processamento. Nesta unidade central, deve-se realizar o reconheci-
mento facial de indivı́duos contidos em cada imagem obtida, através de um algoritmo de
Detecção e Reconhecimento Facial, escrito na linguagem Python.
20

1.1.2 Objetivos Especı́ficos


Como objetivos especı́ficos deste trabalho, propõe-se:

• Implementar um dispositivo embarcado capaz de detectar a presença de seres hu-


manos e transmitir sem fio uma captura de imagem;

• Projetar uma interface de recepção ponto-a-ponto para dados seriais;

• Desenvolver um algoritmo de reconhecimento facial capaz de identificar rostos co-


nhecidos e extrair rostos desconhecidos nas imagens recebidas;

• Validar a funcionalidade do sistema através de experimentos;

• Verificar a viabilidade da tecnologia LoRa em sistemas com transmissão de grande


quantidade de dados.

2 LoRa
O Rádio de Longo Alcance (LoRa, Long Range Radio) foi desenvolvido em meados de
2008 pela empresa Cycleo, no pólo tecnológico de Grenoble, França. Desde sua criação,
sua relevância vem apenas aumentando. De acordo com estatı́sticas do Google (Figura
2.1), vê-se três picos de interesse no termo de acordo com o gráfico apresentado. O mais
recente, em Maio de 2019, época em que ocorreu a conferência IoT World 2019, sugere
que o LoRa tem sido cada vez mais utilizado em equipamentos e soluções para IoT.

Figura 2.1: Interesse ao Longo do Tempo para o termo “LoRa”

FONTE: Google Trends (2019)

Desde 2012, o LoRa tornou-se propriedade intelectual da empresa Semtech, uma das
fundadoras da LoRa Alliance, uma organização sem fins lucrativos dedicada ao desenvol-
vimento e difusão das redes LPWAN para IoT (Alliance 2019).
21

Segundo Augustin et al. (2016), pode-se definir um sistema LoRa como uma com-
posição de duas camadas de operação: sendo uma camada fı́sica, a Modulação LoRa, e
uma camada de rede, a LoRaWAN. Na Figura 2.2, exemplifica-se a divisão proposta, onde
os elementos na metade inferior representam a camada fı́sica e os elementos na metade
superior representam a camada de rede.

Figura 2.2: Camadas de Operação do LoRa

FONTE: Adaptado de LoRa Alliance (2015)

Em termos de uma analogia simplificada ao Modelo OSI, o que a LoRa Alliance define
em sua documentação como “‘Camada Fı́sica” engloba tanto as camadas fı́sica quanto de
enlace de dados do modelo OSI, enquanto que sua “Camada de Rede” engloba as cinco
demais camadas do modelo.

2.1 Camada Fı́sica


A camada fı́sica, desenvolvida e patenteada pela Semtech, tem como objetivo uma
comunicação sem fio de baixa potência e longas distâncias, baseada em uma técnica de
modulação de espalhamento espectral denominada Espalhamento Espectral Chirp (CSS,
Chirp Spread Spectrum).
O CSS é uma técnica de espalhamento espectral baseada em chirps (inglês para “gor-
jeios”), que são ondas que variam em frequência ao longo do tempo. Dentre as vantagens
de se utilizar chirps em conjunto com o espalhamento espectral, pode-se mencionar uma
grande imunidade a ruı́do de canal, uma melhor eficiência energética e um maior alcance
na transmissão.
O espalhamento espectral é tipo de técnica de modulação que é definida por expandir
o sinal de interesse, com uma largura de banda de informação Rb de forma a ocupar
uma largura de banda de transmissão Rc muito maior. Estas técnicas são a base do
funcionamento de sistemas em Acesso Múltiplo por Divisão em Código (CDMA, Code
Division Multiple Access). Comparado a um sistema em Acesso Múltiplo por Divisão em
Frequência (FDMA, Frequency Division Multiple Access), em que uma largura de banda
disponı́vel Rc seria dividida em N canais de largura Rb = Rc /N e cada usuário seria
alocado a um canal Rb , em um sistema com espalhamento espectral cada usuário poderia
ocupar qualquer parte do espectro (ou todo ele) durante uma transmissão, com mais de
um usuário transmitindo simultaneamente (Haykin e Moher 2008).
Ainda segundo Haykin e Moher (2008), duas das técnicas de espalhamento espectral
mais utilizadas são o Espalhamento Espectral por Sequência Direta (DSSS, Direct Se-
quence Spread Spectrum) e o Espalhamento Espectral por Salto em Frequência (FHSS,
22

Frequency Hopping Spread Spectrum). Em geral, técnicas de espalhamento espectral pos-


suem maior tolerância à interferência, baixa probabilidade de detecção ou interceptação,
maior tolerância a multipercursos e uma maior capacidade de alcance. Um exemplo de
espalhamento espectral pode ser observado na Figura 2.3.

Figura 2.3: Processo de Espalhamento de Sinal

FONTE: Adaptado de Semtech (2015)

A quantidade de espalhamento obtida em um processo de modulação DSSS pode ser


modelada em função da razão entre a taxa de variação da sequência de código (ou chip
sequence) e a taxa de bits do sinal mensagem, como mostrado na Equação (2.1):
 
Rc
Gp = 10 · log10 [dB] (2.1)
Rb
Em que Gp representa o ganho de processamento, expresso em dB, Rc é a taxa de
variação do código, expressa em chips/s e Rb é a taxa de bits, expressa em bits/s.
A modulação CSS, apesar de ser baseada no espalhamento espectral, não é similar às
suas principais técnicas, o DSSS e o FHSS. Diferente destas, que utilizam componentes
de sinais aleatórios para codificar os sinais de mensagem, a CSS utiliza a variação linear
de frequência inerente aos Chirps como forma de codificação. Por conta disso, Vangelista
(2017) propõe que uma melhor nomenclatura para a técnica seria Modulação de Deslo-
camento de Chirp em Frequência (FSCM, Frequency Shift Chirp Modulation) já que, na
prática, esta técnica utiliza o chirp como uma espécie de portadora e codifica a mensagem
na própria variação de frequência.
Segundo a Semtech (2015), sua modulação LoRa utiliza Chirps no espalhamento es-
pectral de modo a atuar como uma versão mais eficiente da modulação DSSS, tendo
como grandes vantagens uma menor complexidade na construção de demoduladores de
sinal, maior imunidade ao Desvanecimento e ao efeito Doppler, maior robustez e maior
alcance. Entretanto, por ser uma técnica patenteada, é difı́cil precisar exatamente o quão
mais eficiente ela é nestes aspectos em relação à outras tecnologias existentes no mercado
(Elshabrawy e Robert 2018).
A taxa de bits da modulação LoRa, segundo descrito pela Semtech (2015), pode ser
representada pela Equação:
4
Rb = SF · ( ) · Rs [bits/s] (2.2)
4 + CR
23

Em que Rb é a taxa de bits da modulação (Modulation Bit Rate), SF é o fator de


espalhamento (Spreading Factor ), CR é a taxa de codificação (Coding Rate) e Rs é a taxa
de sı́mbolos (Symbol Rate), expressa por:
1 BW
Rs = = SF [simbolos/s] (2.3)
Ts 2
Em que SF é o fator de espalhamento (Spreading Factor ) e BW é a largura de banda
da modulação (Bandwidth). Já a taxa de variação de código Rc pode ser definida por:
BW SF
Rc = Rs · 2SF = · 2 = BW [chips/s] (2.4)
2SF
Em que Rs é a taxa de sı́mbolos (Symbol Rate), SF é o fator de espalhamento (Spre-
ading Factor ) e BW é a largura de banda da modulação (Bandwidth).
Com relação aos pacotes de dados transmitidos pela modulação LoRa, apresenta-se,
na Figura 2.4, sua estrutura básica.

Figura 2.4: Estrutura de Pacotes LoRa

FONTE: Adaptado de Semtech (2016)

O preâmbulo é um trecho da mensagem utilizado para indicar ao receptor a chegada


de um novo pacote. Por padrão, possui 12 sı́mbolos de comprimento, mas este pode ser
alterado por software através dos valores inseridos em dois registradores de 8 bits, RegPre-
ambleMsb e RegPreambleLsb, permitindo preâmbulos com comprimentos entre 6 e 65535
sı́mbolos. Um receptor ocioso só entra em modo de leitura após detectar corretamente o
preâmbulo no tamanho pré-configurado. Caso contrário, permanece em um laço periódico,
tentando detectar o preâmbulo correto.
O cabeçalho indica informações básicas a respeito da mensagem, como o comprimento
de seu conteúdo, a taxa de FECC e a presença ou não de um CRC de 16 bits. Ao final
do cabeçalho, também há um CRC próprio. Quando a taxa de codificação (CR) e a
Checagem de Redundância Cı́clica (CRC, Cyclic Redundancy Check ) são conhecidos e
fixos em todos os transceptores, é possı́vel utilizar o modo de cabeçalho implı́cito, onde
este trecho do pacote é omitido na transmissão.
A mensagem (Payload ) possui um comprimento variável de 1 a 255 bytes e um CRC
próprio, de caráter opcional (que pode ser habilitado ou desabilitado nas configurações
da transmissão), de 16 bits.
A duração do envio de cada pacote Tpacote , também chamada de Perı́odo no Ar, pode
ser definida através da Equação:

Tpacote = Tpreamb + Tmsg [s] (2.5)


24

Em que Tpreamb representa o tempo necessário para enviar o preâmbulo do pacote e


Tmsg representa o tempo necessário para enviar a mensagem em si. O tempo de preâmbulo
pode ser facilmente encontrado com:

2SF
Tpreamb = (npreamb + 4, 25) · Ts = (npreamb + 4, 25) · [s] (2.6)
BW
Em que npreamb é o comprimento simbólico (quantidade total de sı́mbolos) configurado
em RegPreambleMsb e RegPreambleLsb e Ts é o perı́odo de sı́mbolo, definido pelo fator
de espalhamento SF e pela largura de banda BW .
O tempo de mensagem pode ser encontrado de maneira similar através da fórmula:

2SF
Tmsg = nmsg · Ts = nmsg · [s] (2.7)
BW
Em que Ts é o perı́odo de sı́mbolo e nmsg é o comprimento simbólico da mensagem
espalhada espectralmente, calculado pela equação:
(
(8 + ∆), se ∆ > 0
nmsg = [simbolos] (2.8)
8, se ∆ 6 0
Em que ∆ é dado pelo resultado da função teto (ceil ) na seguinte relação:

 
(2 · P L − SF + 7 + 4 · CRC − 5 · IH) · (CR + 4)
∆= [simbolos] (2.9)
(SF − 2 · DE)

Em que P L é o tamanho do conteúdo da mensagem (1 a 255 bytes), SF é o fator de


espalhamento (de 6 a 12), IH representa o modo de cabeçalho (0 para modo explı́cito, 1
para modo implı́cito), CRC indica se o CRC da mensagem está sendo utilizado (0 para
desativado e 1 para ativado), DE é o modo de otimização para taxas de dados baixas (0
para desativado e 1 para ativado) e, por fim, CR indica a taxa de codificação (de 1 a 4).

2.2 Camada de Rede (LoRaWAN)


Em LoRa Alliance (2015), descreve-se a LoRaWAN como um protocolo de rede otimi-
zado para dispositivos, móveis ou fixos, alimentados à bateria. Sua disposição tı́pica segue
a topologia de uma Rede Estrela, onde múltiplos Dispositivos Nós (também chamados de
End Devices) são conectados a múltiplos Gateways (aumentando a redundância na trans-
missão para diminuir a taxa de erro) que, por sua vez, repassam os pacotes ao Servidor
de Rede, de onde são direcionados para os Servidores de Aplicação, onde é executada a
Camada de Aplicação, mencionada na Figura 2.2. A topologia tı́pica de uma LoRaWAN
pode ser observada abaixo, na Figura 2.5.
O Gateway é o dispositivo responsável por gerenciar os dados de um ou vários end
devices e condicioná-los para serem enviados a um servidor de rede. Os Servidores de Rede,
por sua vez, são dispositivos responsáveis por centralizar e gerenciar todas as informações
do sistema, além de prover filtragem de redundâncias, checagem de segurança e verificações
de erro mais robustas (Medeiros 2018).
25

Figura 2.5: Topologia de Rede LoRaWAN

FONTE: Adaptado de Augustin et al. (2016)

Segundo a Lora Alliance (2015), a camada da rede LoRaWAN categoriza seus End
Devices em três classes: A, B e C.

2.2.1 Classe A
A Classe A permite ao dispositivo utilizar comunicações bi-direcionais onde, após cada
transmissão uplink de um dispositivo, lhe são permitidos dois curtos intervalos de recepção
downlink. O uso de downlink é restrito apenas a estes intervalos. A operação na Classe A
é a que gera menor consumo e é indicada para dispositivos com aplicações que só requerem
curtas (ou nenhuma) comunicações de downlink com o servidor (Alliance 2017).
As mensagens de uplink são enviadas pelos End Devices até o Servidor de Rede e
podem ser repassadas por um ou mais Gateways. Estas mensagens são transmitidas no
modo explı́cito, que inclui um cabeçalho (PHDR) e seu CRC (PHDR CRC). O CRC de
16 bits da mensagem também é incluı́do. Na Figura 2.6, apresenta-se a estrutura básica
das mensagens de uplink :

Figura 2.6: Estrutura de Mensagem de Uplink

FONTE: Adaptado de LoRa Alliance (2015)

As mensagens de downlink são enviadas pelo Servidor para um único End Device, sendo
repassada também por um único Gateway. Estas mensagens também são transmitidas
no modo explı́cito, mas o CRC de 16 bits da mensagem não é incluı́do. Apresenta-se, na
Figura 2.7, a estrutura básica das mensagens de downlink :

Figura 2.7: Estrutura de Mensagem de Downlink

FONTE: Adaptado de LoRa Alliance (2015)


26

O princı́pio do janelamento para recepção de mensagens downlink em dispositivos de


Classe A segue uma estrutura como a indicada na Figura 2.8.

Figura 2.8: Janelamento de espaços para recepção na Classe A

FONTE: Adaptado de LoRa Alliance (2015)

O primeiro intervalo de downlink (RX1) utiliza a mesma taxa de dados e frequência


utilizadas no uplink e pode ser atrasado através do parâmetro RECEIVE DELAY1, po-
dendo variar até 20 microssegundos. Já o segundo intervalo de downlink (RX2) possui
uma frequência e taxa de dados pré-configuráveis e o parâmetro RECEIVE DELAY2 para
alterar seu atraso em até 20 microssegundos.

2.2.2 Classe B
A Classe B permite ao dispositivo utilizar comunicações bi-direcionais da mesma forma
que a Classe A, porém possui intervalos adicionais alocados para recepção downlink. Esta
classe de dispositivos recebe um sinal (Beacon) a cada vez que seus intervalos adicionais
se repetem. Este modo de operação é indicado para dispositivos que não se adequem nem
à Classe A e nem à Classe C.
A Estrutura de Mensagens de Uplink e Downlink na classe B é exatamente idêntica
à presente na Classe A, bem como os janelamentos de recepção que ocorrem a cada
transmissão uplink. O intervalo de recepção sincronizado através de um Sinal (Beacon)
tı́pico de dispositivos da Classe B é ilustrado na Figura 2.9.

Figura 2.9: Estrutura de uma Recepção sincronizada por Sinal

FONTE: Adaptado de LoRa Alliance (2015)


27

Quatro parâmetros definem os perı́odos relacionados ao Beacon de recepção. Para


que o dispositivo de Classe B seja capaz de utilizar este intervalo de recepção, ele deve
ser sincronizado de modo que receba os dados imediatamente após o perı́odo de BEA-
CON RESERVED terminar, durante a janela de tempo definida em BEACON WINDOW.
O Parâmetro BEACON PERIOD define o intervalo de tempo entre dois Sinais (Beacons)
e o parâmetro BEACON GUARD define um perı́odo de “Acolchoamento”, para garantir
que não hajam colisões ou conflitos entre a transmissão de downlink e a transmissão do
próprio Beacon (Alliance 2017).

2.2.3 Classe C
A Classe C permite ao dispositivo utilizar comunicações bi-direcionais com acesso
contı́nuo a uma janela de recepção downlink, de modo que os dispositivos podem receber
informações do servidor a qualquer instante. Este modo de operação é o que gera maior
consumo, porém também é o que oferece menor latência para comunicação Servidor-
Dispositivo.
Assim como no caso da Classe B, a Classe C possui as mesmas estruturas de mensagem
de Uplink e Downlink da Classe A. Por outro lado, as caracterı́sticas exclusivas da Classe
B não lhe são herdadas. Sua diferença reside na estrutura do janelamento de recepção,
como mostrado na Figura 2.10.

Figura 2.10: Janelamento de espaços para recepção na Classe C

FONTE: Adaptado de LoRa Alliance (2015)

Aqui, de maneira similar ao janelamento da Classe A, ocorrem dois intervalos de


downlink, também denominados RX1 e RX2. Estes possuem as mesmas caracterı́sticas de
frequência e taxa de dados definidas na Classe A. Além disso, para RX1, um atraso pode
ser configurado utilizando o parâmetro CLS2 RECEIVE DELAY1. Entretanto, todo o
perı́odo não utilizado pela janela RX1 após uma transmissão será ocupado pela abertura
da segunda janela, RX2, até o começo do próximo Uplink.

3 Sensores Piroelétricos (PIR)


Os Sensores do tipo Passivo Infravermelho (PIR, Passive Infrared ) são uma classe de
dispositivos capazes de detectar radiação no espectro infravermelho. Estes possuem tal
nomenclatura para serem diferenciados dos Sensores Infravermelhos Ativos e, ao contrário
destes, não são capazes de emitir luz infravermelha.
28

Os Sensores Piroelétricos, popularmente conhecidos como Sensores de Presença ou


Sensores de Movimento, são um tipo de sensor PIR baseado em piroeletricidade, muito
utilizados comercialmente para detecção de movimento humano. É o mais famoso dos
sensores do tipo PIR e, por conta disso, comumente refere-se a ele pelo próprio termo
“Sensor PIR”. Sua aplicação mais comum é o acionamento de lâmpadas automáticas,
mas também podem ser encontrados em descargas de banheiro automáticas e em portas
automáticas.
A piroeletricidade (em que o sufixo piro- deriva do grego Pyr, significando fogo) é
uma propriedade fı́sica presente em alguns cristais ferroelétricos e pode ser descrita como
a capacidade de um material gerar uma pequena tensão quando sofre uma mudança
de temperatura. Sendo mais especı́fico, o fenômeno da piroeletricidade é a geração de
um potencial eletroquı́mico em um material cristalino ao ter sua estrutura alterada por
irradiação térmica. A nı́vel atômico, a radiação, ou seja, um feixe de fótons se movendo
a determinada frequência, colide com as moléculas cristalinas do material e transfere sua
energia cinética ao mesmo, no processo que é descrito pela fı́sica como transferência de
calor. Dessa forma, o fenômeno piroelétrico pode ser visto não como luminoso ou térmico,
mas como uma transferência de energia das partı́culas de radiação (fótons) para o material
cristalino (Fraden 1999).
Segundo Fraden (1999), o movimento natural dos átomos ocorre não somente no
núcleo, mas também em seu campo elétrico. Este campo elétrico em movimento, ou
campo elétrico variante, por sua vez produz um campo magnético variante. Com o campo
magnético variante, os átomos adjacentes são induzidos e produzem campos elétricos va-
riantes em resposta, propagando o campo eletromagnético da partı́cula em movimento.
Esta propagação recebe o nome de radiação térmica. Em termos práticos, pode-se afirmar
que todo corpo que possui massa, ou seja, que é composto por átomos, pode ser visto
como um gerador de radiação térmica.
A radiação térmica emitida por uma partı́cula ou objeto, por ser um fenômeno eletro-
magnético, pode ser expresso como um sinal periódico com determinado comprimento de
onda. Este comprimento de onda pode ser indiretamente correlacionado com a tempera-
tura do objeto que o emite, através da denominada Lei de Planck, descrita abaixo:

2 · h · c2 1 W
I= 5
· h·c [ 2 ] (3.1)
λ e λ·k·T − 1 m · sr · Hz
Nesta equação, I descreve a radiância de um determinado corpo, ou seja, a quantidade
de energia emitida por este corpo em um determinado comprimento de onda λ. A variável
k representa a constante de Boltzmann, de valor 1, 380649 · 10−23 J · K −1 , a variável h
representa a constante de Planck, de valor 6, 62607015 · 10−34 J · s e a variável c representa
a velocidade da luz no meio, sendo 2, 99792458 · 108 m · s−1 no vácuo.
Como três variáveis na Equação (3.1) são constantes, é possı́vel simplificá-la como:
C1 W
I= C2 [ ] (3.2)
λ5 · (e λ·T − 1) m2 · sr · Hz
Em que C1 é uma constante numérica de valor 3, 74 · 10−16 W · m e C2 é uma constante
numérica de valor 1, 47 · 10−2 K · m.
Objetos em altı́ssimas temperaturas tendem a emitir radiação com comprimentos de
onda entre 380nm e 780nm, compondo o denominado espectro de luz visı́vel (Figura 3.1)
e tornam-se incandescentes, emitindo um brilho colorido. O aumento de temperatura
29

é inversamente proporcional ao comprimento da onda irradiada, de modo que objetos


menos quentes emitem ondas de maior comprimento (Fraden 1999).

Figura 3.1: Espectro Visı́vel da Luz

FONTE: Info Escola (2019)

O Corpo Humano é capaz de emitir radiação térmica dentro de uma faixa de com-
primentos de onda de 5µm a 15µm, nas regiões denominada de Espectros Infravermelho
Médio e Longo (Fraden 1999). Estas emissões, apesar de não detectáveis pelos olhos, são
utilizadas pelos sensores piroelétricos para detectar a presença humana.
A construção desses sensores é baseada na ligação simétrica entre dois cristais pi-
roelétricos. De acordo com Fraden (1999), este arranjo simétrico é feito de modo a ate-
nuar o efeito piezoelétrico causado pela dilatação térmica dos cristais. Além disso, este
arranjo gera um defasamento de 180 graus de modo que, quando irradiados pelo mesmo
feixe, ambos os cristais produzam tensões elétricas que se anulem. Desta forma, o sensor
detecta a radiação infravermelha de maneira diferencial.
O cristal piroelétrico tipicamente é utilizado acoplado a dois eletrodos em suas ex-
tremidades. Ao conjunto se dá a nomenclatura de Detector Piroelétrico. Tomando cada
eletrodo como um terminal elétrico, seu comportamento ao receber radiação pode ser
modelado como um capacitor em paralelo a uma fonte de tensão controlada por radiação
térmica, como mostrado na Figura 3.2.

Figura 3.2: Analogia Elétrica do Detector Piroelétrico Irradiado

FONTE: RF Wireless World (2019)


30

Um circuito de condicionamento deve ser utilizado para se amplificar a tensão gerada


pelo cristal irradiado. A topologia mais utilizada é a de um transistor JFET polarizado
atuando como desacoplador de impedâncias para a tensão produzida pelo cristal, como
mostra a Figura 3.3.

Figura 3.3: Circuito de Condicionamento para o Cristal Piroelétrico

FONTE: Adaptado de Fraden (1999)

Dessa forma, quando um dos cristais for irradiado, produzirá uma corrente elétrica
proporcional à energia da irradiação absorvida. O valor tı́pico de corrente para uma
irradiação proveniente do corpo humano é de 1pA, de modo que, para se obter uma
tensão de saı́da tı́pica de 5V , de acordo com a Primeira Lei de Ohm, seria necessário
acoplar um resistor R com impedância de valor:
V 5V
R= = = 5 · 1012 [Ω] (3.3)
I 1pA
Por conta desse valor elevado, o desacoplamento de impedâncias promovido pelo JFET
é de extrema importância, já que a equivalência de impedâncias no circuito pode diminuir
severamente o valor de R e, por consequência, a tensão de saı́da obtida do sensor.
Este circuito é usualmente encapsulado em metal, o que permite uma maior isolação
da radiação presente no ambiente. A única abertura no encapsulamento encontra-se
diretamente acima do par de cristais e é coberta por um filme plástico transparente à
faixa de Infravermelho Médio e Longo (Figura 3.4).

Figura 3.4: Encapsulamento Metálico de um Sensor PIR

FONTE: Global Sources (2019)


31

Outro elemento importante em um sensor piroelétrico é sua lente. Por se tratar de um


elemento sensı́vel a ondas eletromagnéticas, seus resultados podem sofrer interferências
baseadas na forma como os feixes infravermelhos colidem com o sensor. Para evitar que
isso aconteça, um tipo especial de lente, denominada Lente de Fresnel (Figura 3.5) é
utilizada. Esta lente permite que um feixe infravermelho muito maior do que o próprio
sensor seja focalizado em um único ponto.

Figura 3.5: Lentes de Fresnel em um Circuito Piroelétrico

FONTE: Adafruit (2019)

4 Processamento Digital de Imagens


Sendo um campo de atuação do Processamento Digital de Sinais, o Processamento
Digital de Imagens (PDI) é uma área técnico-cientı́fica que engloba as técnicas utiliza-
das para lidar com aquisição de informações contidas em imagens e, por extensão, na
componente visual dos vı́deos.
Gonzalez e Woods (2001) definem imagem, do ponto de vista matemático, como uma
função de duas variáveis f (x, y), em que x e y representam as coordenadas (horizontal
e vertical, respectivamente) em um plano e f , dado qualquer par de coordenadas (x, y),
representa a intensidade luminosa da imagem naquele ponto. Dessa forma, a representação
digital de uma imagem pode ser modelada pela função:

P = P [(x, y), Iv ] (4.1)


Em que P representa um conjunto de valores discreto e limitado em função de um plano
de coordenadas (x, y) e de uma matriz de valores amostrados de intensidade luminosa Iv ,
relacionados a cada ponto no plano de coordenadas, expressos na unidade cd (Candelas).
Os valores de P são conhecidos como Elementos de Imagem, Elementos de Figura ou
Pixels (do inglês Picture Element). O Processamento Digital de Imagens, lida então, com
técnicas de interpretação e transformação dos valores contidos em conjuntos de pixels.
Em 1858, estabeleceu-se a primeira comunicação telegráfica entre a América do Norte
e a Europa (antes a comunicação era realizada inteiramente por barco). Inicialmente, a
comunicação era realizada entre a costa nordeste do Canadá (provı́ncia de Newfoundland)
e uma ilha ao sudoeste da Irlanda (Ilha de Valentia), perfazendo a menor distância possı́vel
entre os dois continentes. Nos anos que se seguiram, novas redes telegráficas foram estabe-
lecidas entre diferentes localidades dos dois continentes. E, apesar de mensagens de texto
32

serem rapidamente transmitidas nestas redes através do sistema de codificação Morse, a


transmissão de imagens, um tipo de conjunto de dados com alta densidade de informações,
era inviável. Isso mudou em 1921, com a invenção do Sistema de Transmissão de Imagens
Bartlane, capaz de transmitir imagens em menos de três horas entre Londres e Nova York
(Gonzalez e Woods 2001).
O sistema transmitia imagens em preto e branco, com apenas cinco nı́veis de intensi-
dade, o que nos dias de hoje não parece muita coisa, mas era uma tecnologia considerada
de ponta para a época. A recepção dos dados codificados era realizada por uma impres-
sora, que decodificava os dados e os imprimia em um papel especial, através de perfurações
pigmentadas. A transmissão era feita pela composição de cinco placas de zinco, onde cada
placa era exposta por diferentes perı́odos de tempo ao filme negativo de uma fotografia,
extraindo assim as cinco amostras de intensidade luminosa da fotografia original (Rensen
2004). A grande relevância deste invento está justamente no fato de que esta transmissão
era realizada no mesmo sistema de cabos telegráficos no qual se transmitiam mensagens
de texto. Por conta disso, esta é tida como a primeira implementação de um sistema de
PDI, tendo sido criado antes mesmo dos primeiros Sensores de Imagem Digitais.
Na atualidade, o PDI possui inúmeras aplicações, não se restringindo apenas ao pro-
cessamento de Imagens da perspectiva visual humana, indo além da faixa de Luz Visı́vel
e ocupando todo o espectro de frequências da radiação eletromagnética (Figura 3.1).
Uma das aplicações mais conhecidas do PDI é o Imageamento, que consiste na cap-
tura e reconstrução de imagens digitais de áreas que, por vezes não são visı́veis ao olho
humano ou não estão acessı́veis a observação a olho nu. A exemplo, temos o Imageamento
Biomédico, presente em diversos exames médicos, como a Ultrassonografia (Ultrassom),
a Ressonância Magnética (Ondas de Rádio), a Tomografia Óptica (Infravermelho e Luz
Visı́vel), a Radiografia (Raios X) e a Tomografia Computadorizada por Emissão de Fóton
Único ou SPECT (Raios Gama).
Outras tipos de imageamento notáveis são o Imageamento microscópico, como o uti-
lizado pada observar microorganismos ou estruturas moleculares de materiais cristalinos,
o Imageamento astronômico, utilizado para observar corpos celestes através da radiação
eletromagnética emitida e/ou refletida por estes e o Imageamento Terrestre.
No entanto, o PDI não se resume apenas ao Imageamento Digital. Outras aplicações
mais coloquiais possuem igual ou até maior importância que esta, como é o caso da
Compressão de Imagem, essencial em um mundo globalizado, onde transmissões e/ou
armazenamentos de dados ocorrem a todo momento.
Um último exemplo de aplicação, também visto neste texto, são as técnicas de De-
tecção de Formas e Objetos. Estas técnicas promovem análises subjetivas de imagens
digitais, com o objetivo de identificar certos padrões. Para isso, se aplicam tanto co-
nhecimentos de PDI quanto conhecimentos de aprendizado de máquina. As técnicas de
detecção de objetos são um dos pilares tecnológicos da ciência conhecida como Visão
Computacional, na qual o PDI exerce papel fundamental.

4.1 Visão Computacional


A Visão Computacional, ou Visão de Máquina, é uma ciência que busca dar a disposi-
tivos inteligentes recursos para interpretar e analisar ambientes de maneira gráfica, num
paralelo bastante direto à forma como a Visão Humana tem impacto na perspectiva dos
Seres Humanos em relação ao mundo em que vivemos.
33

Este paralelo não é pura coincidência ou um mero capricho dos estudiosos da área:
O propósito em si da Visão Computacional está atrelado à subjetividade que permeia
o potencial de aprendizado e experiências que o Homem é capaz de aquirir através da
visão. São muitos os exemplos de coisas que a psiqué humana assume como “trivial” ou
“instintivo” e que, na realidade, exige um intenso raciocı́nio subconsciente e/ou depende
de muitas informações adquiridas através dos dispositivos sensoriais humanos (dos quais,
os “Cinco Sentidos” são os mais conhecidos, porém não os únicos).
Reproduzir estas noções supostamente triviais em dispositivos completamente basea-
dos em lógica binária certamente causou dores de cabeça em muitos. Para resolver este
dilema, apenas duas soluções são possı́veis: Ou os desenvolvedores, de alguma forma,
adquirem a capacidade de pensar de forma puramente lógica e traduzem o conhecimento
subjetivo a algo que possa ser escrito em código de máquina ou estes realizam o processo
inverso e dão às máquinas os recursos necessários para que estas tenham noções subjetivas
e a capacidade de tomar decisões por conta própria. Sendo evidente a maior factibilidade
da segunda opção em relação à primeira, ela vem sendo implementada como abordagem
nas diversas áreas que compõem a Inteligência Artificial.
Tendo este contexto em mente, é possı́vel compreender o motivo pelo qual muitos
autores definem o conceito de Visão Computacional como algo capaz de compreender
imagens, não apenas de processá-las. A compreensão vai além da manipulação dos dados
puramente como números, envolvendo a capacidade de descrição, reconhecimento ou jul-
gamento de determinadas caracterı́sticas ou contextos presentes em uma imagem (Ballard
e Brown 1982).

4.2 Sensores de Imagem


Sensores de Imagem, de maneira geral, são qualquer tipo de dispositivo capaz de
capturar imagens na forma de informações codificadas, que podem ser utilizadas para re-
construir a imagem em um meio distinto. Estes sensores existem tanto como dispositivos
analógicos quanto como dispositivos digitais. Nos Sensores de Imagem analógicos, o pro-
cesso fundamental para captura da imagem é uma reação fotoquı́mica. Já nos Sensores
de Imagem digitais, o processo fundamental é uma reação fotoelétrica.
O termo “Fotografia” diz muito sobre a ideia por trás da captura de Imagens. Advinda
da combinação das palavras gregas Phōs (Luz) e Graphé (Desenho), “Fotografia” significa
literalmente “Desenhar com Luz”. Sua etimologia se encontra bastante próxima de sua
definição fı́sica. Segundo Nakamura et al. (2006), uma Imagem pode ser definida como
a variação de intensidade luminosa ou taxa de reflexão em função de sua posição em
um plano. O conceito de captura de imagem, então, é a habilidade de armazenar, como
informação, a radiação luminosa refletida por uma determinada região.
A captura de imagem (ou fotografia) e os Sensores de Imagem estão intrinsecamente
ligados. As origens do princı́pio fotoquı́mico utilizado em máquinas fotográficas analógicas
são tidas como fruto das pesquisas do professor alemão Johann Heinrich Schulze, no século
XVIII, que relacionavam diretamente o processo de descoloração ocorrida em soluções con-
tendo sais de prata (em especial Cloreto e Nitrato de Prata) e sua exposição à luz. Cerca
de 80 anos depois, no começo do século XIX, o inglês Thomas Wedgwood desenvolveria
o primeiro aparato capaz de gravar imagens com a ação de uma fonte de luz, utilizando
papel revestido com Cloreto de Prata. Ainda no mesmo século, William Henry Fox Tal-
bot apresentaria uma versão aprimorada da invenção de Wedgwood, capaz de capturar
detalhes como profundidade e textura, ao substituir o Cloreto de Prata por Iodeto de
34

Prata e utilizar um composto de Ácido Gálico e Nitrato de Prata para obter imagens
mais nı́tidas, denominadas por ele de Calótipos (Litchfield 1903).
Em 1885, a primeira versão de filme fotográfico seria criada, pela Eastman Kodak
Co., composta de nitrocelulose revestida com gelatina rica em sais de prata. O Filme
de nitrocelulose, ao ser exposto à luz durante um determinado perı́odo, sofreria uma
reação quı́mica em sua cobertura gelatinosa baseada em prata que imprimiria na celulose
uma imagem baseada nas componentes de luminosidade complementares à da imagem
capturada, denominada de negativo. Através do negativo obtido, seria possı́vel reconstruir
a imagem capturada em um papel quimicamente tratado, através de um processo lento e
controlado denominado de revelação fotográfica, uma versão aprimorada do processo de
calotipação de Talbot.
Ao dispositivo que realizava a captura de fotografias, ou seja, o conjunto do filme fo-
tossensı́vel e do mecanismo que regulava a exposição do filme, deu-se o nome de Câmera
Fotográfica, também chamada de Câmera de Haleto de Prata ou, posteriormente, simples-
mente de Câmera Analógica. Este nome foi inspirado na Camera Obscura (Sala Escura),
termo em latim que refere-se a um dispositivo criado na Idade Média para estudos sobre
óptica e tornou-se novamente popular no século XVI, quando passou a ser utilizado como
ferramenta por pintores da época.
A nitrocelulose (ou filme de nitrato), no entanto, poderia causar riscos à saúde em
exposição prolongada, além de ser altamente inflamável e explosiva. Por conta disso,
foi eventualmente substituı́da, até deixar completamente de ser produzida em 1951. Seu
substituto, o Acetato de Celulose, foi utilizado até a década de 1980, onde deu lugar ao
filme de poliéster (boPET), utilizado até os dias de hoje. Apesar da mudança de material,
o princı́pio em todos os filmes fotográficos permaneceu o mesmo.
Em um sentido estritamente etimológico, as Câmeras de Haleto de Prata e seus an-
tecessores podem ser considerados Sensores de Imagem Analógicos. Porém, na prática,
quando se utiliza o termo Sensor de Imagem, quase sempre se refere aos dispositivos di-
gitais de captura de imagem. E, enquanto os termos Sensor de Imagem e Câmera podem
ser utilizados de modo intercambiável para os sensores de haleto de prata, o mesmo não é
possı́vel para as Câmaras Eletrônicas, onde o Sensor de Imagem e o Armazenamento da
Imagem são componentes distintos (Figura 4.1).

Figura 4.1: Diferenças entre uma Câmera de Haleto de Prata e uma Câmera Digital

FONTE: Nakamura et al. (2006)


35

A primeira câmera eletrônica foi registrada em 1972, pela Texas Instruments (Adcock
1977), mas foi na década de 1980 que a Kodak, que no século anterior havia difundido
a Câmera de Haleto de Prata, popularizou as Câmeras Digitais, baseadas em disposi-
tivos eletrônicos. Estas, lentamente dominariam o mercado ao longo das duas décadas
seguintes, até que finalmente as grandes empresas fabricantes de câmeras fotográficas
descontinuariam a produção das Câmeras baseadas em Filme.
A grande vantagem no armazenamento eletrônico é que permitia às câmera digitais
uma capacidade de armazenamento muito maior do que as câmeras de filme da época. A
Figura 4.2 mostra a estrutura tı́pica de uma câmera digital, em diagrama de blocos.

Figura 4.2: Estrutura Tı́pica de uma Câmera Digital

FONTE: Nakamura et al. (2006)

4.2.1 CCD
Os sensores de imagem nas câmeras digitais (e em seu finado parente, as câmeras de
vı́deo estático), os dispositivos que de fato realizavam a captura de imagem, eram inici-
almente todos baseados na tecnologia de Dispositivo de Carga Acoplada (CCD, Charge-
Coupled Device), desenvolvido pela AT&T (Boyle e Smith 1973).
De acordo com Nakamura et al. (2006), o princı́pio de funcionamento do CCD baseia-
se no conceito de utilizar a dopagem eletrônica de materiais semicondutores como forma de
armazenamento e a deriva eletrônica ocorrida em junções P-N como forma de transferência
de dados. A camada sensora do CCD é composta por uma matriz de fotodiodos (elementos
semicondutores sensı́veis à luz) e capacitores de deslocamento do tipo Óxiodo Metálico
Semicondutor (MOS, Metal Oxide Semiconductor ). Com a exposição dos fotodiodos à
radiação da luz visı́vel, estes produzem uma corrente elétrica, que acumula nos capacitores
acoplados a eles uma determinada quantidade de elétrons proporcional às intensidades
luminosas em que os fotodiodos foram submetidos. Esta determinada quantidade de
elétrons em cada capacitor forma o que é chamado de “Poço de Potencial Elétrico”. A
porção da imagem que o poço de potencial detecta é armazenada em um pixel.
Em cada linha de capacitores MOS, o conjunto de poços de potencial pode ser trans-
ferido aos capacitores adjacentes ao se aplicar tensões nas Portas de cada capacitor de
36

maneira sincronizada, produzindo um efeito similar ao de um Registrador de Desloca-


mento Analógico. Dessa forma, torna-se possı́vel obter as informações armazenadas em
cada capacitor de maneira serial em cada coluna, de modo que estas podem ser condicio-
nadas na forma de sinais digitais e armazenadas em registradores de memória (Nakamura
et al. 2006).
O processo de transferência de pacotes de elétrons pode ser modelado pela seguinte
equação:

Q(t) t0
≈ [C] (4.2)
Q0 t0 + t
Em que Q(t) é a carga restante em um capacitor no tempo t, Q0 é sua carga inicial e
t0 é o instante de tempo inicial, definido por:

π · L3 · W · Cef f
t0 = [s] (4.3)
2 · µ · Q0
Em que L e W são o comprimento e largura do eletrodo do capacitor, respectivamente,
µ é a mobilidade elétrica e Cef f é a capacidade do óxido por unidade de área, também
referida como Cox .
A tensão necessária aplicada no eletrodo do capacitor para que este inicie a trans-
ferência de elétrons pode ser descrita pela fórmula:
Q0
∆V = V1 − V0 = [V ] (4.4)
L · W · Cef f
A eficiência na transferência de pacotes pode ser expressa pela razão:
Qt 1
η=( ) N · 100 [%] (4.5)
Qi
Em que Qi representa a carga inicialmente contida no primeiro capacitor e Qt repre-
senta a carga que foi transferida ao capacitor seguinte, com N sendo o número de estágios
necessários para realizar a transferência.

4.2.2 CMOS
No começo da década de 1990, surgiu uma tecnologia que se provaria uma confiável
alternativa ao CCD: o Sensor de Imagem baseado nos Semicondutores Complementar de
Óxido Metálico (CMOS, Complementary Metal Oxide Semiconductors). Estes sensores
também são conhecidos como Sensores de Pixels Ativos (APS, Active Pixel Sensors). Cada
pixel é capturado por um conjunto de um fotodiodo e um capacitor chaveado CMOS.
Sua construção apresentava três grandes vantagens em relação aos sensores de imagem
CCD. A primeira era o consumo reduzido, ao se utilizar elementos de alta impedância
(transistores complementares) no lugar de capacitores, reduzindo o consumo de corrente,
além de uma menor tensão de alimentação necessária (tipicamente 2,5 V ou 3,3V em
relação aos 8V ou 15V do CCD). A segunda era uma maior miniaturização, já que os
CMOS com mesma capacidade de armazenamento ocupavam um menor espaço. A terceira
era a capacidade de leitura de pixels individuais por comando. No entanto, os primeiros
modelos de sensores CMOS possuı́am um alto ruı́do no barramento de leitura e uma
considerável interferência de corrente escura no valor transferido do fotodiodo ao CMOS.
Estas desvantagens na qualidade da imagem fariam com que, inicialmente os sensores
37

CMOS fossem restritos ao uso em câmeras mais simples, como Webcams, Câmeras de
Celular e Toy Cameras (Nakamura et al. 2006).
Porém, muitas desvantagens dos sensores CMOS foram compensadas com o passar dos
anos, especialmente se utilizando de tecnologias inicialmente pensadas para CCDs. Atu-
almente, os sensores de imagem CMOS constituem a maioria dos dispositivos fotográficos,
sendo os CCD utilizados apenas em câmeras profissionais ou dispositivos que capturam
resoluções muito grandes (Nakamura et al. 2006).
Em sensores CMOS, a forma tı́pica de leitura é conhecida como Leitura X-Y, ou
Rolling Shutter. Com a capacidade de operar cada CMOS individualmente, cada pixel é
capturado e lido, elemento por elemento, linha por linha, como ilustrado pela Figura 4.3.

Figura 4.3: Leitura de Pixels em Rolling Shutter

FONTE: Nakamura et al. (2006)

Toda a varredura dos sensores dura uma fração de segundo e este procedimento con-
some quantidades consideravelmente menores de energia em relação ao CCD, que deve
manter alimentada toda a matriz de capacitores a todo instante para poder capturar os
pixels da imagem. No entanto, apesar da relativa rapidez de toda a varredura da matriz
38

de pixels, objetos muito velozes frequentemente são distorcidos na captura da imagem,


por conta do movimento linear de leitura. Este problema não é visto na tecnologia CCD,
que captura toda a imagem simultaneamente, serializando apenas a etapa de leitura dos
dados.

4.3 Processamento de Cores


Segundo Gonzalez e Woods (2001), o uso de cores no processamento de imagens é
motivado por dois motivos: por sua alta capacidade de realçar objetos em uma cena e
por conta da peculiaridade da visão humana, que é capaz de diferenciar milhares de tons
de cores, mas apenas algumas dezenas de tons de cinza.
Essencialmente, estes motivos resumem as principais aplicações do uso de cores em
PDI, ou seja, quando as cores são uma informação importante para identificação de ob-
jetos e/ou quando o processamento de imagem tem como objetivo a visualização por
algum indivı́duo, como no caso de transmissões de TV ou, sendo mais contemporâneo,
em streamings de vı́deo na internet.
A base fundamental para o processamento de imagens a cores é a conceituação fı́sica
do que de fato são as cores. Quando radiação eletromagnética (Figura 3.1) incide sobre
qualquer objeto, nunca há uma total reflexão ou total absorção dos feixes. O que define
quais feixes serão refletidos e quais feixes serão absorvidos por um objeto depende tanto da
frequência de oscilação dos feixes quanto do tamanho das partı́culas do objeto. Em outras
palavras, há uma relação particular de frequências eletromagnéticas que são absorvidas e
refletidas por cada objeto.
O que torna objetos visı́veis é meramente uma extensão deste conceito, de modo que a
visibilidade é causada pela reflexão de radiação eletromagnética na faixa de frequência de
luz visı́vel. Como subproduto, um objeto pode ser percebido com uma certa tonalidade
ao absorver a maior parte da radiação visı́vel e refletir apenas um ou mais trechos desta
região, relativos a determinadas cores (Figura 4.4).

Figura 4.4: Relação entre a percepção de cores e a reflexão de radiação de luz visı́vel

FONTE: Adaptado de IDO (2016)

4.3.1 Percepção Visual Humana


Muito da forma como cores são processadas em computadores e muito da sua im-
portância para PDI tem a ver com a forma com que os seres humanos enxergam o mundo,
39

num sentido literal. À nossa forma de interpretar o que vemos é dado o nome de Percepção
Visual Humana. E apesar de não se saber os detalhes que envolvem o processamento de
informações na visão, sabe-se a forma como essas imagens são adquiridas nos olhos.
O sistema visual humano apresenta muitas caracterı́sticas similares às câmeras digitais
modernas, o que abre espaço para diversas analogias entre os elementos de ambos os
sistemas. Os olhos atuam como os sensores de imagem, a córnea como lente, as pupilas
como obturadores e o cérebro como a Unidade Central de Processamento (CPU, Central
Processing Unit).
Uma outra analogia interessante é utilizar a estrutura ocular humana como base para
explicar o conceito de luzes RGB e a escolha desse modelo de espaço de cores como um
dos primeiros a ser utilizado em computadores. Na Figura 4.5 é mostrado um diagrama
da estrutura do olho humano.

Figura 4.5: Estrutura do Olho Humano

FONTE: Klima Naturali (2011)

As imagens capturadas pelo olho humano são refletidas através do Cristalino na parede
ocular conhecida como Retina, mais especificamente na região chamada Fóvea. Ao incidir
este reflexo sobre a Fóvea, células especializadas são capazes de converter a luz refletida
em estı́mulos bioelétricos que podem ser interpretados pelo cérebro humano. Esta é a
forma como o sistema visual humano interpreta o que chamamos de ”Visão”. E as células
responsáveis por este processo de conversão são denominadas Células Fotorreceptoras
(Bowmaker e Dartnall 1980).
Os Fotorreceptores podem ser agrupados em dois tipos principais: Os cones e os bas-
tonetes. Sendo os cones responsáveis por detectar as cores (crominância) e os bastonetes
responsáveis por detectar a intensidade luminosa (luminância) de uma imagem (Bowma-
ker e Dartnall 1980).
Os bastonetes são extremamente sensı́veis a variações de luminância, podendo identi-
ficar variações a nı́veis de fótons individuais. Já os cones são menos sensı́veis a variação
e precisam de um número maior de fótons para serem estimulados. Segundo Gonzalez e
Woods (2001), o olho humano contém em sua retina cerca de 120 milhões de bastonetes
e 6 a 7 milhões de cones, distribuı́dos na seguinte disposição (Figura 4.6):
40

Figura 4.6: Distribuição de Células Fotorreceptoras na Retina Humana

FONTE: Adaptado de Gonzalez e Woods (2001)

Ainda segundo Gonzalez e Woods (2001), os cones podem ser divididos em três subti-
pos: os cones com forte resposta à frequência de luz vermelha, que correspondem a cerca
de 65% de todos os cones, os com forte resposta à frequência de luz verde, que corres-
pondem à cerca de 33% da quantia total e os com forte resposta à frequência de luz azul,
compondo 2% de todos os cones (e sendo, então, o mais sensı́vel dos três subtipos). Como
a faixa de absorção desses fotorreceptores, apesar de centrada especificamente nas cores
vermelho, verde e azul, possuem largas áreas de sensibilidade, é possı́vel ter a percepção
de diversas outras faixas de frequência através de uma resposta simulada, fruto da com-
binação dos três tipos de cones. Dessa forma, é possı́vel definir o espectro de luz visı́vel, do
ponto de vista da percepção visual humana, como uma gradiente de composições das cores
primárias: vermelho, verde e azul. Na Figura 4.7, são mostradas as faixas de frequência
luminosa em relação à intensidade de absorção para os três tipos de cones, representados
pelas iniciais de suas cores em inglês: Red (R), Green (G) e Blue (B).

Figura 4.7: Faixas de absorção de luz visı́vel para os três tipos de cones

FONTE: Adaptado de Gonzalez e Woods (2001)


41

Tomando como base a percepção relativa de cores da visão humana descrita anteri-
ormente, os primeiros sistemas de interface a cores utilizavam valores para as três cores
primárias de forma a compor toda uma variedade de cores observáveis. Esse conjunto,
conhecido como Modelo de Cores RGB (do inglês Red, Green and Blue), foi tomado como
base para criação de um dos primeiros Espaços de Cores.

4.3.2 Espaços e Modelos de Cores


Espaços de cores são elementos gráficos utilizados para representar fisicamente a abs-
tração de um modelo de cores. A amostragem dos espaço de cores em sistemas digitais é
necessária pois não é possı́vel representar modelos de cores diretamente através de funções
aritméticas, por serem modelos matemáticos contı́nuos (Haran e Pound 2015b).
O Espaço de Cores mais simples e mais conhecido é o baseado no modelo RGB. Este
é um modelo aditivo, onde as três componentes primárias R, G e B representam eixos
em um espaço tridimensional e qualquer componente de cor pode ser representada como
uma soma vetorial destes três vetores. Segundo Ballard e Brown (1982), o RGB é um
bom padrão tanto para aquisição quanto para exibição de cores em imagens, mas não é
particularmente bom para definir a percepção de cores em si. Este modelo é comumente
utilizado em monitores e telas digitais. Na Figura 4.8, mostra-se uma representação do
Espaço de Cores RGB.

Figura 4.8: Representação Abstrata do Espaço de Cores RGB

FONTE: Wikipédia (2019)

Outro espaço de cores relativamente simples e também muito utilizado é o baseado


no modelo CMYK. Este é um modelo subtrativo, com quatro componentes primárias,
sendo Ciano (Cyan), Magenta, Amarelo (Yellow ) e Preto (Black ). É muito empregado
em impressoras e outras máquinas que realizam composições utilizando pigmentos, pois
verificou-se que um modelo de cores subtrativo funciona melhor que um aditivo ao ser
aplicado sobre papel branco (Haran e Pound 2015b). Na Figura 4.9, apresenta-se uma
representação do Espaço de Cores CMYK.

Figura 4.9: Representação Abstrata do Espaço de Cores CMYK

FONTE: Wikipédia (2019)


42

Em sequência, temos mais dois espaços de cores similares. Estes, porém, são repre-
sentados por um espaço cilı́ndrico. São os espaços HSL e HSV, contendo uma variação
angular do espectro de Matizes ou Tons (Hues), que é a representação da variação pura
de cores, sem adição de branco ou preto, uma variação radial do espectro de Saturação
(Saturation), que representa o nı́vel de mescla da cor com o branco ou preto. A diferença
entre o HSL e o HSV está em seu terceiro parâmetro, na variação vertical. No HSV, o
terceiro parâmetro representa o espectro de Valor (Value), que indica a intensidade ou
opacidade da cor (quanto maior, mais forte a cor, quanto menor, mais fraca e escura).
Já no HSL, o terceiro parâmetro representa o espectro de Luminosidade (Lightness), que
indica o brilho da cor (cores bem definidas estão no meio da escala, cores muito escu-
ras estão na base da escala e cores muito claras estão no topo). Na Figura 4.10, são
demonstradas representações para ambos espaços de cores.
Figura 4.10: Representação Abstrata dos Espaços de Cores HSL e HSV

(a) Modelo HSL (b) Modelo HSV


FONTE: Wikipédia (2019)

O próximo espaço de cores foi, por muito tempo, o padrão de cores utilizado para o
serviço de transmissão de televisão para o sistema NTSC. O espaço de cores YIQ foi um dos
primeiros espaços a realizar a separação entre luminância e crominância. Sua disposição é
dada por uma componente vertical Y, representando a informação de luminância (Luma)
e componentes horizontais para representação de planos de crominância (Chroma) pelas
componentes I e Q (termos herdados da modulação QAM, utilizada por emissoras de
televisão). Apresenta-se, na Figura 4.11, o plano de crominâncias do espaço de cores YIQ
para um valor de luminância de Y = 0,5.
Figura 4.11: Plano de Crominâncias do Espaço de Cores YIQ para Y = 0,5

FONTE: Wikipédia (2019)


43

O último espaço a ser mencionado é o Y’CbCr. Na realidade, este ultimo é uma classe
de espaços de cores, da qual o YIQ também faz parte. As componentes horizontais Cb e Cr
representam a Crominância com tendência para azul e a Crominância com tendência para
vermelho, respectivamente. A luminância continua sendo representada pelo parâmetro Y.
Mantendo o mesmo valor de luminância de Y = 0,5 mostrado no YIQ, tem-se outro plano
de crominâncias para este segundo modelo de espaço de cores Y’CbCr, como mostrado
na Figura 4.12.

Figura 4.12: Plano de Crominâncias de outro Espaço de Cores Y’CbCr para Y = 0,5

FONTE: Wikipédia (2019)

Em PDI, um dos espaços de cores mais utilizados é o Y’CbCr. Por separar as com-
ponentes de luminância e crominância, é possı́vel utilizar inúmeras técnicas para mani-
pulação de imagem com diversos propósitos, desde tratamento de fotografias até com-
pressão de arquivos (Haran e Pound 2015b).

4.4 Cores em Sensores de Imagem


Quando se busca definir o funcionamento de Sensores de Imagem Digitais em Nakagami
et al. (2006), bem como em outras fontes, dá-se bastante ênfase à noção de que estes
dispositivos são capazes de capturar apenas a intensidade luminosa de cada pixel, também
chamada de Luminância. De fato, componentes eletrônicos fotossensı́veis são influenciados
pela radiação luminosa a nı́vel de partı́cula (fótons), não distinguindo as caracterı́sticas
inerentes às ondas (feixes de fótons), como seu comprimento (λ) que, na prática, é o que
define os diferentes tipos de cores.
Na Figura 4.13, é apresentado um comparativo uma imagem com todo os componentes
de luminância e crominância na metade à esquerda e apenas os componentes de luminância
na metade à direita de modo a ilustrar uma comparação entre a imagem na “Vida Real”
e o que de fato é capturado pelos sensores de imagem.
44

Figura 4.13: Reprodução de uma Imagem Real (à esquerda) e sua Luminância (à direita)

FONTE: Gardener’s Path (2017)

A primeira solução encontrada para se capturar componentes de cor em sensores de


imagem foi apresentada em Bayer (1975), descrito como um Array de Filtros de Cores
(CFA, Color Filter Array) nomeado de Filtro de Bayer. O conceito por trás deste filtro é
de que três tipos de lentes sejam arranjadas em um padrão, onde uma lente absorve apenas
a cor vermelha, outra absorve apenas a cor verde e uma terceira absorve apenas a cor azul.
Por serem três componentes, não é possı́vel formar um mosaico simples utilizando seções
quadráticas do sensor de imagem. Na época, também era inviável economicamente utilizar
os três tipos de filtros para cada pixel. Como forma de otimização, então, pensou-se em
um arranjo que era composto por um filtro de pixel azul, um filtro de pixel vermelho e
dois filtros de pixel verdes. A escolha do verde para ser a cor com maior predominância se
deu pois o espectro de cor verde é o que representa mais fielmente a componente original
de luminância (Bayer 1975). Na Figura 4.14 está representado um arranjo de Filtro de
Bayer disposto sobre um sensor de imagem.

Figura 4.14: O arranjo de um Filtro Bayer sobre os pixels de um sensor

FONTE: Wikipedia (2019)

Como descrito, o filtro realiza a captura intercalada dos componentes a cada ciclo de
2x2 pixels e, durante a etapa de processamento, realiza a interpolação de cada pixel com
base nos valores armazenados nos pixels adjacentes. Para um pixel verde, ele calcula seu
valor de azul com base na média dos valores de pixels azuis adjacentes e seu valor de
vermelho com base na média dos valores dos pixels vermelhos adjacentes, os pixels azuis
e vermelhos então calculam os valores de verde e da cor remanescente com base na média
dos respectivos valores originais e interpolados dos pixels verdes adjacentes.
45

Outras alternativas ao filtro Bayer foram propostas ao longo dos anos. Na Figura 4.15
são apresentadas algumas das topologias de CFA existentes:

Figura 4.15: Topologias de CFAs alternativas ao Filtro de Bayer

(a) RGBE (b) CYGM (c) RGBW (d) XTrans


FONTE: Wikipedia (2019)

Além dos CFA, houveram empresas que decidiram integrar diretamente a captura de
cores com os sensores de imagem. Como ocorreu com o sensor de imagem Foveon X3, cu-
jos pixels são compostos de três camadas de fotodiodos, ajustadas para absorver espectro
azul, espectro verde e espectro vermelho em diferentes profundidades. Apesar da difi-
culdade de implementação deste sistema, em relação aos filtros CFA, a grande vantagem
era a possibilidade de se obter valores RGB reais, ao invés de valores aproximados por
interpolações. Na Figura 4.16 é mostrada uma vista de corte da estrutura semicondutora
utilizada nestes sensores de imagem.

Figura 4.16: O arranjo de fotodiodos e seus nı́veis de absorção no Foveon X3

FONTE: Adaptado de Wikipedia (2019)

4.5 Compressão de Imagem


O conceito de Compressão de Imagem, nada mais é do que uma caso especı́fico da
Compressão de Dados, aplicado ao PDI. Segundo Gonzalez e Woods (2001), o termo
“Compressão de Dados” refere-se ao processo de reduzir a quantidade de dados necessários
para representar uma determinada quantidade de informação. Nesta definição, se estabe-
lece uma distinção clara entre dados, ou seja, um valor armazenável, e informação, que
46

é o conteúdo obtido dos dados através de interpretação. Um exemplo para ilustrar essa
diferenciação pode ser o caracter ‘A’, cuja informação é a própria letra do alfabeto, mas
que pode ser armazenado na forma de dados através de um valor binário de 7 bits pelo
padrão ASCII, ou através de um valor binário de 32 bits pelo padrão UTF-8.
É possı́vel relacionar numericamente a razão entre o tamanho de uma informação e a
quantidade de dados utilizada para armazenar tal informação, na grandeza adimensional
conhecida como densidade de informação n, definida através da equação (4.6):
Ik
nk = (4.6)
Bk
Em que Ik representa a quantidade de informação contida no conjunto de dados k
(expressa abstratamente em unidades de informação) e Bk representa a quantidade de
dados presente no conjunto k (expressa geralmente em bits ou bytes).
Tendo dois conjuntos com quantidade de dados (B) distintas e mesma quantidade de
informação (I), denotados por n1 e n2 , podemos definir entre estas duas densidades uma
relação denominada Razão de Compressão:
n1
CR = (4.7)
n2
O propósito de quantizar relações na compressão de dados é poder mensurar o que é
chamado de Redundância de Dados, que pode ser definido matematicamente como o nı́vel
de relevância dos dados contidos em um conjunto para a interpretação de determinada
informação nele contida, expressa pela Redundância Relativa de Dados RD :
1
RD = 1 − (4.8)
CR
Onde o caso ideal é encontrado quando n2 = n1 , resultando em CR = 1 e RD = 0,
não havendo, então, dados redundantes. Casos indesejáveis são n2 << n1 ou n2 >> n1 .
Um caso tı́pico é uma razão de compressão de 10:1, ou seja CR = 10, que resulta em uma
redundância de 90% (RD = 0, 9) nos dados do primeiro conjunto em relação ao segundo
(Gonzalez e Woods 2001).
Gonzalez e Woods (2001) explica a importância do estudo da redundância de dados
em PDI, por conta de uma caracterı́stica tı́pica em imagens: Apesar de cada pixel ar-
mazenar um valor independente de intensidade, frequentemente os valores armazenados
possuem correlação com os valores de pixels adjacentes, não sendo incomum a existência
de sequências de vários pixels representando exatamente o mesmo valor em uma imagem.
Este é um tipo de redundância de dados denominada Redundância Espacial e é uma
das primeiras redundâncias a serem melhoradas quando se deseja comprimir arquivos de
imagens.
Uma técnica simples para reduzir a redundância espacial é a denominada Codificação
Run-Length (RLE, Run-Length Encoding). Esta técnica pode ser utilizada em qualquer
tipo de conjunto de dados e é particularmente eficiente para imagens, justamente por
reduzir o número de dados utilizados para representar uma sequência de valores repetidos.
O procedimento para representar uma imagem parte do array bidimensional de pixels.
Um processo de leitura iterativo é realizado, linha por linha, construindo uma sequência
numérica de pares ordenados na forma:

rn = (vn , cn )N
n=1 (4.9)
47

Em que cn é o comprimento do par, ou seja, a quantidade de bits no qual um valor


de pixel é repetido e vn é o valor de pixel propriamente dito. O ı́ndice n representa cada
instância de par ordenado na sequência run-length e seu limite superior N é definido
como menor ou igual ao número total de bits na imagem sem compressão, ou seja, altura
x largura x bits por pixel (Kumar 2011). O número de bits que pode representar cada
par ordenado pode ser calculado pela expressão:

b = log2 (vmax ) + log2 (cmax ) [bits] (4.10)


Em que vmax é a máxima quantidade de valores possı́veis para o par ordenado e cmax
é o máximo comprimento possı́vel que, pelo RLE ser construı́do linha por linha, sempre
será igual ao comprimento da imagem. Para ilustrar a aplicação do RLE, um exemplo é
apresentado na Figura 4.17.

Figura 4.17: Exemplo de Imagem a ser Comprimida

FONTE: Gonzalez e Woods (2001)

Acima, temos a versão binarizada (apenas preto e branco) de um trecho de esquemático


de uma Placa de Circuito Integrado (PCB, Printed Circuit Board ), escaneado a 330 Pontos
Por Polegadas (DPI, Dots Per Inches). A resolução da imagem no exemplo é de 1024 x
343 pixels. Já abaixo, na Figura 4.18, vemos a resposta em nı́vel de tons de cinza obtido
na leitura da linha de pixels 100. O limiar de binarização utilizado para se obter a Figura
4.17 foi de 50% entre os limites superior e inferior (ou seja, aproximadamente no nı́vel de
cinza 125).

Figura 4.18: Nı́vel de Cinza obtido na linha 100 da Figura 4.17

FONTE: Gonzalez e Woods (2001)


48

Sabendo-se que, pela binarização, todos os valores de tons de cinza acima do limiar
são representador por 1 e todos os valores abaixo são representados por 0, o trecho de
codificação run-length que representa a linha 100 deve ser, então:

r = [(1, 63), (0, 87), (1, 37), (0, 5), (1, 4), (0, 556), (1, 62), (0, 210)] (4.11)
O conjunto da linha 100 pode ser representado então, por 8 pares ordenados. Neste
exemplo, cmax = largura = 1024. Por ser uma imagem binarizada, tem-se que vmax = 2.
Logo, aplicando os valores na equação (4.10), temos:

b = log2 (2) + log2 (1024) = 11 [bits] (4.12)


Logo, a linha 100, originalmente composta de 1024 bits de dados, pode ser representada
da mesma forma utilizando-se apenas 88 bits de dados. Agora, executando o mesmo
algoritmo de RLE utilizado na linha 100 em todas as linhas da imagem, pode-se obter o
número de pares ordenados que pode representar a imagem por completo. Este número
não é estimável, pois depende do conteúdo da imagem analisada em si, sendo obtido
experimentalmente.
Felizmente, a quantidade de pares da imagem exemplo (Figura 4.17) é conhecida:
são necessários 12166 pares ordenados para representar toda a imagem. A partir da
equação (4.11), sabe-se que cada par ordenado é representado por 11 bits. Pode-se, então,
determinar o espaço ocupado pela imagem comprimida através do RLE. Como o valor da
imagem sem compressão também é conhecido, determina-se a razão de compressão obtida
pelo RLE através da equação:

(1024) · (343) · (1)


CR = = 2, 6245 (4.13)
(12166) · (11)
Com a razão de compressão, é possı́vel estimar a redundância relativa da imagem
original:
1 1
RD = 1 − =1− = 0, 6189 (4.14)
CR 6, 6245
Uma redundância relativa de 0,6189 significa, em outras palavras, que foi realizada
uma compressão efetiva de 61,89% dos dados originais.

4.5.1 Compressão JPEG


Um formato de compressão de imagem muito utilizado na atualidade e que utiliza como
uma de suas técnicas uma forma otimizada do RLE é o formato JPEG, que é denominado
em homenagem a seus criadores, o Grupo Conjunto de Profissionais da Fotografia (Joint
Photographic Experts Group), um comitê dedicado a aperfeiçoar e manter os padrões para
o formato JPEG.
Apesar de frequentemente ser confundido com um de seus subprodutos (o formato de
arquivo JFIF, que possui a extensão .jpg), o JPEG não é um formato de arquivo, mas
sim um formato de compressão (Haran e Pound 2019a).
Este formato é muito utilizado em diversas aplicações cotidianas, por permitir uma
alta taxa de compressão de dados em imagens, obtendo arquivos menores até mesmo do
que os obtidos em padrões de compressão para imagens na Internet (como em arquivos
de extensões .png e .gif ). No entanto, este formato de compressão possui perdas, o que
49

o torna desfavorável para aplicações com muito contraste (como em logotipos, caracteres
de texto e imagens vetorizadas) ou em imagens que precisam manter detalhes muito finos
(como em imagens astronômicas ou microscópicas).
O processo de compressão JPEG pode ser resumido em 8 etapas, descritas abaixo:

1. Transformação do espaço de cores RGB para o espaço de cores Y’CbCr;

2. Sub-amostragem dos componentes de crominância Cb e Cr.

3. Aplicação sequencial da Transformada Discreta do Cosseno (DCT, Discrete Cosine


Transform) utilizando uma máscara de 8 x 8 pixels;

4. Quantização sequencial utilizando uma máscara de quantização de 8 x 8 pixels.

5. Codificação Delta das componentes C.C. da Imagem.

6. Serialização dos pixels da imagem em uma sequência de zigue-zague, da menor para


a maior frequência;

7. Codificação Run-Length das sequências de zeros;

8. Codificação Huffman da string.

A primeira etapa consiste apenas em uma transformação de espaço de cores. Dada


a estrutura fotorreceptora do olho humano, faz-se por bem adotar no processamento de
dados da imagem um espaço de cores que distingua luminância e crominância, como é o
caso do Y’CbCr. O Processo de conversão do Espaço RGB para o Espaço Y’CbCr pode
ser equacionado da seguinte forma:

       
Y 0 0, 299 0, 587 0, 114 R
Cb  = 128 + −0, 168736 −0, 331264 0, 5  · G
 (4.15)
Cr 128 0, 5 −0, 418688 −0, 081312 B
Com a imagem convertida ao espaço Y’CbCr, é possı́vel alterar a proporção de seus
valores de crominância em relação aos valores de luminância. Dada a baixa sensibilidade
do olho à crominância, pequenas variações são imperceptı́veis a olho nu. Com isso, ambos
os valores de crominância (Cb e Cr) são sub-amostrados, geralmente numa proporção de
2:1, calculando o valor médio entre pixels a cada quadro de 2x2 e armazenando este valor
como um único pixel. A partir apenas dessa subamostragem, é possı́vel obter uma razão
de compressão CR = 2, reduzindo em 50% a quantidade pixels utilizados para representar
a imagem sem mudanças perceptı́veis (Haran e Pound 2019a).
A imagem é então dividida em subseções de 8x8 pixels. Cada seção passa individual-
mente por uma transformação utilizando DCT através de uma máscara de também 8x8
componentes de frequência cossenoidais (Figura 4.19). Cada elemento da matriz de pixels
é comparado com todos os componentes de frequência e são gerados pesos para cada com-
paração, que são somados e armazenados em uma nova matriz, na posição correspondente
ao pixel comparado (Haran e Pound 2019b).
50

Figura 4.19: Matriz de Componentes de Frequência Cossenoidais

FONTE: Wikipédia (2019)

Segundo Mahoney (2010), a equação que define o processo iterativo realizado da DCT
pode ser visto abaixo:

7 X
7
X π 1 π 1
Suv = α(u) · α(v) Sxy · cos[ · (x + ) · u] · cos[ · (x + ) · v] (4.16)
x=0 y=0
8 2 8 2

Em que x e y representam a posição horizontal e vertical, respectivamente, dos ele-


mentos de pixel Sxy contidos na matriz de 8x8 pixels. Suv representa um novo elemento
em uma terceira matriz 8x8, indicando o somatório das comparações de cada componente
com o pixel de mesmo ı́ndice. Os fatores de normalização α dependem de seus ı́ndices,
u e v, que também variam de 0 a 7 e representam uma variação horizontal e vertical,
respectivamente, de modo que:
( 1
( 18 ) 2 , se n = 0
α(n) = 1
(4.17)
4
, se n = 0
Os valores de Suv representam os coeficientes cossenoidais de cada elemento xy equi-
valente. Em sequência, a matriz Suv sofre uma multiplicação elemento-a-elemento por
uma matriz de quantização Q, de mesmas dimensões que Suv (8x8). Este tipo matriz é
tipicamente padronizada pelo formato JPEG, pois cada nı́vel de compressão necessita de
uma matriz Q única. A tı́tulo de exemplo, utilizou-se a matriz de quantização para uma
compressão de 50%, apresentada na Equação (4.18):
51

 
16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55 
 
14 13 16 24 40 57 69 56 
 
14 17 22 29 51 87 80 62 
Q=
18
 (4.18)
 22 37 56 68 109 103 77 

24 35 55 64 81 104 113 92 
 
49 64 78 87 103 121 120 101
72 92 95 98 112 100 103 99
Os coeficientes quantizados Buv são definidos através da relação:

Suv
Buv = (4.19)
Quv
O Passo seguinte é linearizar a matriz de coeficientes em um único string, utilizando
um padrão de zigue-zague, a Codificação de Entropia, como mostrado na Figura 4.20.

Figura 4.20: Ordem de serialização da matriz quantizada Buv

FONTE: Wikipédia (2019)

Para exemplificar o resultado desta etapa, utilizou-se os valores-exemplo da matriz de


coeficientes Buv apresentada em (4.20):
 
−12 −3 −6 2 2 −1 0 0
 0 −2 −4 1 1 0 0 0
 
 −3 1 5 −1 −1 0 0 0
 
Buv =  1 0 0 0 0 0 0 0
 (4.20)
 0 0 0 0 0 0 0 0
 
 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Aplicando a linearização na sequência mostrada na Figura 4.20, obtemos a seguinte
string para o exemplo (4.20):
52


−12, −3, −6, 2, 2, −1, 0, 0, 0, −2, −4, 1, 1, 0, 0, 0,

bn u·v
n=0 = −3, 1, 5, −1, −1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (4.21)

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

Nota-se que, com o processo de quantização, a matriz de coeficientes começou a apre-


sentar coeficientes nulos relativos às componentes de altas frequências. Na Codificação
de Entropia, estes zeros, geralmente adjacentes, são concentrados em grandes sequências,
como visto em (4.21). Com isso, é possı́vel utilizar codificação RLE para se livrar especi-
almente das sequências de zeros. Ainda utilizando o exemplo, temos:

(
(−12, 1), (−3, 1), (−6, 1), (2, 2), (−1, 1), (0, 3), (−2, 1), (−4, 1),
b= (4.22)
(1, 1), (0, 3), (−3, 1), (1, 1), (5, 1), (−1, 2), (0, 3), (1, 1), (0, 31)

A última etapa corresponde à implementação de codificação Huffman na sequência


de pares obtidas no RLE. Este tipo de codificação depende da probabilidade de certos
valores ocorrerem no dado.
O processo de descompressão pode ser realizado com relativa precisão na imagem
reconstruı́da, porém para isso é necessário se obter a exata matriz de quantização Q uti-
lizada na compressão. Para garantir que cada imagem seja descomprimida corretamente,
esta matriz é incluı́da em um cabeçalho junto ao conteúdo comprimido de pixels, no ar-
quivo JFIF. Além da matriz de compressão, são inseridos outros valores pertinentes à
reconstrução e processamento da imagem, como os valores de profundidade de cores RGB
(tipicamente 8 bits, 16 bits ou 24 bits), a resolução da imagem, a tabela de Huffman uti-
lizada na compressão e outras informações codificadas, além de utilizar duas marcações
especiais de 2 bytes cada para identificar o começo e fim do arquivo, 0xFFD8 e 0xFFD9.

4.6 SCCB
O Barramento Serial de Controle de Câmera (SCCB, Serial Camera Control Bus), é
uma interface de conexão de dispositivos desenvolvida pela OmniVision Technologies para
realizar a comunicação de seus Sensores de Imagem com dispositivos externos (OmniVision
2002).
Sua estrutura baseada em mestre-escravo podendo realizar comunicação full duplex, de
modo similar ao protocolo I 2 C e possui duas formas de implementação, sendo a primeira
denominada SCCB a 3 Fios (3-Wire SCCB) e a segunda denominada SCCB a 2 Fios
(2-Wire SCCB).
No SCCB a 3 Fios (Figura 4.21), o barramento contém os pinos SIO C, SIO D e
SCCB E e permite uma configuração de Único Mestre e Múltiplos Escravos. O pino
SIO C é alimentado pelo mestre com um sinal de relógio (clock ), o pino SIO D é tri-
state, bidirecional e transfere dados do mestre para o escravo e vice-versa. Por fim, o
pino SCCB E contém um sinal de controle unidirecional que indica o intervalo no qual
uma transmissão está sendo realizada, onde o inı́cio de transmissão é indicado por uma
borda de descida e o fim de transmissão por uma borda de subida, com o barramento
desocupado indicado por nı́vel lógico 1.
53

Figura 4.21: Diagrama de Blocos de um sistema SCCB a 3 Fios

FONTE: Adaptado de OmniVision (2002)

No SCCB a 2 Fios (Figura 4.22), o barramento contém os mesmos pinos SIO C e


SIO D, porém não possui o pino SCCB E. Assim, esta implementação pode ser utilizada
apenas em sistemas de Único Mestre e Único Escravo. Da perspectiva do Sensor de
Imagem, esta configuração se comporta como um barramento SCCB de 3 Fios onde o
pino SCCB E está sempre habilitado em nı́ve lógico 1 (barramento desocupado). Com
isso, para evitar conflitos de escrita e leitura nesta configuração, todo o controle do fluxo de
dados deve ser realizado por software pelo dispositivo mestre. Outra diferença importante
nesta implementação é que o pino SIO D não é tri-state.

Figura 4.22: Diagrama de Blocos de um sistema SCCB a 2 Fios

FONTE: Adaptado de OmniVision (2002)

A estrutura de dados transmitidos no barramento SCCB a 3 Fios segue uma lógica


relativamente simples, como mostrado na Figura 4.23. A transmissão é iniciada por uma
mudança de nı́vel lógico 1 para 0 no pino SCCB E, seguida por um sinal de nı́vel lógico 1
e imediatamente nivel lógico 0 em SIO D. Os bits de dados são enviados a cada perı́odo
de nı́vel lógico 0 no pino SIO C, até que um pacote de 9 bits seja enviado, sendo 8 bits
de dados e um bit de verificação (que pode ou não ser ignorado, dependendo do modo
de operação). Ao fim da transmissão, o pino SIO D exibe um sinal de nı́vel lógico 0
e imediatamente nı́vel lógico 1, seguido por uma borda de subida em SCCB E. Para o
SCCB a 2 Fios, a sequência de transmissão de dados é similar, porém a definição de inı́cio
e fim de transmissão são diferentes, sendo definidas por uma borda de descida em SIO D
com SIO C em nı́vel lógico 1 e por uma borda de subida em SIO D com SIO C em nı́vel
lógico 1, respectivamente.
54

Figura 4.23: Diagrama de uma Transmissão de Dados SCCB a 3 Fios

FONTE: Adaptado de OmniVision (2002)

Aos pacotes de 9 bits, dá-se o nome de Fase. Existem três ciclos de transmissão na
operação do SCCB, sendo eles:

• Um ciclo de escrita de 3 fases (Figura 4.24.a);

• Um ciclo de escrita de 2 fases (Figura 4.24.b);

• Um ciclo de leitura de 2 fases (Figura 4.24.c).

Figura 4.24: Ciclos de Transmissão no SCCB

(a) Escrita de 3 Fases

(b) Escrita de 2 Fases

(c) Leitura de 2 Fases


FONTE: Adaptado de OmniVision (2002)

O Ciclo de Escrita de 3 fases é um ciclo de transmissão onde o mestre escreve um


byte de dados em um escravo especı́fico. A primeira fase define o endereço do escravo, a
segunda fase define o registrador de memória naquele escravo ao qual se deseja escrever e
a terceira fase contém o dado a ser escrito. Em todas as fases, o nono bit será Don’t Care.
O Ciclo de Escrita de 2 fases serve para identificar um endereço de um registrador
especı́fico em um escravo, para realizar o ciclo de leitura em sequência. A primeira fase,
55

transmite o endereço do dispositivo e a segunda fase transmite o endereço selecionado do


registrador, com ambas as fases com Don’t Care no nono bit.
O Ciclo de Leitura de 2 fases, enviado sempre após um Ciclo de Escrita de 2 fases,
realiza a escrita dos dados solicitados a um escravo no buffer de leitura do mestre. A
primeira fase transmite o endereço do dispositivo, com o nono bit em Don’t Care e a
segunda fase transmite os dados solicitados, com o nono bit sendo forçado a nı́vel lógico
1 pelo mestre.
Uma grande vantagem associada ao uso do SCCB em Sensores de Imagem é a possibi-
lidade de se acessar e modificar as configurações do sensor simultaneamente ao envio do
array de pixels, ao custo de se adicionar apenas dois ou três fios. Este torna-se um fator
importante levando em consideração que dado o fluxo de dados extenso ocasionado pelo
envio de um único frame de imagem é muito influenciado pela velocidade média com que
se é possı́vel transmitir cada byte de dados, de modo que um barramento compartilhado
entre o array de pixels e o sistema de controle precisaria de muito mais tempo para enviar
a mesma imagem utilizando o mesmo hardware.
Outra caracterı́stica interessante do SCCB é sua compatibilidade direta com o I2C, o
que permite que qualquer dispositivo com interface I2C seja compatı́vel com sensores que
utilizem este barramento. De fato, muitos das placas integradas de sensores de imagem da
OmniVision utilizam uma entrada I2C como interface de acesso aos registradores e uma
entrada Interface Serial de Periféricos (SPI, Serial Peripheral Interface) como interface
de acesso ao temporizador do dispositivo (Timing Generator ).

5 Reconhecimento Facial
O Reconhecimento Facial é uma das várias técnicas de biometria existentes na atuali-
dade. Apesar de sua chance de falseabilidade ser maior do que sistemas como detecção de
ı́ris ou de impressão digital, o reconhecimento facial tem crescido bastante em interesse
nos últimos anos por ser uma técnica não invasiva de coleta e verificação de dados.
Atualmente, existem três correntes de desenvolvimento para algoritmos de reconheci-
mento facial:

• Os métodos de análise matricial, como algoritmos classificadores Cascade;

• Os métodos utilizando Histograma de Gradiente Orientado (HOG, Histogram of


Oriented Gradient), algoritmos classificadores baseados em Máquina de Vetores de
Suporte (SVM, Support Vector Machine);

• Os métodos utilizando Redes Neurais Artificiais (RNA) de Aprendizagem Profunda


(Deep Learning).

Os algoritmos de Cascade surgiram em 2001, através da introdução do Algoritmo de


Viola-Jones, conhecido popularmente por Haar Cascade. Estes algoritmos utilizam como
base um caso particular da Transformada Wavelet, denominada Transformada Haar ou
Wavelet de Haar (Viola e Jones 2001a).
Os algoritmos de HOG, apesar de já existirem desde a década de 1980, passaram a
ser utilizados no reconhecimento facial apenas com a publicação de Dalal e Triggs (2005).
Estes algoritmos utilizam os “Campos Vetoriais” obtidos pelo treinamento de estruturas
SVM para o treinamento de uma silhueta utilizada para identificar os objetos de interesse.
56

Os algoritmos de Redes Neurais de Aprendizagem Profunda (DNN, Deep Neural


Networks) são a técnica mais recente e moderna das três, motivo pelo qual vem even-
tualmente sendo a escolha nas aplicações de reconhecimento facial. Eles se popularizaram
em 2017, com o lançamento do novo algoritmo de reconhecimento facial do openCV, o
OpenCV-DNN, baseado em redes neurais convolucionais. O processo de treinamento nes-
tes algoritmos é mais demorado do que nos anteriores, por conta da relativa complexidade
das RNA. No entanto, os resultados obtidos geralmente possuem uma precisão e acurácia
muito maiores do que os outros métodos, de modo que acabam contrabalanceando os
pontos negativos.

5.1 Redes Neurais Artificiais


Redes Neurais Artificiais, segundo Haykin (2008), são máquinas projetadas para mode-
lar a forma como um cérebro humano realiza determinadas funções ou tarefas de interesse.
Pode-se descrevê-las então, como processadores massivamente paralelizados, compostos
de simples unidades de processamento, denominados “neurônios”, que têm propensão na-
tural a armazenar conhecimento adquirido por experiência e torná-lo disponı́vel para uso
posterior. Dessa forma, assemelham-se a um cérebro fı́sico em dois aspectos:

1. O conhecimento é adquirido pela rede advindo do meio através de um processo de


aprendizado;

2. As conexões entre neurônios, conhecidas como pesos sinápticos, são utilizadas para
armazenar o conhecimento adquirido.

Ainda utilizando da analogia do cérebro humano, as unidades básicas de processa-


mento da RNA, os neurônios, podem ser modelados como contendo, essencialmente, três
caracterı́sticas:

• Um conjunto de ligações (sinapses) com outros neurônios, onde cada um é caracte-


rizado por um peso próprio. Onde um sinal xj na entrada da sinapse j é conectado
a um neurônio k e, por isso, multiplicado pelo peso sináptico wkj ;

• Um somador de sinais de entradas, ponderados pelos pesos sinápticos de seus res-


pectivos neurônios;

• Uma função de ativação para limitar a amplitude da saı́da do neurônio.

Dessa forma, é possı́vel modelar um neurônio matematicamente pelo seguinte par de


equações:
(
uk = m
P
j=1 wjk · xj
(5.1)
yk = φ · (uk + bk )
Em que xj são os sinais de entrada, wjk são os respectivos pesos sinápticos do neurônio
k, uk é a combinação linear destes conjuntos, bk é a tendência (bias), um parâmetro externo
do neurônio k, φ é a função de ativação do neurônio e yk é o sinal de saı́da.
Existem múltiplas funções que podem ser utilizadas como função de ativação φ como,
por exemplo, degraus unitários e funções sigmóides.
57

A arquitetura das RNA tipicamente segue a estrutura de camadas, onde uma camada
inicial define os parâmetros de entradas e as camadas intermediárias, denominadas cama-
das ocultas, são compostas por arranjos de neurônios e sinapses. Por fim, a rede contém
uma última camada contendo um ou mais neurônios de saı́da. Na Figura 5.1 mostra-se
um exemplo de Rede Neural de alimentação positiva com uma única camada oculta e dois
neurônios de saı́da.
Figura 5.1: Estrutura básica de uma RNA com 1 camada oculta

FONTE: Adaptado de Haykin (2008)

O procedimento de aprendizado da RNA é denominado treinamento. Existem diver-


sas técnicas de treinamento, como Aprendizado Supervisionado, Aprendizado Reforçado,
Associação ou Reconhecimento de Padrões, Malha de Controle, dentre outras. O conceito
por trás de todas elas pode ser resumido em poucas palavras como uma otimização itera-
tiva dos parâmetros de peso sináptico wk e bias bk , para obter uma resposta de interesse.

5.2 Dlib
Dlib é um pacote de ferramentas (toolkit) independente e de código aberto, criado
em 2002 e desenvolvido a partir da linguagem C++, integrando recursos que promovem
soluções para as mais diversas aplicações (King 2017a).
Dentre as áreas abordadas por este toolkit, temos Aprendizado de Máquina, Com-
pressão de Dados, Interface de Redes, Paralelismo, Processamento de Imagem, Métodos
Numéricos, além de diversas aplicações menores em temas variados (King 2017a).
Para este projeto em especı́fico, foi utilizada a ferramenta de reconhecimento facial
disponibilizada no toolkit. O reconhecimento facial no Dlib possui desempenho equiparável
ao de sistemas de reconhecimento facial já bem estabelecidos, como o clássico sistema
baseado na biblioteca OpenCV utilizando o método Haar Cascade apresentado em Viola
e Jones (2004).
58

Em termos de arquitetura, trata-se de uma Rede Neural Residual (ResNet) com 29


camadas de convolução. O algoritmo obteve um nı́vel de acurácia de 99,38% em treina-
mentos com benckmarks conhecidos, como o Labeled Faces in the Wild (LFW).
O modelo utilizado no Dlib, apesar de possuir alguns contrapontos, como uma menor
área de delimitação das faces, geralmente omitindo partes da testa ou do queixo. Além
disso, seu treinamento garante reconhecimento confiável de faces com pelo menos 80x80
pixels (Gupta 2019). O algoritmo apresenta importantes vantagens em relação ao já
mencionado modelo Haar do OpenCV:

• Tem um menor tempo de processamento;


• Possui otimização para uso de GPU;
• Tem maior tolerância à obstrução de faces;
• É capaz de identificar rostos com ligeira inclinação;
• É muito mais robusto em relação a falsas detecções de faces.

Estas diferenças são proporcionadas pelo método utilizado, denominado Deep Metric
Learning (King 2017b). Antes de 2017, o sistema de reconhecimento facial do Dlib se
baseava na técnica de HOG, que utiliza um conjunto de campos vetoriais treinados para
detectar bordas e, com isso, encontrar rostos indiretamente através de suas silhuetas
(King 2014a). Este sistema baseado em HOG também apresentava muitas das vantagens
encontradas no sistema baseado em DML. Mas com o surgimento de técnicas mais eficazes
de reconhecimento facial envolvendo Deep Learning e RNA nos últimos anos, como as
apresentadas pelo sistema OpenCV-DNN (sucessor do OpenCV-Haar), também o Dlib
precisou ser atualizado, para se adequar novamente ao estado da arte.

5.3 Linguagem Python


Python é uma linguagem de programação criada em 1989 por Guido van Rossum, no
Instituto de Pesquisa para Matemática e Ciência da Holanda, baseada em diversas lingua-
gens de programação da época, como ABC, Modula-3 e C++, tendo sido originalmente
planejada para ser utilizada por fı́sicos e engenheiros em seus projetos (Borges 2010).
A linguagem possui uma sintaxe clara e concisa, com estruturas muito próximas às
utilizadas em linguagens humanas, motivo pelo qual é classificada como uma linguagem
de programação de altı́ssimo nı́vel (Very High Level Language).
É uma linguagem orientada a objeto e interpretada. Orientada a objeto pois é ca-
paz de definir estruturas de dados (denominadas “objetos”) com não somente atributos
próprios, mas também funções próprias. Interpretada pois pode ser executada pelo sis-
tema operacional diretamente na forma de algoritmo, sem a necessidade de passar por
um processo de compilação, que a traduza para linguagem de máquina.
Conta com uma quantidade numerosa de contribuidores e vem crescendo em populari-
dade nos últimos anos, estando entre as cinco linguagens de programação mais utilizadas
por usuários nas comunidades de desenvolvedores, como GitHub, Meetup e StackOver-
flow, além de ser uma das aptidões mais demandadas e mais bem pagas no ramo de
tecnologia (Srinath 2017).
Atualmente pode-se encontrar exemplos de seu uso em diversos nı́veis e ramos da
indústria mundial. Empresas no ramo de gestão de dados na internet, como Google e
59

Yahoo, utilizam massivamente o python para desenvolvimento web (Borges 2010). Em-
presas de animação, como Industrial Light & Magic, Pixar e Disney, utilizam a lingua-
gem no processo de criação de filmes de animação 3D (Lutz 2009). Desenvolvedoras de
eletrônicos, como Hewlett & Packard, Qualcomm e IBM utilizam o python em suas rotinas
de teste de hardware (Srinath 2017).

5.3.1 Módulo face recognition para Python


O projeto de nome “A API de Reconhecimento Facial mais simples do mundo para
Python e Linhas de Comando” (The world’s simplest facial recognition api for Python and
the command line), ou simplesmente conhecido pelo nome genérico de “Face Recognition”,
criado por Adam Geitgey em meados de 2017 é uma extensão (ou módulo) de Python,
compatı́vel com as versões 2.7 e de 3.3 em diante, que pode ser utilizado tanto integrado
a um algoritmo como em execução direta de API por linha de código. Na Figura 5.2,
apresenta-se um dos exemplos de aplicação mostrados na documentação do projeto.

Figura 5.2: Exemplo de aplicação em Python do módulo Face Recognition

FONTE: Geitgey (2017)

Trata-se de um algoritmo modularizado, encapsulado em um módulo python (equiva-


lente às bibliotecas da linguagem C), que se baseia nos recursos de codificação facial e
reconhecimento facial contidos na biblioteca Dlib. Por conta dessa modularização, apre-
senta duas vantagens em relação aos próprios algoritmos-exemplos de reconhecimento
facial disponibilizados no Dlib. Em primeiro lugar, a rede neural residual já encontra-se
configurada e treinada, o que poupa o tempo que seria despendido treinando a rede e
o esforço que seria feito para estabelecer um banco de imagens de treinamento. Além
disso, sua estrutura é planejada para ser utilizada como apenas algumas definições de
classes e chamadas de funções, de modo que as aplicações que utilizem este módulo sejam
transparentes ao código que é executado nele em segundo plano.
60

6 Descrição do Sistema
O sistema desenvolvido para este projeto pode ser descrito pelos seguintes estágios:

• Sensor Embarcado;

• Receptor de Dados;

• Unidade de Processamento.

6.1 Sensor Embarcado


O Sensor Embarcado proposto é responsável pelas etapas de detecção de presença,
captura e envio da imagem. O Hardware deste estágio é composto por cinco dispositivos,
conforme exibido na Figura 6.1:

Figura 6.1: Diagrama de Elementos do Sensor Embarcado Proposto.

FONTE: O Autor (2019)

6.1.1 Sensor de Imagem (Câmera)


Como câmera, adquiriu-se o módulo sensor de imagem OV7670 (Figura 6.2), baseado
em tecnologia CMOS. Este sensor é capaz de capturar imagens em seis formatos distintos,
sendo colorido ou escala de cinza com resoluções de até 640 x 480 pixels.
A interface SCCB é utilizada para a comunicação entre a câmera e o microcontrolador,
como é comum em sensores de imagem deste tipo. Para leitura dos dados capturados, a
câmera conta com um barramento de dados de 8 bits, que permite a leitura de um byte
por ciclo de envio.
61

Figura 6.2: Módulo Sensor de Imagem OV7670.

FONTE: Filipeflop (2013)

Os Formatos de Captura disponı́veis são YUV422, GRB422, RGB555, RGB565 e


RGB puro (Figura 6.3). Nos primeiros dois formatos, cada pixel ocupa 1 byte de dados.
No RGB565 e RGB555, cada pixel ocupa 2 bytes de dados. No RGB puro, cada pixel
ocupa 3 bytes de dados. Para se obter imagens em escala de cinza, se utiliza o formato
YUV422, onde 1 byte é enviado pelo sensor, mas apenas os 4 bits mais significativos são
armazenados, efetivamente ocupando meio byte de dados por pixel.

Figura 6.3: Formatos de Imagem compatı́veis com OV7670.

FONTE: O Autor (2019)

Fez-se um estudo detalhado do mapa de registradores e das bibliotecas comumente usa-


das para se trabalhar com este sensor, bem como a pesquisa de soluções para aplicações
similares. Entretanto, este módulo não possuı́a integrado em si nenhuma espécie de
62

memória intermediária (buffer ), dependendo inteiramente de software para armazenar


seus frames. E por conta da natureza dos arquivos de imagens por pixel terem grandes
dimensões, pôde-se apenas obter resultados preliminares de um sistema para detecção de
vı́deo em tempo real utilizando este sensor, sem nenhum tipo de memória externa.
Devido às restrições de tempo inerentes ao projeto, não foi possı́vel encontrar uma
solução para este problema ou um sensor alternativo para realizar esta função. Pensou-
se como alternativa, para dar continuidade ao desenvolvimento, utilizar um conjunto de
imagens pré-capturadas, armazenadas em um cartão de memória externo. Com isso, o
sensor embarcado que foi desenvolvido consistiu em um dispositivo ligeiramente diferente,
como mostrado no diagrama na Figura 6.4, após a exclusão do sensor de imagem.

Figura 6.4: Novo Diagrama de Elementos do Sensor Embarcado.

FONTE: O Autor (2019)

6.1.2 Armazenamento Externo


Como unidade de armazenamento externo, utilizou-se o módulo de MicroSD da Cata-
lex (Figura 6.5), em conjunto com um cartão microSD de 2GB de espaço de armazena-
mento.

Figura 6.5: Módulo de Cartão de Memória MicroSD.

FONTE: Aiea (2017)

A escolha desta forma de armazenamento e deste módulo se deu principalmente pela


grande quantidade de referência bibliográfica detalhando seu uso, bem como a praticidade
63

em poder verificar os dados armazenados em um computador.


A comunicação com um dispositivo de leitura e escrita de dados é feita através de um
barramento SPI, onde o módulo sempre atua como “escravo”, o que torna necessário o uso
de um microcontrolador ou microcomputador atuando como “mestre” (ou seja, gerando
o sinal de clock da operação) para que o procedimento seja realizado.
Inicialmente, a unidade de Memória teria papel secundário, armazenando todas as
imagens capturadas como um Datalogger. Porém, dadas as restrições de implementação
do Sensor de Imagem, esta unidade acabou por realizar o oposto de sua função inicial,
servindo como banco de dados para as imagens a serem transmitidas.
A adaptação desta unidade foi feita considerando a possibilidade de futuramente se
integrar um novo Sensor de Imagem ao sistema, já que o acesso ao armazenamento externo
independe da integração ou não de uma câmera, podendo tanto ser feito para se transmitir
um arquivo de imagem pré-definido quanto para se transmitir um arquivo de imagem
recém-capturado pelo sensor.

6.1.3 Unidade Microcontrolada


A Unidade Microcontrolada (UMC) é responsável por todo o processo de integração en-
tre as demais unidades. A UMC de escolha foi a placa de prototipagem Arduino Mega2560
(Figura 6.6), baseada no microcontrolador ATMega2560. A placa possui 256kB arma-
zenamento Flash e uma Memória SRAM de 8kB, além de contar com 54 pinos digitais
(sendo 16 capazes de gerar PWM) e 16 pinos analógicos. Essas vantagens tornaram-se
um atrativo para a implementação neste projeto. Em contrapartida, o custo elevado da
placa em relação a modelos de UMC mais comumente utilizados, como o Arduino Uno,
foi uma desvantagem a ser levada em consideração.

Figura 6.6: Placa de Prototipagem Arduino Mega2560 Rev3.

FONTE: Arduino Company (2019).

O diagrama de processos do microcontrolador do sensor embarcado pode ser observado


na Figura 6.7:
64

Figura 6.7: Diagrama de Processos do Sensor Embarcado Desenvolvido.

FONTE: O Autor (2019)

No sistema, o estado natural deste Microcontrolador é permanecer em um laço, veri-


ficando o sinal que o sensor de presença envia à UMC. Assim que este sinal atinge nı́vel
lógico ’1’, o microcontrolador solicita acesso ao cartão de memória, através do barramento
SPI.
Com acesso ao cartão, o microcontrolador solicita a abertura do arquivo de imagem que
foi pré-definido em sua programação (sendo necessário apenas passar o nome do arquivo
como parâmetro na chamada da função de abertura de arquivo) e entra em um segundo
laço, para realizar a operação de transmissão.
O laço de transmissão consiste em duas etapas: na primeira, o microcontrolador lê
um byte do conteúdo do arquivo, já na segunda, o microcontrolador escreve o byte lido na
porta virtual do módulo de comunicação para ser transmitido. Ao final de cada iteração
do laço, o microcontrolador verifica se todo o conteúdo do arquivo aberto foi lido. Em
caso afirmativo, o microcontrolador sai do segundo laço e retorna ao primeiro, aguardando
uma nova ativação pelo sinal do sensor de presença.
65

6.1.4 Transceptor LoRa


A comunicação do sistema foi baseada na modulação LoRa. O módulo escolhido para
esta função foi o E32-TTL-100 (Figura6.8), da empresa chinesa Chengdu Ebyte.

Figura 6.8: Módulo LoRa E32 da Ebyte.

FONTE: Chengdu Ebyte (2019).

Este dispositivo é baseado no chip LoRa SX1278, da Semtech, operando na faixa de


frequência móvel de 433MHz. Realiza a recepção de dados através de um barramento
serial TTL de 3,3V, podendo armazenar até 512 bytes de dados em seu buffer interno.
Segundo a documentação do módulo, é possı́vel atingir um alcance de até 3000m em
visada direta utilizando o consumo de apenas 120mA de corrente a 20dB · m de potência.
O módulo conta com sete pinos (Figura 6.9), sendo dois de alimentação (VCC e GND),
um pino de controle (AUX), dois pinos para dados seriais (RXD e TXD) e dois pinos para
configuração do Modo de Operação (M0 e M1).

Figura 6.9: Diagrama de pinos do E32-TTL-100.

FONTE: Chengdu Ebyte (2019).

Através do valor lógico imposto em M0 e M1, é possı́vel definir, por software ou por
hardware, o Modo de Operação do dispositivo, havendo quatro opções disponı́veis:

• O Modo de Transmissão Normal (00), em que o módulo pode utilizar todos os seus
recursos tanto como transmissor como receptor;

• O Modo Wake-Up (01), em que o transmissor ou receptor entra em modo de espera


até que seja ativado por um código de preâmbulo na recepção do pacote de dados;
66

• O Modo de Economia de Energia (10), utilizável apenas como receptor, em que a


porta serial é desabilitada até que o receptor receba o comando de se reativar e
transmita os dados recebidos logo após pela porta serial;

• O Modo Inativo (11), em que o dispositivo não atua como transmissor ou receptor,
recebendo apenas dados para configuração de parâmetros.

No Modo Inativo, é possı́vel enviar instruções em formato hexadecimal para a confi-


guração de parâmetros. Os formatos de instrução podem conter três ou seis caracteres,
segundo a Tabela 6.1, abaixo:

Tabela 6.1: Tabela de Instruções do módulo E32-TTL-100

No Instrução Descrição
1 C0 + <PARÂMETROS> Configura e Salva os Parâmetros Enviados
2 C1 C1 C1 Lê os Parâmetros Salvos no Módulo
3 C2 + <PARÂMETROS> Configura os Parâmetros Enviados (Sem Salvar)
4 C3 C3 C3 Lê os dados de versão do módulo
5 C4 C4 C4 Reinicia o Módulo
FONTE: O Autor (2019)

Os parâmetros utilizados para configurar o módulo são definidos nos 5 bytes inseridos
após C0 ou C2, nas instruções 1 ou 3, respectivamente. São eles ADDH, ADDL, SPED,
CHAN e OPTION. Seus possı́veis valores estão descritos em detalhe na documentação
do módulo.
O módulo foi configurado de modo a obter um melhor desempenho na transferência
de arquivos relativamente longos, como é o caso de imagens com boa resolução. A Tabela
6.2 exibe os valores definidos para cada parâmetro de configuração do módulo.

Tabela 6.2: Parâmetros de Configuração para o módulo E32-TTL-100

Endereço Canal (MHz) Taxa de Transmissão de Dados (bps) Baud Rate


0x0000 433 9600 9600
FONTE: O Autor (2019)

Esta configuração pode ser obtida pela instrução C2 00 00 1C 17 44. As transmissões


foram todas realizadas no modo de operação 0 (Modo Normal). A Justificativa para
a escolha dos valores de Baud Rate e de Taxa de Transmissão de Dados podem ser
observadas na seção 7.1.

6.1.5 Sensor de Presença


O sensor de presença escolhido é um módulo de detecção de movimento modelo HC-
SR501 (Figura 6.10). Este módulo é baseado no sensor piroelétrico LHI778. O tempo de
reaquecimento mı́nimo do sensor, ou seja, o menor tempo possı́vel entre duas detecções,
67

segundo a documentação, é de cerca de 7, 5s. Em sua implementação, no entanto, o


módulo apresentou em sua configuração de menor atraso, um valor ligeiramente maior,
de aproximadamente 8,6s.

Figura 6.10: Módulo HC-SR501

FONTE: RoboCore (2019).

O sensor possui um alcance de até 7m em um ângulo de 120o e uma entrada de


alimentação de 5 a 20V e uma saı́da lógica de 3,3V, sendo assim compatı́vel com a maioria
dos dispositivos embarcados.

6.2 Receptor de Dados


Dentre os estágios do sistema proposto, o receptor de dados é o mais simples, já
que seu objetivo é apenas servir de interface entre a transmissão LoRa e a unidade de
processamento. Para isso, são necessários três dispositivos: Um transceptor LoRa, um
microcontrolador e uma interface serial UART, como mostrado na Figura 6.11.

Figura 6.11: Diagrama de Elementos do Receptor de Dados

FONTE: O Autor (2019)

Para o transceptor LoRa, foi utilizado um segundo módulo E32-TTL-100, atuando


como receptor. Sua recepção é transparente em relação aos dados, sem nenhum tipo de
gerenciamento de transmissões. Isso ocorre apenas pelo fato do sistema proposto possuir
uma comunicação ponto-a-ponto, porém faz-se necessária uma forma de gerenciamento
de dados em uma rede contendo múltiplos transmissores, já que o sistema possui apenas
um único receptor por unidade de processamento.
O modo de operação e as configurações de parâmetros do receptor são exatamente
idênticas às do transmissor utilizado no sensor embarcado. Os detalhes destas informações
podem ser vistos na seção 6.1.4.
Para a função do microcontrolador e da porta UART, escolheu-se a placa de prototi-
pagem Arduino UNO (Figura 6.13). Sua escolha ocorreu pela ampla disponibilidade do
dispositivo e sua fácil utilização. Qualquer dispositivo que possua comunicação UART
68

e seja compatı́vel com o módulo E32, entretanto, pode ser utilizado como Receptor de
Dados.
O algoritmo executado pelo microcontrolador do Receptor também é, em sua totali-
dade, transparente aos dados, como mostra a Figura 6.12.

Figura 6.12: Diagrama de Processos do Receptor de Dados

FONTE: O Autor (2019)

O microcontrolador permanece em um laço, verificando se o módulo LoRa recebeu em


seu buffer qualquer byte de dados. Em caso afirmativo, o microcontrolador lê o byte e o
escreve na porta serial UART. Em seguida, ele retorna ao laço inicial.

Figura 6.13: Placa de Prototipagem Arduino Uno Rev3

FONTE: Arduino Company (2019).


69

6.3 Unidade de Processamento


Este é um estágio composto inteiramente por software e pode ser implementado em
qualquer dispositivo com capacidade para utilizar recursos de processamento de imagem
e de redes neurais.
Para este projeto, definiu-se como unidade de processamento um computador pessoal
(Notebook ) configurado com os recursos necessários utilizados através da linguagem de
programação Python. O notebook utilizado possui 4GB de memória RAM, processador
Intel i5 de 2.3GHz e sistema Operacional Windows 7 64-bits contendo compilador C++
do Visual Studio 2015, OpenCV 4.1.1, Anaconda3 2019 e Python 3.7.4. O Ambiente de
Desenvolvimento Integrado (IDE, Integrated Development Environment) utilizado foi o
Visual Studio Code.
A unidade de processamento desenvolvida pode ser agrupada em três algoritmos dis-
tintos, como mostra o diagrama da Figura 6.14.

Figura 6.14: Diagrama de Elementos da Unidade de Processamento

FONTE: O Autor (2019)

O Diagrama de Processos deste estágio pode ser observado na Figura 6.15.

6.3.1 Algoritmo de Leitura Serial de Dados


O algoritmo de leitura serial de dados é responsável pela abertura da porta de comu-
nicação serial entre a Unidade de Processamento e o Receptor de Dados e pela aquisição
dos dados serializados, que devem ser armazenados num array de bytes.
O recurso principal deste algoritmo é o módulo pySerial (Liechti 2015), que oferece
ao Python uma interface inteligente de configuração e acesso às portas seriais de vários
sistemas operacionais.
O fluxo de processo do algoritmo se inicia ao se criar um objeto do tipo serial para
estabelecer a comunicação com a porta. São definidos o nome e o baud rate da porta, que
devem ser conhecidos, além de um tempo de espera limite para recepção de dados (tempo
de estouro).
Também é necessário saber o tamanho da mensagem que o algoritmo deve ler, para
dar a leitura por encerrada. Como a captura de imagens de uma câmera produz imagens
em uma resolução pré-configurada e como este projeto transmite arquivos de imagens
previamente criados, é possı́vel conhecer o tamanho em bytes destes arquivos e inserı́-los
no algoritmo como variáveis que determinam o tamanho do buffer de leitura.
O acesso aos dados seriais transmitidos pelo Receptor de Dados para a Unidade de
Processamento pode ser realizado em apenas três linhas de código. Com o objeto serial
já criado, faz-se necessário apenas executar a chamada de abertura do objeto (função
open()), executar a chamada da leitura do objeto (função read()), atribuindo uma variável
70

Figura 6.15: Diagrama de Processos da Unidade de Processamento

FONTE: O Autor (2019)

de armazenamento de dados e definindo a quantidade de bytes a serem lidos e, por fim,


executar a chamada de fechamento do objeto (função close()).
Um segundo recurso utilizado, dispensável, porém bastante útil, foi o módulo time,
nativo do Python 3. Com ele, foi possı́vel adquirir um valor de tempo do relógio de
máquina em milissegundos. Com a diferença entre dois valores de relógio, é possı́vel
determinar o tempo de duração de um trecho de código. Dessa forma, foram lidos dois
tempos de relógio, onde um antecedeu e o outro sucedeu a etapa de leitura dos dados,
de modo que foi possı́vel determinar o tempo de duração de cada leitura. Com isso, foi
possı́vel determinar se o tempo de transmissão era coerente, além poder mensurar o atraso
acumulado entre a recepção do sinal LoRa no módulo E32-TTL-100 e a leitura dos dados
pela Unidade de Processamento. Por fim, este recurso também foi útil para verificar se a
transmissão havia sido completada ou abortada pelo tempo de estouro.
71

6.3.2 Algoritmo de Reconstrução de Imagem


O algoritmo de reconstrução de imagem é responsável por transformar o vetor de bytes
recém-adquirido da porta serial em um arquivo com formato desejado e num diretório
destino de interesse. Para isso, utiliza-se os recursos de pipeline de sistemas POSIX para
acesso a arquivos, recurso este já integrado à própria linguagem Python.
Ao se definir um nome para o arquivo, a escolha de um nome fixo fará com que o
arquivo atual sempre substitua o arquivo criado anteriormente. Para evitar isso, utilizou-
se mais uma vez o módulo time, para criar um nome de arquivo que sempre dependa do
tempo de relógio naquele determinado instante, de modo a sempre criar nomes únicos.
Como as imagens transmitidas do cartão de memória são todas do formato .jpg, este
formato deve ser mantido para que haja a reconstrução da imagem. Porém, este mesmo
algoritmo é capaz de salvar qualquer tipo de dado em qualquer formato de arquivo.
Para a escrita dos dados adquiridos no arquivo, é necessário primeiramente chamar
a função open() novamente, passando o parâmetro “wb+” para definir uma escrita de
dados em formato binário (serial) e criar o arquivo, caso não exista. Em seguida, a função
write() realiza a escrita dos dados no pipeline e a função close() encerra a conexão.

6.3.3 Algoritmo de Reconhecimento Facial


O algoritmo de reconhecimento facial é responsável por detectar, extrair e reconhecer
os rostos dos indivı́duos presentes na imagem recém armazenada na unidade de processa-
mento. Dentre os três algoritmos, este é definitivamente o mais complexo. Sua base é a
API face recognition (Geitgey 2017) , que por sua vez é baseado da biblioteca de detecção
facial Dlib (King 2017a). O algoritmo ainda roda em segundo plano os módulos NumPy
e PIL, além do compilador de C++.
O primeiro passo na execução deste algoritmo foi o de carregar individualmente as ima-
gens do banco de dados e codificá-las como arrays multidimensionais (matrizes) utilizando
o NumPy. Como o banco de dados utilizado neste projeto tem proporções reduzidas, con-
tendo apenas quatro rostos conhecidos, isso pôde ser feito a cada execução do algoritmo
de reconhecimento facial. Porém, para bancos de dados maiores, é necessário otimizar
este processo ao se desenvolver um algoritmo separado para carregamento e codificação
automática dos rostos do banco de dados, produzindo como saı́da o conjunto de arrays
multidimensionais que podem ser carregados neste algoritmo ao começo de sua execução.
Em seguida, um procedimento similar ocorre com a imagem que foi recebida na trans-
missão. O arquivo é carregado como matriz no algoritmo e são detectados todos os rostos
existentes na imagem, de modo a extrair suas coordenadas em um array de arrays. Com
a matriz da imagem e as coordenadas de todos os rostos, é possı́vel codificar cada rosto
na imagem separadamente.
A próxima etapa consiste na extração e exibição dos rostos detectados na imagem. Isso
é feito utilizando a Biblioteca de Imageamento do Python (PIL, Python Imaging Library),
através da geração de sub-arrays a partir do array principal, utilizando as coordenadas
previamente extraı́das como limiares. Esta etapa não é essencial para a identificação
de rostos e, portanto, pode ser omitida. Porém, sua importância se dá ao permitir que
o operador do sistema realize a verificação dos rostos detectados, de modo a validar a
coerência nas tomadas de decisões do algoritmo.
Com a codificação dos rostos conhecidos obtida do banco de dados e a codificação dos
rostos detectados, é possı́vel executar um comparativo de rostos, ou Face Matching, de
72

modo a definir se um ou mais rostos detectados são conhecidos e, então, identificá-los.


O Face Matching é um processo iterativo de dois nı́veis que retorna, para cada rosto
detectado na imagem, uma lista de valores booleanos para cada rosto no banco de dados
(ou seja, retorna uma lista de listas).
Cada valor booleano representa o resultado de uma comparação entre um dos rostos
conhecidos e um dos rostos detectados. A API avalia a proximidade entre os traços faciais
detectados em ambos os rostos e retorna um valor entre 0 e 1, onde 0 significa rostos
perfeitamente idênticos e 1 significa rostos perfeitamente distintos. A rede neural toma
então a decisão se ambos os rostos são a mesma pessoa ou não, baseado na magnitude do
nı́vel de proximidade.
O limiar de tolerância para tomada de decisão é definida por padrão de software
em 0,6, onde valores abaixo deste limiar definem que os rostos são da mesma pessoa e
retornam valor booleano True e valores acima deste limiar definem que são rostos de
pessoas diferentes, retornando valor booleano False. A documentação do algoritmo de
reconhecimento facial não explicita se existe alguma razão em particular para a escolha
deste valor padrão. Entretanto, o limiar de tolerância pode ser modificado para cada
iteração ao se inserir o valor de tolerância como parâmetro na chamada de função. Neste
projeto, o limiar de tolerância foi ajustado para 0,5.
O motivo para a redução do limiar de tolerância se deu na existência de três possı́veis
resultados para a comparação de um rosto detectado com todo o banco de dados:

1. Todas as Comparações são Falsas.


2. Apenas uma Comparação é Verdadeira.
3. Mais de uma Comparação é Verdadeira.

Para o caso 1, nenhuma das comparações atingiu um valor de proximidade baixo o


suficiente, o que significa que o rosto detectado não consta no banco de dados. O rosto é
desconhecido.
Para o caso 2, todas as comparações foram falsas, exceto uma, o que significa que existe
uma alta probabilidade de que o rosto detectado seja aquele cuja comparação resultou em
verdade. O rosto é conhecido e identificado.
Para o caso 3, mais de uma comparação resultou em verdade, o que significa que mais
de um rosto do banco de dados é similar o suficiente ao rosto detectado. Dessa forma, o
rosto é conhecido porém não-identificado.
Em uma situação no mundo real, desconsiderando situações envolvendo rostos compos-
tos de estruturas faciais de mais de uma pessoa, produzidos através de edição de imagem,
apenas os dois primeiros casos produzem resultados confiáveis, enquanto que o terceiro
produz uma incerteza que se deseja eliminar.
A ocorrência do terceiro caso se dá na incerteza de rostos muito similares, como no
caso de parentes com feições faciais próximas ou no caso de sósias. Na existência de rostos
similares no banco de dados, esta situação produzirá múltiplos resultados verdadeiros e, na
não existência, a situação produzirá resultados falso-positivos, erroneamente identificando
a pessoa como o rosto similar contido no banco de dados.
Verificando o comportamento desta região de incerteza, foi possı́vel observar, no en-
tanto, que mesmo nos casos de falsos positivos ou de verdadeiros múltiplos, ocorria uma
clara distinção entre os valores de proximidade genuı́nos e os valores incorretos, expressa
por uma diferença de valores. Para os rostos similares, os nı́veis de proximidade encontra-
dos em quase todas as comparações se agruparam na faixa entre 0,52 e 0,6. Dessa forma,
73

escolheu-se por ajustar a tolerância do comparador de rostos para 0,5, atenuando em


grande escala o erro causado por falsos positivos e múltiplos verdadeiros. Os Resultados
que justificam o ajuste podem ser encontrados na seção 7.4.

7 Resultados Experimentais
Nesta seção são apresentados os resultados obtidos a partir de algumas análises realiza-
das no sistema proposto, algumas com o objetivo de otimizar as caracterı́sticas do sistema
e outras com objetivo de verificar a sua eficiência ao processar as imagens recebidas.
Pode-se, então, dividir os testes aqui apresentados em duas categorias:

• Otimização do Sistema:

– Variação de Baud Rate e Taxa de Transmissão de Dados;


– Comparativo entre transmissão de imagens coloridas e em tons de cinza;
– Ajuste da tolerância do reconhecimento facial.

• Verificação do Sistema:

– Análise de alcance e interferência;


– Análise de rostos conhecidos;
– Análise de rostos desconhecidos;
– Validação do sistema completo.

7.1 Otimização de Transmissão variando Baud Rate e Taxa de


Transmissão de Dados
Com a interface de comunicação implementada entre o sensor embarcado e o receptor
de dados, buscou-se verificar quais configurações poderiam diminuir ao máximo o tempo
de envio de cada imagem.
Analisando os parâmetros de configuração, identificou-se que apenas os bits 5 a 0 do
parâmetro SPED provocavam mudanças que alteravam o tempo de cada transmissão. Os
bits 5, 4 e 3 definem os valores da velocidade serial (baud rate) e os bits 2, 1 e 0 definem
os valores da taxa de transmissão de dados no ar. Na Figura 7.1, apresenta-se os possı́veis
valores para os bits de SPED e o que eles representam.
74

Figura 7.1: Valores possı́veis para o parâmetro SPED do módulo E32-TTL-100

FONTE: Adaptado de Chengdu Ebyte (2019)

7.1.1 Metodologia
Este teste consistiu em uma transmissão controlada de um pacote de dados conhecido.
O sistema seguiu seu fluxo de processos até a reconstrução da imagem, com o algoritmo
de reconhecimento facial não sendo utilizado neste teste. A imagem utilizada pode ser
observada na Figura 7.2.
75

Figura 7.2: Imagem Utilizada no Teste - lenna50c.jpg

FONTE: Adaptado de Wikipédia (2019)

Trata-se de um redimensionamento da imagem de teste Lenna, originalmente uma


imagem de 512x512 pixels, agora redimensionada para 50x50 pixels. Este redimensiona-
mento foi feito pensando em reduzir o tempo gasto para testar cada combinação, de modo
que a imagem original, de 96329 bytes, foi reduzida a 2917 bytes.
Como a taxa de transmissão de dados possui 6 configurações possı́veis e o baud rate (a
taxa de sı́mbolos na comunicação serial) possui 8 configurações possı́veis, o teste consistiu
na avaliação de 48 combinações. Nessas 48 combinações, interessou-se apenas a verificação
do tempo de recepção, desprezando-se o tempo de transmissão de cada imagem.
O objetivo deste teste foi determinar a existência de uma (ou mais) configuração(ões)
ótima(s) para o sistema desenvolvido. Sabe-se da existência de uma determinada incerteza
em cada valor experimental, porém o critério de comparação utilizado apenas avaliou
escalas de grandeza e não valores exatos, não havendo a necessidade de estabelecer uma
amostragem de valores para cada intervalo. Com isso, executou-se apenas uma medida
de tempo de recepção para cada combinação.

7.1.2 Análise dos Resultados


Os tempos de recepção obtidos para cada combinação podem ser observados a seguir,
na Tabela 7.1. Os valores obtidos estão expressos em segundos (s).

Tabela 7.1: Baud Rate x Taxa de Transmissão de Dados para Lenna.jpg em 50px

Taxa Baud Rate


de Dados 1200 2400 4800 9600 19200 38400 57600 115200
300 255,64 252,25 254,65 255,24 255,44 267,98 255,12 253,73
1200 74,09 72,67 75,55 81,49 80,18 73,12 76,39 71,61
2400 35,56 46,43 37,43 38,38 36,81 33,81 35,33 35,22
4800 31,31 20,09 18,53 23,03 22,21 19,12 20,20 18,08
9600 31,63 18,71 15,28 12,75 13,14 12,35 13,25 12,74
19200 Falhou Falhou Falhou Falhou Falhou Falhou Falhou Falhou
FONTE: O Autor (2019)

Observa-se de imediato que nenhuma das medições executadas na velocidade 19,2kbps


76

conseguiu concluir a transmissão de imagem. Não se identificou uma causa definitiva para
este comportamento.
Também é possı́vel observar que, a partir de 4800 baud, a variação no baud rate não
produz influências perceptı́veis no tempo de resposta. Abaixo disso, verifica-se que o
baud rate é lento demais para não interferir na transmissão e acaba por inserir um atraso
adicional.
Em seguida, além de analisar se a quantidade de bytes foi enviada, avaliou-se a qua-
lidade dos bytes enviados, ou seja, se a imagem reconstruı́da através da recepção possui
alguma falha ou corrupção. Os resultados de cada comparação podem ser observados na
Figura 7.3.

Figura 7.3: Imagens Obtidas no Teste

FONTE: Autor (2019)

Agora, além de se observar uma falha de comunicação a uma taxa de transmissão de


dados de 19,2kbps, também se observa o corrompimento de todas as transmissões a 115200
baud. Diferente dos casos anteriores, não foi possı́vel chegar a nenhuma conclusão sobre a
possı́vel causa deste problema. No entanto, com base nas observações feitas neste teste, é
possı́vel obter as alternativas para melhores configurações, como mostrado na Figura 7.4.
77

Figura 7.4: Alternativas Ótimas baseadas nos Resultados Obtidos

FONTE: Autor (2019)

Como indica a imagem, os melhores tempos de recepção obtidos são o intervalo de


baud rates entre 4800 e 57600 a uma taxa de transmissão de dados de 9,6kbps.

7.2 Otimização de Transmissão por escolha de Padrão de Cores


Enquanto o primeiro teste tem um grande enfoque na tomada de decisão e pouca
ênfase no levantamento de dados numéricos palpáveis, este segundo teste é exatamente o
oposto. Aqui, avaliou-se de maneira quantitativa a influência da mudança de padrão de
imagem a cores (RGB ou Y’CbCr) para um padrão de imagem a luminância (escala de
cinza).
A justificativa para este teste se dá em avaliar e demonstrar a irrelevância das compo-
nentes de cores para uma captura de imagem em um sistema remoto de reconhecimento
facial. Sensores de imagem em escala de cinza não são incomuns no mercado e podem ser
uma alternativa mais eficiente para o sistema desenvolvido. Neste teste, estima-se o grau
de eficiência destes sensores.

7.2.1 Metodologia
Um novo conjunto de transmissões foi efetuado, com pacotes conhecidos. Dessa vez, as
configurações de velocidade foram mantidas em 9600 baud e 9,6kbps e variou-se a imagem
a ser transmitida. Foram utilizadas duas imagens de teste: A primeira, Lenna.jpg (Figura
7.5), possui originalmente resolução de 512x512 pixels. A segunda, Elfheim.jpg (Figura
7.6), possui originalmente 4230x2292 pixels.
78

Figura 7.5: Primeira Imagem do Teste Cor x Cinza - Lenna.jpg

FONTE: Wikipédia (2019)

Destas imagens, foram extraı́das 5 versões cada, com dimensões diferentes. As re-
soluções utilizadas para Lenna.jpg foram 480x480, 360x360, 240x240, 144x144 e 50x50.
As resoluções utilizadas para Elfheim.jpg foram 1328x720, 885x480, 663x360, 442x240 e
265x144.

Figura 7.6: Segunda Imagem do Teste Cor x Cinza - Elfheim.jpg

FONTE: Skye Carlson (2019)

Para cada resolução de cada imagem, obteve-se uma cópia em escala de cinza. O
procedimento para obtenção destas cópias se deu através de um algoritmo de conversão
de espaço de cores. Carregando cada imagem como um vetor de matrizes RGB, pode-se
realizar a conversão entre espaços de cores, de RGB para Y’CbCr, utilizando apenas uma
transformação matricial. Do vetor de matrizes resultante da conversão, foi possı́vel obter
uma reprodução em tons de cinza da imagem original ao se extrair o conteúdo da Matriz
Y’ (matriz de luminância) e reconstruı́-lo como imagem no mesmo formato que a original.
79

7.2.2 Análise dos Resultados


Foram avaliadas duas caracterı́sticas das imagens enviadas: o tamanho do arquivo e
o tempo de recebimento. Na Figura 7.7, são mostradas as diferenças entre as imagens
coloridas (barras à esquerda) e as imagens em escala de cinza (barras à direita) do arquivo
Lenna.jpg em relação a: (a) o tamanho de arquivo e (b) o tempo de recebimento.

Figura 7.7: Comparativos Cor x Cinza para o arquivo Lenna.jpg

(a) Tamanho x Resolução (b) Tempo de Recebimento x Resolução


FONTE: O Autor (2019)

Utilizando um simples cálculo de razão, como descrito em (7.1), é possı́vel obter a


porcentagem de redução no tempo e no tamanho do arquivo ao se utilizar somente a
componente de luminância, analogamente ao cálculo de fator de compressão obtido através
da redundância relativa (RD ):
tcor − tcinza
R= · 100% (7.1)
tcor
Em que tcor representa o tempo de recebimento ou o tamanho da imagem colorida,
tcinza representa o tempo de recebimento ou o tamanho da imagem em cinza e R representa
a redução percentual do valor analisado.
São apresentados, na Tabela 7.2, os valores de redução percentual (R) obtidos para o
arquivo Lenna.jpg através desta equação.

Tabela 7.2: R obtido na conversão para Escala de Cinza - Lenna.jpg

Resolução Tempo de Recepção Tamanho


50p 38,02% 60,02%
144p 53,32% 62,10%
240p 62,51% 65,59%
360p 65,10% 67,10%
480p 66,78% 67,70%
FONTE: O Autor (2019)
80

Na Figura 7.8, são mostradas as diferenças entre as imagens coloridas (barras à es-
querda) e as imagens em escala de cinza (barras à direita) do arquivo Elfheim.jpg em
relação a: (a) o tamanho de arquivo e (b) o tempo de recebimento.

Figura 7.8: Comparativos Cor x Cinza para o arquivo Elfheim.jpg

(a) Tamanho x Resolução (b) Tempo de Recebimento x Resolução


FONTE: O Autor (2019)

Na Tabela 7.3, apresentam-se os valores de redução percentual (R) obtidos para o


arquivo Elfheim.jpg através da Equação (7.1).

Tabela 7.3: R obtido na conversão para Escala de Cinza - Elfheim.jpg

Resolução Tempo de Recepção Tamanho


144p 53,84% 55,55%
240p 54,01% 56,73%
360p 56,26% 56,64%
480p 55,93% 56,12%
720p 54,13% 54,17%
FONTE: O Autor (2019)

Observando os valores apresentados nas tabelas 7.2 e 7.3, é possı́vel observar que o
efeito da redução pode mudar de arquivo para arquivo, provavelmente correlacionado
com a qualidade de compressão do mesmo. De qualquer forma, todos os casos observados
apresentaram uma redução de mais de 53% tanto em tamanho quanto em tempo de re-
cepção. A única exceção a este comportamento é o arquivo Lenna.jpg em resolução 50x50.
Acredita-se que a menor redução percentual no tempo de recepção esteja relacionada com
uma componente constante de tempo em cada transmissão, que se torna mais evidente
no envio de arquivos menores.
Este teste mostra, então, que é possı́vel economizar, ao menos, metade do tempo de
uma transmissão ao se utilizar dispositivos que capturem imagens em escala de cinza pura
(apenas a componente de luminância da imagem) ou utilizando configurações de captura
81

para tons de cinza em dispositivos com mais de um formato de captura disponı́vel (como
no caso do OV7670).

7.3 Análise de Alcance e Interferência de Sinal em Ambiente


Urbano
Esta análise buscou não somente estimar o alcance da transmissão, mas também ob-
servar a influência do ambiente urbano, em termos de interferência e atenuação do sinal,
na transmissão do sinal.

7.3.1 Metodologia
O procedimento envolvido neste teste é semelhante aos dois descritos anteriormente.
Desta vez, uma transmissão controlada, a uma velocidade de 9, 6kbps e 9600 baud, de
uma única imagem em escala de cinza foi realizada. A imagem utilizada pode ser vista
na Figura 7.9.

Figura 7.9: Imagem Utilizada no Teste - lenna240g.jpg

FONTE: Adaptado de Wikipédia (2019)

Trata-se da versão em escala de cinza e resolução 240x240 pixels da imagem Lenna.jpg,


já utilizada no teste anterior. Esta imagem continha 9739 bytes de dados.
O teste foi realizado nas dependências do Campus I da Universidade Federal da
Paraı́ba. Como ponto central da transmissão, onde foi instalado o receptor de dados,
foi utilizado o Laboratório de Microengenharia, no Centro de Tecnologia (CT).
Duas rotas de medição foram estabelecidas para este teste. Inicialmente, foram utiliza-
dos 15 pontos de medições, catalogados pela sequência de T01 a T15, onde T 01 representa
“Transmissão 1”, T 02 representa “Transmissão 2” e assim sucessivamente. Estes pontos
82

perfaziam uma rota que ia do Centro de Tecnologia até o Centro de Comunicação, Tu-
rismo e Artes (CCTA), com uma distância máxima de 713 metros (Em T15). Entretanto,
durante a realização do teste, o sinal foi perdido antes da distância máxima estipulada ser
alcançada, de modo que a rota foi ligeiramente alterada. Os pontos que se localizavam no
CCTA (T11 a T15) foram substituı́dos pelos pontos NT11 a NT15, localizados no Centro
de Educação (CE), Centro de Ciências Jurı́dicas (CCJ) e Centro de Tecnologia.
O teste consistiu em levar o transmissor para os pontos de rota marcados e transmitir a
imagem lenna240g.jpg. Para isso, o transmissor foi programado de modo a ignorar o sinal
transmitido pelo sensor PIR e apenas transmitir a imagem uma única vez, um segundo
após ter sido ligado.
O transmissor foi transportado junto a uma bateria externa para alimentação. Para ter
um inı́cio de transmissão controlado, a alimentação do transmissor foi conectada apenas
no momento em que este era posicionado em um ponto de rota.

7.3.2 Análise dos Resultados


A rota percorrida durante o teste pode ser observada na Figura 7.10. O marcador
vermelho representa a localização do Receptor e os Marcadores verdes representam os
pontos de rota onde foram transmitidos dados, ordenados numericamente de T01 a NT15.

Figura 7.10: Mapa da Região onde os testes foram efetuados

FONTE: Google Earth (2019)

Os valores obtidos em cada ponto de rota podem ser observados na Tabela 7.4.
83

Tabela 7.4: Tabela de Alcances e Tempos de Resposta Obtidos

Marco Distância (m) Tempo de Recepção (s)


Referência 0 34,02431
T01 53 100,08977
T02 53 75,83173
T03 126 50.34129
T04 146 Falhou
T05 97 78,00871
T06 23 62,72771
T07 89 Falhou
T08 207 Falhou
T09 302 Falhou
T10 426 Falhou
NT11 293 Falhou
NT12 223 Falhou
NT13 122 129.97583
NT14 72 54,69369
NT15 191 Falhou
FONTE: O Autor (2019)

De acordo com a documentação do fabricante do módulo E32-TTL-100, seu alcance


efetivo é inversamente proporcional à taxa de transmissão de dados escolhida. Como
a taxa utilizada nesta transmissão é a segunda maior disponı́vel no módulo, é razoável
admitir que o alcance efetivo obtido deva ser muito menor do que o nominal (3km em
visada direta). A conclusão a respeito do alcance máximo do sinal indica que este deve
estar entre 126m e 146m. No entanto, como não foi utilizado nenhum tipo de equipamento
especı́fico para esta análise, não é possı́vel determinar o valor exato. Assume-se então,
o pior caso, em que o alcance máximo foi de 126m, para uma taxa de transmissão de
dados de 9, 6kbps. Com isso, apresenta-se um esboço da possı́vel área de cobertura do
sistema (cı́rculo azul), baseada nas transmissões bem-sucedidas (polı́gono verde claro),
como mostrado na Figura 7.11.

Figura 7.11: Área de Cobertura Estimada (Esboço)

FONTE: Adaptado de Google Earth (2019)


84

Ainda observando a Tabela 7.4, nota-se que houve pouca variação no tempo de re-
cepção em relação à distância. Houve, no entanto, uma considerável variação relacionada
ao ambiente em que a transmissão foi realizada. As transmissões realizadas em campo
aberto e em visada direta do receptor (T03, T06 e NT13) obtiveram os menores tempos
de recepção. Em seguida, foram as regiões com prédios obstruindo parcialmente a visada
direta do receptor (T02 e T05). Em terceiro lugar, têm-se os pontos em que a visada
direta era obstruı́da por muita vegetação (T01 e NT13). Por último, ainda observam-se
os pontos transmitidos no interior de prédios, sem visada direta (T04 e T07), que não
foram capazes de alcançar o receptor, apesar da distância relativamente curta.
Apesar de nenhum valor ser dado na documentação como referência para comparação,
o alcance obtido parece estar razoável dadas as limitações do módulo. E, apesar de
se encontrar muito abaixo de seu alcance máximo nominal, o alcance obtido ainda é
significativamente superior aos alcances nominais de alguns dos principais dispositivos não
LPWAN (como Wi-Fi e Bluetooth). Adicionalmente, deve-se considerar que o módulo
utilizado (E32) possui versões com consumo de potência maior, que podem ampliar o
alcance efetivo, caso surja a necessidade.

7.4 Otimização do Reconhecimento por Ajuste na Tolerância do


Face Matching
Durante a implementação do algoritmo de reconhecimento facial, a problemática dos
falsos positivos e múltiplos verdadeiros foi recorrente, o que demandou uma solução ime-
diata. Apesar deste teste não ter sido planejado inicialmente, acabou sendo desenvolvido
por conta de sua relevância para o projeto proposto.

7.4.1 Metodologia
Para avaliar a sensibilidade do reconhecimento facial a rostos de pessoas semelhantes,
um conjunto de rostos semelhantes de 8 pares de indivı́duos famosos foi selecionado. A
Figura no Apêndice A apresenta o conjunto de rostos utilizados.
Os 8 pares foram separados em duas pastas, em que a primeira conteria os rostos
conhecidos e a segunda conteria os rostos desconhecidos. Como o teste remete exclusiva-
mente às caracterı́sticas da API de reconhecimento facial, o teste foi realizado através de
linha de comando, já que produziria os mesmos resultados em um algoritmo python.
O objetivo deste teste foi definir uma tolerância máxima para o nı́vel de proximidade
entre os rostos, que garanta uma redução quase total no número de falsos positivos e
múltiplos verdadeiros.

7.4.2 Análise dos Resultados


Pôde-se facilmente observar o valor de proximidade entre cada um dos 8 pares de rostos
similares. Em todos os casos selecionados, a API, utilizando o valor padrão de tolerância
(0,6), indicou incorretamente que os rostos do grupo 2 pertenciam a seus similares no
grupo 1 (Figura 7.12).
85

Figura 7.12: Face Matching utilizando a tolerância padrão de 0,6

FONTE: O Autor (2019)

Os valores exatos de proximidade entre cada um dos 16 rostos foi inserido na Tabela
7.5. Os valores indicados por > 0, 6 representam valor booleano de FALSO para a com-
paração (o valor exato não é retornado pelo sistema). Já os valores em vermelho indicam
os valores que são falsos positivos.

Tabela 7.5: Distâncias obtidas comparando pares de rostos similares.

Howard Smith Ledger Bridges Morgan Perry Hardy Quinto


Chastain 0,582 >0.6 >0.6 >0.6 >0.6 >0.6 >0.6 >0.6
Ferrell >0.6 0,588 >0.6 >0.6 >0.6 >0.6 >0.6 >0.6
Levitt >0.6 >0.6 0,590 >0.6 >0.6 >0.6 >0.6 >0.6
Russell >0.6 >0.6 >0.6 0,572 >0.6 >0.6 >0.6 >0.6
Bardem >0.6 >0.6 >0.6 >0.6 0,524 >0.6 >0.6 >0.6
Deschanel >0.6 >0.6 >0.6 >0.6 >0.6 0,577 >0.6 >0.6
Green >0.6 >0.6 >0.6 >0.6 >0.6 >0.6 0,531 >0.6
Roth >0.6 >0.6 >0.6 >0.6 >0.6 >0.6 >0.6 0,563
FONTE: O Autor (2019)

Observa-se o menor valor (maior proximidade) entre o ator americano Jeffrey Dean
Morgan e o ator espanhol Javier Bardem, com cerca de 0,524. Percebe-se então que,
mesmo em indivı́duos relativamente similares, a tendência é que o reconhecimento facial
indique valores de proximidade acima de 0,5. Portanto, é razoável definir uma nova
tolerância de valor 0,5 para evitar a confusão de rostos similares. O ajuste deste novo
valor produz os efeitos desejados, como mostrado na Figura 7.13, uma vez que a API não
mais reconhece os indivı́duos do grupo 2 como sendo os indivı́duos do grupo 1.

Figura 7.13: Face Matching utilizando a tolerância ajustada de 0,5

FONTE: O Autor (2019)


86

7.5 Análise da Identificação de Rostos Conhecidos


Com a API propriamente ajustada, precisava-se verificar se o algoritmo desenvolvido
responderia corretamente à identificação de rostos em um banco de dados, como proposto.
Este teste foi realizado com esta intenção em mente.

7.5.1 Metodologia
Os testes foram realizados utilizando um banco de dados hipotético, contendo quatro
rostos, inseridos individualmente a cada execução do algoritmo. Os rostos utilizados
podem ser observados na Figura 7.14.

Figura 7.14: Banco de Dados de Rostos Conhecidos

(a) Vı́tor (b) Lenna (c) Jaque (d) Gabriel


FONTE: O Autor (2019)

Estabelecida a referência no banco de dados, também foi elaborada uma imagem de


teste, contendo múltiplas imagens do mesmo indivı́duo, como mostrado na Figura 7.15. As
imagens possuem ângulos, granularidade, tamanhos e condições de iluminação distintas,
além de outras caracterı́sticas que potencialmente poderiam interferir no reconhecimento,
como expressões faciais não neutras ou o uso de acessórios como óculos escuros.

Figura 7.15: Teste de Identificação de Rosto Conhecido

FONTE: O Autor (2019)


87

O objetivo deste teste era simplesmente verificar a coerência do algoritmo na iden-


tificação de rostos e, por conta disso, acabou sendo o teste mais curto do conjunto. O
resultado obtido, no entanto, foi exatamente conforme o esperado.
Para o teste, uma versão alternativa do algoritmo de reconhecimento facial foi utili-
zada. Nela, a imagem desconhecida a ser carregada não era mais o arquivo que havia sido
recebido da transmissão LoRa, mas sim o conjunto de imagens na Figura 7.15, armazenada
em um diretório distinto ao dos rostos conhecidos.
Uma segunda etapa foi adicionada durante a realização do teste, de modo a verificar a
sensibilidade da API em relação à resolução das faces. Com isso, foi elaborado o conjunto
de imagens exibido na Figura 7.16, contendo o mesmo rosto a uma resolução de 240x240,
120x120, 60x60, 30x30 e 15x15.

Figura 7.16: Verificação da Resolução Mı́nima Necessária para Reconhecimento Facial

FONTE: O Autor (2019)

7.5.2 Análise dos Resultados


A execução do algoritmo exibiu como resposta a quantidade correta de rostos na
imagem, tendo também identificado-os corretamente, como mostrado na Figura 7.17.

Figura 7.17: Resultados Obtidos na Primeira Etapa do Teste

FONTE: O Autor (2019)

Observa-se uma aparente robustez no sistema utilizado para reconhecimento facial, de


modo que mesmo imagens ampliadas e de baixa qualidade conseguem produzir resultados
confiáveis. Testes com maiores amostragens e uma maior variação nas amostras devem
88

ser realizados, no entanto, antes de se estabelecer conclusões precisas sobre o alcance total
da API em relação a variações nas faces encontradas em imagens.
Na segunda etapa do teste, obteve-se a identificação de três dos cinco rostos (Figura
7.18), indicando que a escala de incerteza está por volta de 30x30.

Figura 7.18: Resultados Obtidos na Segunda Etapa do Teste

FONTE: O Autor (2019)

Com isso, selecionou-se um novo rosto, com melhor enquadramento, exibido na Figura
7.19, com resoluções de: (a) 31x31 pixels (b) 30x30 pixels e (c) 29x29 pixels.

Figura 7.19: Resoluções de um rosto no limiar de incerteza

(a) (b) (c)


FONTE: O Autor (2019)

A execução do algoritmo para estas três imagens, como mostrado na Figura 7.20,
resultou em uma identificação bem sucedida para as primeiras duas resoluções, mas em
nenhuma identificação de rosto na terceira, o que leva a crer que a resolução mı́nima para
identificação de rostos provavelmente é de 30x30 pixels.

Figura 7.20: Verificação da Incerteza de Rostos em Relação à Resolução

FONTE: O Autor (2019)

Aqui, também fazem-se necessários testes mais aprofundados para se determinar a


89

exata sensibilidade do sistema em termos de resolução de face. Porém, os resultados


obtidos são suficientemente conclusivos para uma noção geral sobre tal parâmetro.

7.6 Análise da Verificação de Rostos Desconhecidos


O último teste a ser realizado antes de validar o sistema proposto como um todo é
verificar se o algoritmo de reconhecimento facial é capaz de identificar rostos desconhecidos
e realizar a ação designada após efetuar a identificação.

7.6.1 Metodologia
Utilizou-se a mesma versão de testes do algoritmo de reconhecimento facial utilizada
no teste anterior. Como imagem de teste, foi utilizada uma foto oficial dos lı́deres polı́ticos
membros do G7.

Figura 7.21: Imagem Utilizada no Teste - Lı́deres do G7

FONTE: Time News (2017)

A proposta do sistema ao utilizar o reconhecimento facial é de reconhecer rostos, a fim


de identificar se existem indivı́duos desconhecidos e, na presença de algum, iniciar alguma
rotina extraordinária. O escopo deste trabalho, no entanto, não é desenvolver um sistema
para uma aplicação especı́fica e, portanto, uma rotina direcionada a um único propósito
seria irrelevante neste sentido.
Apenas para servir de exemplo, utilizou-se uma rotina que imprime todos os rostos
desconhecidos detectados na imagem em uma subpasta nomeada “security”.

7.6.2 Análise dos Resultados


O retorno da execução do algoritmo pode ser observado na Figura 7.22. É possı́vel
observar que foram identificados 8 dos 9 rostos de indivı́duos presentes na foto. Apenas
o Presidente da Comissão Europeia, Jean-Claude Juncker, à direita, não foi identificado,
por conta da angulação acentuada de seu rosto.
90

Figura 7.22: Resultados da Identificação de Faces do Algoritmo

FONTE: O Autor (2019)

Como solicitado no exemplo, o algoritmo, ao identificar pelo menos um rosto desconhe-


cido na foto (neste caso, todos são desconhecidos), entrou na condição para executar uma
rotina extraordinária. A rotina em questão, como já descrita, apenas imprime os rostos
desconhecidos em uma pasta separada. O conteúdo da pasta security pode ser observado
na Figura 7.23. Nela, é possı́vel ver que todos os rostos são nomeados com o mesmo
preâmbulo, seguidos de um ı́ndice que representa a ordem em que foram identificados na
imagem.

Figura 7.23: Rostos Desconhecidos Extraı́dos da Imagem

FONTE: O Autor (2019)

7.7 Validação do Sistema


Por fim, com todos os elementos principais do sistema avaliados individualmente, a
última etapa do estágio de avaliação é um teste do sistema como um todo, realizando as
etapas de detecção de presença, transmissão e reconstrução de imagem e reconhecimento
facial, em sequência, como foi inicialmente proposto para o sistema.

7.7.1 Metodologia
Desta vez, a execução do sistema foi realizada integralmente, não se omitindo nenhuma
etapa. A velocidade permaneceu em 9,6kbps a 9600 baud e a tolerância do reconhecimento
facial se manteve em 0,5, como havia sido definido previamente.
91

Foram utilizadas três imagens de teste para esta validação. A primeira, já utilizada
em outros testes, foi a lenna240g.jpg (Figura 7.24), aqui denominada de L240G.JPG.

Figura 7.24: Primeira Imagem Utilizada no Teste - L240G.JPG

FONTE: Adaptado de Wikipédia (2019)

A segunda e terceira imagens utilizadas no teste, também em 240p e escala de cinza,


foram nomeadas VEJ240G.JPG e VO GQVGA.JPG, respectivamente.

Figura 7.25: Segunda e Terceira Imagens Utilizadas no Teste

(a) VEJ240G.JPG (b) VO GQVGA.JPG


FONTE: O Autor (2019)

A primeira imagem foi escolhida por já ter sido utilizada em várias outras instâncias
da etapa de avaliação, então decidiu-se por manter este padrão. A segunda e terceira
imagens, por outro lado, foram escolhidas por representarem dois casos distintos. Na
segunda, todos os indivı́duos estão próximos da câmera e seus rostos são conhecidos. Na
terceira, os indivı́duos não estão próximos da câmera e um dos rostos é desconhecido.
A ativação de cada transmissão é realizada pelo sensor de presença, emulando a si-
tuação em que este aciona o comando de uma captura de imagem pela câmera, como
descrito no fluxo de processo do Sensor Embarcado.
92

7.7.2 Análise dos Resultados


A informações de resposta à execução do sistema para a primeira imagem foram ex-
traı́das em uma captura de tela e condensadas em uma única imagem (Figura 7.26).

Figura 7.26: Retorno do Sistema para o envio de L240G.JPG

FONTE: O Autor (2019)

Na primeira tela, do terminal do Arduino, é possı́vel ver informações mostradas pelo


transmissor, como o nome e tamanho do arquivo e o tempo levado na transmissão. Na tela
escura abaixo, do terminal do VS Code, as informações de recepção podem ser vistas: o ta-
manho do arquivo e o tempo de recebimento. Em seguida, temos a resposta de localização
e reconhecimento facial, cujo recorte exibido como o arquivo temporário foi mostrado na
Figura. Por fim, exibe-se o tempo total da operação (recepção + reconhecimento facial).
A próxima execução se dá com a transmissão da segunda imagem. O retorno obtido
nessa transmissão pode ser visto na Figura 7.27. Aqui, também são indicados os mesmos
tipos de informações: os tempo de transmissão e de recepção, quantidade, localização e
identidade de cada face, além do tempo total da operação.
Figura 7.27: Retorno do Sistema para o envio de VEJ240G.JPG

FONTE: O Autor (2019)


93

Por fim, é executada a transmissão da terceira imagem. Sendo o maior dos três arqui-
vos, é o que apresenta maior tempo de recepção, como mostrado na Figura 7.28. Aqui,
também observa-se que o algoritmo identificou a quantidade total de rostos na imagem e
corretamente apontou que um deles era desconhecido, entrando na rotina extraordinária.

Figura 7.28: Retorno do Sistema para o envio de VO GQVGA.JPG

FONTE: O Autor (2019)

Abrindo a pasta security, foi possı́vel observar o arquivo criado na última execução do
sistema, contendo o rosto desconhecido na imagem recebida (VO GQVGA.JPG).

Figura 7.29: Rosto Desconhecido Extraı́do de VO GQVGA.JPG

FONTE: O Autor (2019)

Observa-se uma disparidade entre os tempos medidos na transmissão e na recepção


das três imagens. Este fenômeno não teve sua causa bem definida, mas provavelmente é
efeito de múltiplos fatores como o atraso causado pelo ciclo de leitura de preâmbulo em
receptores ociosos, a falha e reenvio de pacotes perdidos ou corrompidos na transmissão ou
ainda o atraso no transporte individual de cada pacote do buffer de recepção do módulo
LoRa até o barramento serial da Unidade de Processamento.
Todavia, com as três respostas do sistema desenvolvido dentro do comportamento
esperado, conclui-se que este sistema encontra-se plenamente funcional.

8 Considerações Finais
Inspirado pelo rápido crescimento na área, este trabalho foi criado com propósito de
verificar o desempenho de Sistemas de Imageamento Remoto de baixo custo e sua aplica-
94

bilidade como RSISF. Tendo em vista os resultados favoráveis nas avaliações realizadas no
sistema desenvolvido, é possı́vel inferir que este trabalho, apesar de não cumprir ipsis lit-
teris tudo o que foi inicialmente proposto, demonstrou um desempenho muito satisfatório,
tanto em termos de uma abordagem para verificação da viabilidade do uso da tecnologia
LoRa em RSISF, quanto como um sistema de monitoramento com seus méritos próprios.
De fato, os resultados confirmam a hipótese inicial levantada no texto a respeito de tal
sistema.
Em relação aos objetivos do trabalho, foi possı́vel implementar exatamente como pro-
postos os estágios de recepção e processamento de dados. O dispositivo embarcado, no
entanto, precisou sofrer adaptações por conta de dificuldades associadas à leitura do sensor
de imagem utilizado. O sensor CMOS de modelo OV7670 sem buffer de saı́da integrado
se mostrou incapaz de capturar imagens estáticas de maneira coerente, estando limitado
apenas a certos tipos de live streaming. As dificuldades encontradas, no entanto, são re-
lativas à incompatibilidade especı́fica do OV7670 com o sistema, tendo sido verificado na
literatura que outras arquiteturas de sensor de imagem, ou mesmo um modelo de OV7670
com buffer, poderiam ter sido implementadas com sucesso no sistema.
Em relação ao acionamento por sensor de presença, foram encontradas restrições
quanto ao alcance e a frequência de detecção do sensor, que limitaram sua atuação.
Entretanto, verificou-se na literatura que estes nı́veis de restrição estão dentro dos limites
toleráveis da tecnologia utilizada. Quanto à modulação LoRa, mesmo que o dispositivo
utilizado não tenha atingido todas as expectativas iniciais, talvez demasiadamente oti-
mistas, obteve-se um canal de comunicação bastante consistente e estável, ideal para o
contexto desta aplicação, envolvendo o tráfego de múltiplos pacotes em sequência. Com
isso, também foi possı́vel comprovar a eficácia da modulação LoRa para aplicações com
sistemas de imageamento remoto.
Inúmeros experimentos foram realizados, como inicialmente previsto e não somente
todos produziram resultados, como foram todos resultados favoráveis. Entretanto, dada
a relativa baixa complexidade de alguns dos experimentos, nem todos puderam apresen-
tar diagnósticos assertivos e objetivos, como se inicialmente desejava. Dentre todas as
questões levantadas, apenas duas não puderam ser respondidas de forma definitiva: O
motivo pelo qual a transmissão LoRa com velocidade de 19, 2kbps nunca tinha sucesso e
a real proporção numérica entre falhas por alcance e falhas por interferência e oclusão de
sinal dentre as obtidas nas transmissões de teste. Acredita-se, no entanto, que ambas as
questões podem ser futuramente respondidas após a realização de estudos mais elaborados
envolvendo o sistema.
A abordagem metodológica para este projeto foi a de pesquisa e implementação de
recursos de software prontamente disponı́veis para uso e componentes de baixo custo e
fácil acesso como recursos de hardware. A abordagem foi escolhida tendo em mente a
popularização da chamada “Cultura Maker”, onde a população leiga tem se interessado
cada vez mais em utilizar tecnologia para suas próprias aplicações domésticas.
Apesar de terem sido estudadas as teorias necessárias para se desenvolver algoritmos
utilizando recursos de software por conta própria, preferiu-se utilizar ferramentas que
já se encontravam bem estabelecidas na comunidade de desenvolvedores pois acredita-
se que a inclusão de um treinamento de redes neurais exclusivo ao projeto, apesar de
interessante, demandaria tempo e esforço que poderiam ser melhor investidos melhorando
o sistema como um todo e, ainda por cima, obteriam-se resultados inferiores aos que de
fato foram obtidos. Em relação ao hardware, também se pensou na reprodutibilidade do
sistema, ao se utilizar dispositivos conhecidos e de baixo custo, de modo que pessoas com
95

poucos conhecimentos a respeito dos pormenores do sistema também sejam capazes de


implementá-lo sem grandes dificuldades.
A escolha dessa abordagem também trouxe restrições ao projeto. Em termos de hard-
ware, os dispositivos, apesar de acessı́veis e com desempenho suficiente, não ofereceram
o melhor desempenho alcançável com a tecnologia embarcada existente na atualidade, o
que influenciou diretamente alguns fatores, como a velocidade de captura e transmissão
das imagens. Isso levanta a possibilidade de se realizar futuramente um comparativo do
hardware usado com tecnologias mais potentes e se estimar a influência das limitações
fı́sicas na eficiência do sistema.
Em termos de software, a escolha de APIs bem estabelecidas para implementação do
sistema, além de trazer melhores resultados, também reduziu o tempo necessário para im-
plementação do algoritmo. No entanto, limitou-se a liberdade de ajuste e personalização
das redes neurais utilizadas, uma vez que é mais difı́cil realizar modificações significati-
vas no algoritmo utilizado para treinamento das redes neurais do que criar um algoritmo
próprio do zero. Felizmente, estas limitações afetam apenas situações onde há a necessi-
dade de mudança do código, o que até então não se mostrou ser o caso.
Em termos da revisão bibliográfica realizada, por conta do relativo pouco tempo
de existência da maioria das tecnologias utilizadas no trabalho e da alta especialização
temática, levou-se um tempo maior do que o planejado para se obter uma coleção razoável
de trabalhos que compartilhassem o mesmo tema. Este fator tornou-se uma limitação no
sentido de que a ausência de trabalhos anteriores dificultou a estruturação do projeto e a
escolha de uma metodologia. Porém, também se mostrou como um ponto positivo, pela
ausência de referências a servir de modelo, permitindo uma maior liberdade na exploração
de métodos de implementação.
Também menciona-se a grande carga de conhecimento adquirido ao longo do curso,
tanto teórico quanto prático, que foi utilizada durante a implementação deste traba-
lho. O estudo de sistemas analógicos e digitais de telecomunicações foi essencial para a
compreensão de muitas das caracterı́sticas pertinentes à tecnologia LoRa. O estudo de
processamento digital de imagens foi base fundamental para os testes de implementação
realizados com o módulo OV7670. Os conhecimentos adquiridos sobre microcontrolado-
res e eletrônica embarcada foram ativamente empregados na implementação do nó sensor
e da interface receptora. As teorias de instrumentação eletrônica e de microeletrônica
serviram de fundamento para um entendimento detalhado da estrutura de cada um dos
sensores utilizados. As noções sobre Redes Neurais Artificiais serviram de referência para
definir a qualidade dos recursos encontrados durante a pesquisa. Os conhecimentos di-
versos de programação e estruturação de código serviram como repertório no momento
da elaboração dos algoritmos utilizados. Todos conhecimentos adquiridos ao perfazer o
currı́culo de formação como engenheiro eletricista.
Além do aprendizado prévio, conhecimentos adjacentes precisaram ser adquiridos ao
longo da execução da atividade, como a sintaxe de programação da linguagem Python, a
implementação de APIs de reconhecimento facial, a programação de sensores de imagem
embarcados e as definições de padrões e protocolos utilizados na tecnologia LoRa.
Aos leitores interessados em desenvolver pesquisas sobre o mesmo tema, sugere-se
como material de leitura auxiliar, além dos já mencionados Pham 2016 e Jebril et al.
2018, temos também como trabalhos de temas relacionados os textos Pham 2015, Zhai
2017, Cerchecci et al. 2018 e Santa et al. 2019. Em Mekki et al. 2019 temos uma análise
comparativa entre as redes LPWAN mais populares. Todos estes textos são de livre acesso
e seus links podem ser encontrados em suas respectivas entradas na seção de Referências
96

Bibliográficas.
Apesar da implementação do sistema proposto ter sido concluı́da com sucesso, há
bastante espaço para expansão e aprimoramento do sistema em trabalhos futuros e há
o interesse no seguimento da pesquisa através da implementação de uma rede multi-nós
de monitoramento. Alguns dos tópicos propostos para dar continuidade a este trabalho
serão listados na seção a seguir.

8.1 Trabalhos Futuros


Com o encerramento das pesquisas realizadas neste trabalho, dá-se por concluı́da a im-
plementação do sistema proposto. No entanto, há grande potencial para aproveitamento
dos dados e resultados obtidos e do próprio sistema desenvolvido. Propõe-se, então, as
seguintes etapas como possı́veis formas de continuidade:

• A implementação do uso de sensores de imagem como havia sido proposto;

• Um estudo sobre possı́veis técnicas de compressão de imagem e otimização do fluxo


de dados;

• A execução de testes de transmissão com equipamentos próprios para medição de


sinal, produzindo resultados de maior objetividade;

• A adaptação do trabalho desenvolvido para submissão como artigo em revistas ci-


entı́ficas;

• A expansão da rede desenvolvida para um sistema multi-nós;

• Um estudo sobre a segurança e a criptografia dos dados transmitidos;

• O desenvolvimento de uma rede neural própria, otimizada para esta implementação;

• Um experimento comparativo do desempenho da rede utilizando outras tecnologias


LPWAN e outras tecnologias de médio alcance, como ZigBee, Bluetooth e Wi-Fi;

• Um estudo de aplicação, verificando a utilidade do sistema em vários ambientes;

• Um estudo sobre a viabilidade de utilização de pré-processamento de imagem no


sistema embarcado.
97

Referências
[1] Piensa 3D. ¿OV7670 sin FIFO para ARDUINO vale la pena? — Opinión. url:
https://www.youtube.com/watch?v=mtE7ppmfrxA (acesso em 04/06/2019).
[2] K. Acuna. 37 pairs of celebrities who look nearly identical. Insider. 2017. url:
https://www.insider.com/celebrities-who-look-alike-2017-1 (acesso em
29/08/2019).
[3] W. A. Adcock. Electronic Photography System. United States Patent. Texas Ins-
truments, Inc. Dallas, TX, nov. de 1977. url: https://patentimages.storage.
googleapis.com/42/c5/65/f8f4d850406b62/US4057830.pdf.
[4] V. M. Aiea. Interfacing Catalex Micro SD Card Module with Arduino. url: https:
/ / vishnumaiea . in / projects / hardware / interfacing - catalex - micro - sd -
card-module (acesso em 06/07/2019).
[5] LoRa Alliance. About LoRa Alliance. url: https://lora-alliance.org/about-
lora-alliance (acesso em 04/09/2019).
[6] LoRa Alliance. White Paper. LoRaWANT M 1.1 Specification. 2017.
[7] Anatel. Atribuição de Faixas de Frequência no Brasil (2014). url: https://www.
anatel.gov.br/Portal/verificaDocumentos/documento.asp?numeroPublicacao=
314474&assuntoPublicacao=null&caminhoRel=null&filtro=1&documentoPath=
314474.pdf (acesso em 30/08/2019).
[8] M. Andrew. How a Pixel Gets its Color - Bayer Sensor - Digital Image. url:
https://www.youtube.com/watch?v=2-stCNB8jT8 (acesso em 06/09/2019).
[9] ArduCam. CMOS OV7670 Camera Module 1/6-Inch 0.3-Megapixel Module Da-
tasheet. 2015. url: https://www.openhacks.com/uploadsproductos/ov7670_
cmos_camera_module_revc_ds.pdf (acesso em 29/05/2019).
[10] Arducam. ArduCAM ESP8266 UNO MINI Camera Demo Tutorial 2018. url:
https://www.youtube.com/watch?v=n1dDGNpbxGM (acesso em 20/05/2019).
[11] K. Ashton. That ’Internet of Things’ Thing. 2009. url: https://www.rfidjournal.
com/articles/pdf?4986 (acesso em 11/08/2019).
[12] L. Atzori, A. Iera e G. Morabito. “The internet of things: a survey”. Em: Computer
Networks, Elsevier. (2010).
[13] A. Augustin et al. “A Study of LoRa: Long Range & Low Power Networks for the
Internet of Things”. Em: Sensors (2016).
[14] John B. OV 7670 Colour Camera and how I got it working with MikroC Pro for
Pic32. url: https : / / www . youtube . com / watch ? v = gp0FxbEmRSw (acesso em
20/05/2019).
[15] John B. OV 7670 Colour Camera and how I got it working with MikroC Pro for
Pic32. url: https : / / www . youtube . com / watch ? v = gp0FxbEmRSw (acesso em
20/05/2019).
[16] D. H. Ballard e C. M. Brown. Computer Vision. 1ª ed. Prentice Hall, 1982. isbn:
0131653164.
[17] B. E. Bayer. Color Imaging Array. United States Patent. Eastman Kodak Com-
pany. Rochester, NY, mar. de 1975. url: https : / / patentimages . storage .
googleapis.com/89/c6/87/c4fb7fbb6d0a0d/US3971065.pdf.
98

[18] Bitluni. Details on OV7670 with FIFO Programming. url: https://www.youtube.


com/watch?v=fk4nVWwbxOc (acesso em 19/06/2019).
[19] Bitluni. ESP32 I2S Camera (OV7670). url: https://bitluni.net/esp32-i2s-
camera-ov7670 (acesso em 19/06/2019).
[20] L. E. Borges. Python para Desenvolvedores. 2ª ed. Rio de Janeiro: Edição do Autor,
2010.
[21] J. K. Bowmaker e H. J. A. Dartnall. “Visual Pigments of Rods and Cones in a
Human Retina”. Em: Journal of Physiology (1980). url: https://www.ncbi.nlm.
nih.gov/pmc/articles/PMC1279132/pdf/jphysiol00783-0492.pdf (acesso em
09/09/2019).
[22] W. S. Boyle e G. E. Smith. Buried Channel Charge Coupled Devices. United Sta-
tes Patent. Bell Labs. New Jersey, abr. de 1973. url: https://patentimages.
storage.googleapis.com/90/6e/28/e1f0a9b89d5110/US3792322.pdf.
[23] I. Bremmer. Here’s What Each G7 Leader Is Really Thinking About. Time News.
2017. url: https://time.com/4794970/g7-summit-leaders-news/ (acesso em
29/09/2019).
[24] R. Buyya e A. V.. Dastjerdi. Internet of Things. Principles and Paradigms. 1ª ed.
An optional note. Elsevier Inc., jul. de 2016.
[25] M. Cerchecci et al. “A Low Power IoT Sensor Node Architecture for Waste Mana-
gement Within Smart Cities Context”. Em: Sensors (2018). url: https://www.
mdpi.com/1424-8220/18/4/1282.
[26] Ltd. Chengdu Ebyte Electronic Technology Co. E32-433T20DC. url: http://
www.ebyte.com/en/product-view-news.aspx?id=130 (acesso em 30/08/2019).
[27] CMOS VGA (640x480) CameraChip With OmniPixel Technology. Datasheet: OV7670
/ OV7171. 1ª ed. Publicação Eletrônica. OmniVision. Jul. de 2005.
[28] M. Collotta et al. “Bluetooth 5: a concrete step forward towards the IoT”. Em:
IEEE Communications Magazine (jul. de 2018).
[29] Arduino Company. Arduino Mega 2560 Rev3. url: https://store.arduino.cc/
usa/mega-2560-r3 (acesso em 30/08/2019).
[30] Arduino Company. Arduino Uno Rev3. url: https://store.arduino.cc/usa/
arduino-uno-rev3 (acesso em 30/08/2019).
[31] Arduino Company. SD Library. Documentation. url: https://www.arduino.cc/
en/reference/SD (acesso em 11/07/2019).
[32] Semtech Corporation. AN1200.22. LoRaT M Modulation Basics. Mai. de 2015.
[33] N. Dalal e B. Triggs. “Histograms of Oriented Gradients for Human Detection”.
Em: International Conference on Computer Vision & Pattern Recognition (jun. de
2005).
[34] NumPy Developers. NumPy. 2019. url: https://numpy.org (acesso em 31/08/2019).
[35] Circuit Digest. How to Use OV7670 Camera Module with Arduino. url: https:
//www.youtube.com/watch?v=C2WHGYmOR-o (acesso em 05/06/2019).
[36] Dual Element Detector. Datasheet: LHI 778. 1ª ed. Publicação Eletrônica. Perki-
nElmer. Abr. de 2001.
99

[37] E32-433T20DC User Manual. Datasheet: SX1278 433MHz 100mW DIP Wireless
Module. 1ª ed. Publicação Eletrônica. ChengDu Ebyte Electronics Technology.
2017.
[38] ElecFreaks. How to Use OV7670 Camera Module With Arduino? url: https :
//www.instructables.com/id/How- to- use- OV7670- Camera- Module- with-
Arduino/ (acesso em 29/05/2019).
[39] T. Elshabrawy e J. Robert. “Closed-Form Approximation of LoRa Modulation
BER Performance”. Em: IEEE Communication Letters (set. de 2018).
[40] Info Escola. Espectro Eletromagnético. url: https : / / www . infoescola . com /
fisica/espectro-eletromagnetico/ (acesso em 04/04/2019).
[41] Arduino Forum. OV7670 with both arduino uno and now mega. url: https://
forum.arduino.cc/index.php?topic=159557.0 (acesso em 18/06/2019).
[42] J. Fraden. The measurement, instrumentation, and sensors handbook. 1ª ed. CRC
Press LLC, 1999. isbn: 978-0-8493-8347-2.
[43] F. D. Garcia. Explorando o módulo OV7670-FIFO: Interface SCCB. 2018. url:
https://www.embarcados.com.br/modulo- ov7670- fifo- interface- sccb/
(acesso em 29/05/2019).
[44] A. Geitgey. The world’s simplest facial recognition api for Python and the com-
mand line. Documentation. Release 1.2.3. 2017. url: https : / / buildmedia .
readthedocs.org/media/pdf/face-recognition/latest/face-recognition.
pdf (acesso em 10/08/2019).
[45] A. Geitgey. The world’s simplest facial recognition api for Python and the com-
mand line. url: https://github.com/ageitgey/face_recognition (acesso em
08/08/2019).
[46] R. C. Gonzalez e R. E. Woods. Digital Image Processing. 2ª ed. Upper Saddle
River, NJ: Prentice Hall, 2001. isbn: 0201180758.
[47] Google. Google Earth. url: https : / / earth . google . com / web/ (acesso em
01/09/2019).
[48] V. Gupta. Face Detection – OpenCV, Dlib and Deep Learning ( C++ / Python
). url: https://www.learnopencv.com/face-detection-opencv-dlib-and-
deep-learning-c-python/ (acesso em 08/09/2019).
[49] B. J. Haran e M. P. Pound. Capturing Digital Images (The Bayer Filter). Compu-
terphile. 2015. url: https://www.youtube.com/watch?v=LWxu4rkZBLw (acesso
em 06/09/2019).
[50] B. J. Haran e M. P. Pound. Colourspaces (JPEG Pt0). Computerphile. 2015. url:
https://www.youtube.com/watch?v=LFXN9PiOGtY (acesso em 06/09/2019).
[51] B. J. Haran e M. P. Pound. Digital Images. Computerphile. 2015. url: https:
//www.youtube.com/watch?v=06OHflWNCOE (acesso em 06/09/2019).
[52] B. J. Haran e M. P. Pound. JPEG ’files’ & Colour (JPEG Pt1). Computerphile.
url: https://www.youtube.com/watch?v=n_uNPbdenRs (acesso em 06/09/2019).
[53] B. J. Haran e M. P. Pound. JPEG DCT, Discrete Cosine Transform (JPEG Pt2).
Computerphile. url: https://www.youtube.com/watch?v=Q2aEzeMDHMA (acesso
em 06/09/2019).
100

[54] B. J. Haran e M. P. Pound. Resizing Images. Computerphile. 2015. url: https:


//www.youtube.com/watch?v=AqscP7rc8_M (acesso em 06/09/2019).
[55] S. Haykin. Neural Networks and Machine Learning. 3ª ed. Upper Saddle River,
NJ: Pearson, 2008. isbn: 0131471392.
[56] S. Haykin e M. Moher. Sistemas Modernos de Comunicações Wireless. 1ª ed. São
Paulo, SP: Bookman Editora, 2008. isbn: 0130224723.
[57] HC-SR501 PIR Motion Detector. Datasheet. Publicação Eletrônica. MPJA.
[58] INNOVATIVE IDEAS. Old Laptop camera to USB Camera Conversion. How to
make Laptop webcam to USB Video Camera. url: https://www.youtube.com/
watch?v=g8XbDJLKKys (acesso em 20/05/2019).
[59] IDO. Color-Reflection. 2016. url: http://idoincorporated.com/the-effect-
of-color-on-light-and-energy/color-reflection-390x230pxopt-1-jpg/
(acesso em 13/09/2019).
[60] M. Jamshed et al. “Significant HOG. Histogram of Oriented Gradient Feature
Selection for Human Detection”. Em: International Journal of Computer Applica-
tions (dez. de 2015).
[61] A. H. Jebril et al. “Overcoming Limitations of LoRa Physical Layer in Image
Transmission”. Em: Sensors (2018). url: https://www.mdpi.com/1424-8220/
18/10/3257.
[62] Kanaris. OV7670. url: https : / / www . github . com / Kanaris / OV7670 / tree /
master/ (acesso em 19/06/2019).
[63] K. Kasprzak. Libraries to program and use UART-based EBYTE wireless data
transceivers. url: https://github.com/KrisKasprzak/EBYTE (acesso em 22/06/2019).
[64] Kepp27. OV7670 Without FIFO Very Simple Framecapture With Arduino. url:
https://www.instructables.com/id/OV7670- Without- FIFO- Very- Simple-
Framecapture-With-/ (acesso em 05/06/2019).
[65] D. E. King. A toolkit for making real world machine learning and data analysis
applications in C++. 2017. url: https://github.com/davisking/dlib (acesso
em 08/08/2019).
[66] D. E. King. Dlib 18.6 released. Make your own object detector! 2014. url: http:
//blog.dlib.net/2014/02/dlib- 186- released- make- your- own- object.
html?m=1 (acesso em 08/08/2019).
[67] D. E. King. dlib vs OpenCV face detection. 2014. url: https://www.youtube.
com/watch?v=LsK0hzcEyHI (acesso em 08/08/2019).
[68] D. E. King. High Quality Face Recognition with Deep Metric Learning. 2017. url:
http://blog.dlib.net/2017/02/high- quality- face- recognition- with-
deep.html (acesso em 08/08/2019).
[69] D. E. King. “Max-Margin Object Detection”. Em: Cornell University Archive
(jan. de 2015).
[70] N. Kumar. Interpixel Redundancy. 2011. url: https : / / pt . slideshare . net /
NaveenKumar11/interpixel-redundancy (acesso em 09/08/2019).
101

[71] Adafruit Explore & Learn. How PIRs Work. url: https://learn.adafruit.com/
pir-passive-infrared-proximity-motion-sensor/how-pirs-work (acesso em
05/04/2019).
[72] C. Liechti. PySerial Documentation. 2015. url: https : / / pythonhosted . org /
pyserial/ (acesso em 13/07/2019).
[73] R. B. Litchfield. Tom Wedgwood. An Account of his life, his discovery and his
friendship with Samuel Taylor Coleridge, including the letters of Coleridge to the
Wedgwoods and An Examination of Accounts of Alleged earlier photographic dis-
coveries. London: Duckworth e Co., 1903.
[74] indo logic. Menggunakan kamera modul OV7670 dengan Arduino part 1-3. url:
https://www.youtube.com/watch?v=y2myh6Mptt0 (acesso em 04/06/2019).
[75] F. Lundh. Python Imaging Library. 2011. url: http://www.pythonware.com/
products/pil/ (acesso em 31/08/2019).
[76] M. Lutz. Learning Python. Powerful Object-Oriented Programming. 4ª ed. Sebas-
topol, CA: O’Reilly Media, 2009.
[77] I. Luuk. Arduino Image Capture. url: https://www.github.com/indrekluuk/
ArduinoImageCapture/tree/master/ (acesso em 19/06/2019).
[78] I. Luuk. Arduino OV7670 live image over USB to PC. url: https : / / www .
youtube.com/watch?v=4w0ILM_6Ew4 (acesso em 30/05/2019).
[79] I. Luuk. Arduino OV7670 live image to screen. url: https://www.youtube.com/
watch?v=Dp3RMb0e1eA (acesso em 20/05/2019).
[80] I. Luuk. LiveOV7670. url: https : / / github . com / indrekluuk / LiveOV7670
(acesso em 19/06/2019).
[81] I. Luuk. LiveOV7670 project now supports Arduino Mega. url: https:// www.
youtube.com/watch?v=8SNrivo5VDA (acesso em 05/06/2019).
[82] I. Luuk. Update: Arduino OV7670 live image over USB to PC. url: https://
www.youtube.com/watch?v=4w0ILM_6Ew4 (acesso em 30/05/2019).
[83] M. Mahoney. Data Compression Explained. url: http://mattmahoney.net/dc/
dce.html#Section_6 (acesso em 11/09/2019).
[84] R. Martins. Camera OV7670 + Arduino UNO + Programa + Software - portu-
guese. url: https : / / www . youtube . com / watch ? v = R6RoGqV17Vw (acesso em
30/05/2019).
[85] University of Massachussetts. Labeled Faces in the Wild. url: http://vis-www.
cs.umass.edu/lfw/ (acesso em 08/09/2019).
[86] E. L. de Medeiros. Desenvolvimento de um Sistema de Aquisição de Dados em Rede
Hı́brida de Comunicação de uma Planta Hidráulica focado em LoRa. Monografia
(Graduação). Publicação Eletrônica. João Pessoa, 2018.
[87] K. Mekki et al. “A comparative study of LPWAN technologies for large-scale IoT
deployment”. Em: ICT Express 5 (2019). url: https://www.sciencedirect.
com/science/article/pii/S2405959517302953.
[88] K. Miura e C. S. Carlson. Residents of Elfhelm. Colorido Digitalmente. url: http:
/ / www . lithrael . com / ig / albums / userpics / 10001 / ForestFINALFLAT . jpg
(acesso em 13/08/2019).
102

[89] J. Nakamura et al. Image Sensors and Signal Processing for Digital Still Cameras.
4ª ed. Boca Raton, FL: CRC Press LLC, 2006.
[90] Klima Naturali. Olho Humano - Estrutura. 2011. url: http://www.klimanaturali.
org / 2011 / 03 / olho - humano - estrutura - do - olho - humano . html (acesso em
13/09/2019).
[91] OmniVision. Serial Camera Control Bus Functional Specification. Application Note.
2ª ed. Mar. de 2002.
[92] M. Pandit. How to Use OV7670 Camera Module with Arduino. url: https :
/ / circuitdigest . com / microcontroller - projects / how - to - use - ov7670 -
camera-module-with-arduino (acesso em 05/06/2019).
[93] M. Patel, J. Shangkuan e C. Thomas. What’s new with the Internet of Things?
McKinsey Global Institute. Mai. de 2017. url: https : / / www . mckinsey . com /
industries/semiconductors/our-insights/whats-new-with-the-internet-
of-things (acesso em 01/09/2019).
[94] C. Petrov. Internet of Things Statistics 2019 [The Rise Of IoT]. url: https :
//techjury.net/stats-about/internet-of-things-statistics/ (acesso em
01/09/2019).
[95] C. Pham. “Low cost wireless image sensor networks for visual surveillance and in-
trusion detection applications”. Em: IEEE ICNSC (2015). url: https://ieeexplore.
ieee.org/document/7116066.
[96] C. Pham. “Low cost, Low-Power and Long-range Image Sensor for Visual Surveil-
lance”. Em: SmartObjects (2016). url: http : / / cpham . perso . univ - pau . fr /
Paper/SmartObjects16.pdf.
[97] Microcontrollers Projects. Pixy Cam to with Arduino. url: https://www.youtube.
com/watch?v=DV4YK_Kk5IY (acesso em 20/05/2019).
[98] W. Rambo. CARTÃO SD COM ARDUINO DE UM JEITO MUITO SIMPLES.
url: https://www.youtube.com/watch?v=uj5eSph5KuM (acesso em 07/07/2019).
[99] M. Rensen. The Bartlane System (Coded System). 2004. url: http://www.hffax.
de/history/html/bartlane.html (acesso em 09/09/2019).
[100] RoboCore. Sensor de Presença PIR - HC-SR501. url: https://www.robocore.
net/loja/sensores/sensor-de-presenca-pir-hc-sr501 (acesso em 31/08/2019).
[101] J. A. Roper. This Video Isn’t Real. Vsauce. url: https://www.youtube.com/
watch?v=dh63v6bXEsA (acesso em 06/09/2019).
[102] A. Rosebrock. An interview with Davis King, creator of the dlib toolkit. PyImage-
Search. Mar. de 2017. url: https://www.pyimagesearch.com/2017/03/13/an-
interview - with - davis - king - creator - of - the - dlib - toolkit/ (acesso em
08/09/2019).
[103] RuthJ180. Arduino Spy Camera. url: https : / / www . youtube . com / watch ? v =
zfDc6CXoL-Y (acesso em 20/05/2019).
[104] J. Santa et al. “LPWAN-Based Vehicular Monitoring Platform with a Generic IP
Network Interface”. Em: Sensors (2019). url: https://www.mdpi.com/1424-
8220/19/2/264.
103

[105] E. F. dos Santos. Tirando fotos com Arduino Mega e OV7670 com chip AL422.
url: http : / / mrportman . blogspot . com / 2018 / 04 / tirando - fotos - com -
arduino-mega-e-ov7670.html (acesso em 19/06/2019).
[106] N. Schiller. Stock: A Cottage Garden Staple. 2017. url: https://gardenerspath.
com/plants/flowers/stock-cottage-garden-staple/ (acesso em 06/09/2019).
[107] M. Schoeffler. How to read and write SD cards with the Arduino Uno — UATS
A&S 6. url: https : / / www . youtube . com / watch ? v = 8MvRRNYxy9c (acesso em
07/07/2019).
[108] Global Sources. Attractive PIR Sensor, PIR Motion Sensor, Infrared Sensor, Re-
placement for Nicera RE200B. url: https://www.globalsources.com/si/AS/
Eagle-Power/6008821063503/pdtl/Attractive-PIR-Sensor/1129250277.htm
(acesso em 03/04/2019).
[109] K. R. Srinath. “Python – The Fastest Growing Programming Language”. Em:
(dez. de 2017).
[110] SurtrTech. Test of OV7670 (Without FIFO) + Arduino - Taking snaps and store
on PC. url: https : / / www . youtube . com / watch ? v = PYW2WA5Igrc (acesso em
05/06/2019).
[111] SX1276/77/78/79 - 137MHz to 1020MHz Low Power Long Range Transceiver.
Datasheet: SX1276/77/78. 1ª ed. Publicação Eletrônica. Semtech. Ago. de 2016.
[112] SX1278 Wireless Module. Datasheet: E32 Series. 1ª ed. Publicação Eletrônica.
ChengDu Ebyte Electronics Technology. 2017.
[113] EME Technologies. How to Interface Camera Module with Arduino — OV7670.
url: https://www.youtube.com/watch?v=ZqAvvLM-9BI (acesso em 30/05/2019).
[114] JYL tectronic. Captura de imagén ARDUINO-CAMARA OV7670 SIN FIFO. url:
https://www.youtube.com/watch?v=o2bgw2YfogA (acesso em 05/06/2019).
[115] A. Thomsen. Módulo câmera VGA OV7670. 2013. url: https://www.filipeflop.
com/blog/modulo-camera-vga-ov7670/ (acesso em 29/05/2019).
[116] B. Traversy. Examples for Python Face Recognition library. url: https://github.
com/bradtraversy/face_recognition_examples (acesso em 08/08/2019).
[117] Google Trends. LoRa. Interesse ao longo do tempo. url: https://trends.google.
com/trends/explore?date=2008- 01- 01%202019- 09- 04&q=LoRa (acesso em
04/09/2019).
[118] L. Vangelista. “Frequency Shift Chirp Modulation: The LoRa Modulation”. Em:
IEEE Signal Processing Letters (dez. de 2017).
[119] J. Vilarino. Internet das Coisas: Um Desenho do Futuro. Proof. 2017. url: https:
//www.proof.com.br/blog/internet-das-coisas/ (acesso em 08/08/2019).
[120] P. Viola e M. Jones. “Rapid Object Detection using a Boosted Cascade of Simple
Features”. Em: Conference on Computer Vision and Pattern Recognition (2001).
url: http://www.merl.com/publications/docs/TR2004-043.pdf (acesso em
13/09/2019).
[121] P. Viola e M. Jones. “Robust Real-time Object Detection”. Em: Second Interna-
tional Workshop on Statistical and Computational Theories of Vision - Modeling,
Learning, Computing and Sampling (jul. de 2001).
104

[122] A. Whitney. These Celebrity Look-Alikes Will Blow Your Mind. Popsugar Cele-
brity. Jan. de 2018. url: https://www.popsugar.com/celebrity/Celebrity-
Lookalikes-Celebrities-Look-Same-34357837 (acesso em 29/08/2019).
[123] Wikipedia. Bayer filter. url: https://en.wikipedia.org/wiki/Bayer_filter
(acesso em 13/09/2019).
[124] Wikipedia. CMYK Color Model. url: https://en.wikipedia.org/wiki/CMYK_
color_model (acesso em 13/09/2019).
[125] Wikipedia. CYGM filter. url: https://en.wikipedia.org/wiki/CYGM_filter
(acesso em 13/09/2019).
[126] Wikipedia. Discrete cosine transform. url: https://en.wikipedia.org/wiki/
Discrete_cosine_transform#Multidimensional_DCTs (acesso em 12/09/2019).
[127] Wikipedia. Foveon X3 sensor. url: https://en.wikipedia.org/wiki/Foveon_
X3_sensor (acesso em 13/09/2019).
[128] Wikipedia. HSL and HSV. url: https://en.wikipedia.org/wiki/HSL_and_HSV
(acesso em 13/09/2019).
[129] Wikipedia. JPEG. url: https : / / en . wikipedia . org / wiki / JPEG (acesso em
12/09/2019).
[130] Wikipedia. Lenna. url: https://en.wikipedia.org/wiki/Lenna (acesso em
29/05/2019).
[131] Wikipedia. RGB Color Model. url: https : / / en . wikipedia . org / wiki / RGB _
color_model (acesso em 13/09/2019).
[132] Wikipedia. YIQ. url: https : / / en . wikipedia . org / wiki / YIQ (acesso em
13/09/2019).
[133] DroneBot Workshop. Pixy2 Camera - Image Recognition for Arduino & Rasp-
berry Pi. url: https://www.youtube.com/watch?v=391dXDjqzXA (acesso em
20/05/2019).
[134] RF Wireless World. What is Infrared Pyroelectric Detector-Function,operation.
url: https://www.rfwireless-world.com/Terminology/What-is-Infrared-
Pyroelectric-Detector.html (acesso em 05/04/2019).
[135] Arduino Sinhala with Yasas. OV7670 Camera Module with Arduino. url: https:
//www.youtube.com/watch?v=um3Uil0PrLI (acesso em 04/06/2019).
[136] A. et al. Zanella. “Internet of Things for Smart Cities”. Em: IEEE Internet of
Things Journal 1 (fev. de 2014).
[137] Q. Zeng. Arduino JPEG camera demo. url: https://www.youtube.com/watch?
v=KApA-AJUjc0 (acesso em 29/05/2019).
[138] W. Zhai. “Design of NarrowBand-IoT Oriented Wireless Sensor Network in Urban
Smart Parking”. Em: iJOE (2017). url: https://online-journals.org/index.
php/i-joe/article/view/7886.
[139] P. Zwartmans. Arduino processing webcam. url: https : / / www . youtube . com /
watch?v=XClQQqWMIr0 (acesso em 20/05/2019).
105

A Pares de Rostos Utilizados da Seção 7.4

Figura A.1: Pares de Rostos Utilizados da Seção 7.4

(a) Javier Bardem x Jeffrey Dean Morgan (b) Jeff Bridges x Kurt Russel

(c) Jessica Chastain x Bryce D. Howard (d) Zooey Deschanel x Katy Perry

(e) Will Ferrell x Chad Smith (f) Tom Hardy x Logan Marshall-Green

(g) Heath Ledger x Joseph Gordon-Levitt (h) Zachary Quinto x Eli Roth
FONTE: Insider (2017) e Popsugar Celebrity (2018)
106

B Tabelas de Custos

Tabela B.1: Tabela de Custos Estimados - Sensor Embarcado

Componente Qtde. AliExpress Banggood Mercado Livre


Sensor de Presença 1 R$1,61 R$9,61 R$9,49
Arduino Mega 2560 1 R$28,68 R$57,46 R$49,00
Módulo MicroSD-SPI 1 R$3,05 R$8,89 R$13,40
OV7670 c/ Buffer 1 R$34,37 R$56,18 R$62,90
E32-TTL-100 1 R$21,73 R$29,73 R$129,00

Tabela B.2: Tabela de Custos Estimados - Receptor de Dados

Componente Qtde. AliExpress Banggood Mercado Livre


Arduino Uno 1 R$18,38 R$31,51 R$28,00
E32-TTL-100 1 R$21,73 R$29,73 R$129,00

A Unidade de Processamento não possui tabela de custos, já que é composta apenas
por elementos de software. Entretanto, é possı́vel mencionar os requisitos mı́nimos e reco-
mendados para utilização do algoritmo, com base nos requisitos necessários dos recursos
de software dos quais este se utiliza.

Tabela B.3: Requisitos Mı́nimos e Recomendados - Unidade de Processamento

Requisitos Mı́nimo Recomendado


CPU Intel i3 ou equiv. Intel i7 ou equiv.
Memória RAM 2 GB 8 GB
GPU Integrada Não Sim
Python v2.7 v3.6.4

Você também pode gostar