Você está na página 1de 35

CIÊNCIA DA COMPUTAÇÃO

DESENVOLVIMENTO DE UM SISTEMA DE IDENTIFICAÇÃO E


AUTENTICAÇÃO BIOMÉTRICA: BiometricPass

SANTANA DE PARNAÍBA
2017
SUMÁRIO

OBJETIVO 3
1. INTRODUÇÃO 4
1.1. Introdução à biometria 4
1.2. Agrotóxicos em propriedades rurais 5
1.3. Projeto: BiometricPass 6
2. FUNDAMENTOS DAS PRINCIPAIS TÉCNICAS BIOMÉTRICAS 6
2.1. Suavização (Smoothing)8
2.1.1. Filtro Passa-Baixa 8
2.1.2. Filtro da mediana 8
2.2. Detecção de Bordas (Edge Detection) 8
2.2.1. Detecção de linhas e pixels isolados 9
2.2.2. Bordas em imagens 10
2.3. Operador de Sobel 10
2.3.1. P-Tile 11
2.4. Afinamento de bordas (Thinning) 11
2.5. Conexão (Linking) 12
2.5.1. A Transformada de Hough 12
2.5.2. Método de varredura e rotulação (scan & label) 13
2.5.2.1. Conexão de segmentos colineares 14
2.6. Ajustamento de retas 14
3. PLANO DE DESENVOLVIMENTO DA APLICAÇÃO 15
3.1. Por que este tema? 15
3.2. De onde surgiu a ideia a aplicação? 16
3.3. Onde o tema do trabalho se encaixa na aplicação? 16
3.4. Aplicações do mundo real que nos ajudaram no desenvolvimento 16
3.4.1. Como a aplicação foi pensada usando as ideias acima? 17
3.5. O que esperamos alcançar com este projeto? 17
3.6. Recursos usados para o desenvolvimento 17
4. PROJETO DESENVOLVIDO 18
4.1. Processamento de imagem 21
5. LINHAS DE CÓDIGO 22
6. BIBLIOGRAFIA 29
7. FICHAS DE ATIVIDADES PRÁTICAS SUPERVISIONADAS 29

2
OBJETIVO

Este trabalho apresenta um estudo sobre a biometria, levando em


consideração as técnicas para a extração de feições de imagens digitais.
Foi criado um sistema que possui autenticação e identificação biométrica com
a função de simular o acesso ao banco de dados do Ministério do Meio Ambiente,
chamado BiometricPass. Onde haverá uma restrição para poder entrar no sistema
tendo três níveis de acessos, sendo o primeiro para o acesso de todos, segundo
para o acesso apenas de diretores, e o terceiro para o acesso apenas pelo ministro
do meio ambiente.

3
1. INTRODUÇÃO
(Vieira et al., 2010) Cada pessoa possui características únicas sendo, físicas
ou comportamentais, podendo ser diferenciadas através destas. A biometria é o
estudo da identificação destas características dos seres humanos.
Em cima desta ciência foi criado um sistema para este trabalho chamado de
BiometricPass.

1.1. Introdução à biometria


(Vieira et al., 2010) As técnicas biométricas são usadas desde a época pré-
histórica. Mas a técnica de reconhecimento formal dos seres humanos, pode ser
verificado a partir da história da civilização.
(Vieira et al., 2010) Em uma caverna com 31.000 anos foram encontradas
pinturas pré-históricas nas paredes que entorno destas foram identificadas marcas
de mãos, servindo como assinaturas.
(Vieira et al., 2010) Pode ser encontrado registros de uso a técnica de
impressões digitais como marcas pessoais desde transações comerciais na
Babilônia (500 a.C.) até nas negociações feitas dos primeiros comerciantes
chineses. Outro registro de tais técnicas biométricas foram os mercadores do Egito
antigo, no Vale do Nilo, eram reconhecidos através de características físicas,
possuindo finais na face ou cicatrizes, que por meio destas o cliente poderia
identificar se os comerciantes eram mesmo quem diziam ser ou se tinham uma boa
reputação.
(Vieira et al., 2010) Com o acontecimento da primeira revolução industrial
houve a necessidade de um registro formal das características dos infratores para
que fossem facilmente reconhecidos. Devido a isso, um criminologista francês e
criador da Antropometria (sistema de medidas de características físicas do ser
humano) chamado, Alphonse Bertillon que desenvolveu um "banco de dados" com
fotografias de diferentes regiões dos corpos de criminosos.
(Vieira et al., 2010) Na metade do século XX, junto com o sucesso de
sistemas de computadores, começaram a surgir os sistemas biométricos, tendo um
aumento das atividades nos anos 90. Em 2000, os sistemas biométricos começaram
a integrar o cotidiano humano.
(Vieira et al., 2010) Os sistemas biométricos mais importantes na atualidade

4
são: Biometria de assinaturas, biometria digital, biometria de retina, biometria da
face, biometria de íris, biometria de voz e biometria geométrica da mão.

1.2. Agrotóxicos em propriedades rurais


(Ministério do Meio Ambiente). Na década de 1950 ocorreu a revolução verde,
trazendo novidades à agricultura, com novas tecnologias, fazendo com que,
crescesse o uso de agrotóxicos, com o propósito de aumentar a produtividade e
controlar doenças.
(Ministério do Meio Ambiente). Os agrotóxicos servem como agentes de
processos químicos, biológicos ou físicos, que são utilizados no armazenamento,
produção e melhoria de produtos agrícolas, proteção de florestas, nativas ou
plantadas, industriais e entre outras. Visando preservar a fauna e flora dos atos que
são prejudiciais à elas, causada pelos seres vivos nocivos.
Segundo o ministério do meio ambiente, os agrotóxicos são considerados
também como produtos e substâncias aplicados como dessecantes, estimuladores,
inibidores de crescimento e desfolhantes. Podendo ser dividido em duas categorias:
Agrícolas e Não-Agrícolas.
(Ministério do Meio Ambiente). Pelas substâncias dos produtos que recebem
os agrotóxicos sofrerem modificações, independentemente do modo que este é
aplicado, há uma grande possibilidade de atingir as águas e o solo, por conta de
chuvas e ventos, causando a deriva, lixiviação, lavagem das folhas tratadas e a
erosão, podem causar grandes danos ao meio ambiente e à saúde de seus
principais receptores, seres humanos. Por conta disso, para serem exportados,
produzidos, importados, comercializados e aplicados precisam ser primeiro
registrados em um órgão federal, seguindo as exigências e regras decretadas pelos
responsáveis.

Segundo um artigo do site das Nações Unidas, publicado em 2016, relata


que,
"Os produtos com toxicidade aguda são os responsáveis por um elevado número de
casos de intoxicação imediata, sobretudo nos países em desenvolvimento, enquanto
os produtos com efeitos tóxicos crônicos podem provocar câncer ou transtornos de
desenvolvimento em crianças em fase de crescimento."
Nações Unidas, <https://nacoesunidas.org/agencias-da-onu-apresentam-plano-para-

5
reduzir-danos-causados-por-agrotoxicos-perigosos/>

Em 11 de julho de 1989, para evitar tais problemas, foi elaborada a lei


7.802/89 para o uso de agrotóxicos. Abaixo possui o artigo 3º, parágrafo 6º, a fim de
curiosidade,
"Art. 3º Os agrotóxicos, seus componentes e afins, de acordo com definição do art.
2º desta Lei, só poderão ser produzidos, exportados, importados, comercializados e
utilizados, se previamente registrados em órgão federal, de acordo com as diretrizes
e exigências dos órgãos federais responsáveis pelos setores da saúde, do meio
ambiente e da agricultura. [...]
§ 6º Fica proibido o registro de agrotóxicos, seus componentes e afins: a) para os
quais o Brasil não disponha de métodos para desativação de seus componentes, de
modo a impedir que os seus resíduos remanescentes provoquem riscos ao meio
ambiente e à saúde pública; b) para os quais não haja antídoto ou tratamento eficaz
no Brasil; c) que revelem características teratogênicas, carcinogênicas ou
mutagênicas, de acordo com os resultados atualizados de experiências da
comunidade científica; d) que provoquem distúrbios hormonais, danos ao aparelho
reprodutor, de acordo com procedimentos e experiências atualizadas na
comunidade científica; e) que se revelem mais perigosos para o homem do que os
testes de laboratório, com animais, tenham podido demonstrar, segundo critérios
técnicos e científicos atualizados; f) cujas características causem danos ao meio
ambiente."
BRASIL, Consolidação das leis de agrotóxicos. Decreto-Lei Nº 7.802, de 11 de julho
de 1989, <http://www.planalto.gov.br/ccivil_03/leis/L7802.htm>

1.3. Projeto: BiometricPass


O estudo feito sobre o tema e o software desenvolvido visa simular um
acesso às informações sobre agrotóxicos. Possuindo três níveis de restrições para
isto. E também, simula a identificação de biometria para fazer tais acessos ao
programa.
Para simular as informações sobre agrotóxicos, foram retiradas notícias de
sites sobre isto, onde estas foram separadas entre os níveis de acesso.

6
2. FUNDAMENTOS DAS PRINCIPAIS TÉCNICAS BIOMÉTRICAS
(Guimarães, 2007) A biometria tem como objetivo analisar as diferenças das
características que sejam únicas para cada ser. E para que possa utiliza-la, é
necessário, além de haver um cadastro no sistema para que o dado seja
armazenado, para que assim possa ser feito uma comparação, realizar um processo
que contem quatro partes, que são:
 (Guimarães, 2007) Captura: a primeira etapa é onde ocorre a obtenção do dado.
Onde esta captura é feita analogicamente, sendo assim, teoricamente, existem
inúmeras possibilidades para os dados de entrada desta etapa.
 (Guimarães, 2007) Conversão: esta etapa baseia-se em converter os dados
coletados do formato analógico para o digital.
 (Guimarães, 2007) Padronização: a terceira etapa consiste em fazer uma busca
por padrões, detalhes únicos, encontrando então, o dado que será gravado.
 (Guimarães, 2007) Comparação: a quarta e última etapa baseia-se em comparar
os dados, ou seja, verificar se o dado que está armazenado é realmente igual ao
original.
(Guimarães, 2007) Como exemplos dos principais métodos biométricos mais
importantes da atualidade, temos: Biometria de assinaturas, biometria digital,
biometria de retina, biometria da face, biometria de íris, biometria de voz e biometria
geométrica da mão. Para este trabalho iremos falar sobre a biometria de feições.
(Artero, 2011) Para a obtenção de informações de uma imagem, também é
necessário um procedimento, onde a primeira etapa é a segmentação, sendo o
processo de separação dos objetos presentes na imagem. Em alguns casos, como,
em um tratamento simples, como, a limiarização, pode-se utilizar para a
segmentação uma imagem em tons de cinza, desta maneira, separando os objetos
presentes, do fundo da imagem. Outro jeito de fazer segmentação seria o uso da
determinação de bordas dos objetos presentes na cena, utilizando os detectores de
descontinuidades por conta de tais áreas haverem uma variação grande na imagem.
As ferramentas de descontinuidades básicas são as mais utilizadas, sendo elas em
imagens, os pontos, as linhas e as bordas, mas, em procedimentos fotogramétricos
e em outros, as que possuem uma maior importância são as linhas retas, sendo
definidas pelas bordas dos objetos. Os procedimentos tradicionais para a realização
da função de conversão de imagens digitais em vetores consistem geralmente, em
7
uma sequência, podendo ser divida em cinco etapas, que são elas: Suavização
(Smoothing), Detecção de bordas (Edge Detection), Limiarização (Thresholding),
Afinamento de bordas (Thinning) e Conexão (Linking). Este conjunto de etapas pode
ser chamado como um processo único de vetorização.

2.1. Suavização (Smoothing)


(Artero, 1999) A primeira etapa do processo de vetorização da imagem, seria
a execução da suavização, tendo como objetivo eliminar o ruído na imagem e
reduzir os detalhes que não são importantes nela (sendo conservado somente as
feições que possuem mais importâncias).
(Artero, 1999) Os filtros de suavização pode provocar um borramento da
imagem, fazendo com que, diminui a exposição de bordas dela. Sendo que, quando
tem o objetivo de fazer a vetorização da imagem, é necessário preservar as
definições de bordas desta, então, é importante nesta etapa, utilizar os filtros de
suavização que possua uma grande preservação das bordas e eliminação dos
ruídos. Neste trabalho falaremos apenas sobre os filtros de passa-baixa e mediana
desta etapa.

2.1.1. Filtro Passa-Baixa


(Artero, 1999) O filtro passa-baixa, geralmente é aplicado com o objetivo de
suavizar imagens, sobretudo eliminar ruídos. Este filtro é fácil de se implementar,
mas, não favorece na necessidade de conservação de bordas, então, é preciso
alguma variação.
(Artero, 1999) As partes da imagem que possuem presença de ruídos e
bordas são caracterizadas como regiões de altas frequências, sendo então
necessário utilizar filtros comuns, como passa-baixa, para diminuir estas áreas, não
alterando as baixas frequências, que são, as regiões homogêneas da imagem.

2.1.2. Filtro da mediana


(Artero, 1999) O filtro da mediana tem como vantagem possibilitar uma boa
remoção dos ruídos, não modificando muitas características da borda. A série de
uma mediana é dada pelo elemento que separa os valores em dois, sendo eles
iguais, e também, é necessário que a série esteja ordenada.

8
2.2. Detecção de Bordas (Edge Detection)
(Artero, 1999) Geralmente, a aplicação de detecção de bordas, baseia-se no
procedimento de detecção de brilho na imagem. Neste caso, os operadores mais
comuns são de Prewitt e Sobel, também se pode citar o operador de Nevati e Babu.
(Artero, 1999) Os pixels isolados, bordas e linhas retas, no estudo de
imagens, são algumas das feições mais significativas. No domínio espacial, estas
feições são caracterizadas por diferenças bruscas no brilho dos pixels da imagem, já
no domínio da frequência, tais feições são representadas pela presença de altas
frequências.
(Artero, 1999) Em relação ao domínio espacial, a etapa de detecção de
feições baseia-se na aplicação de operadores locais, máscaras de convolução, que
difere cada pixel da imagem, tendo eles, uma resposta, ou magnitude, maior nas
bordas da imagem. Além de ter uma preocupação com os pixels da borda, é também
necessário, conhecer a inclinação da borda nestes pixels, podendo ser conseguido
através destes mesmos operadores.
Nesta etapa possui vários tipos de detecções como, detecções de linhas
isoladas, de pixels isolados e de bordas em imagens e falaremos um pouco sobre
cada um destes tipos, e também sobre o operador de Sobel.

2.2.1. Detecção de linhas e pixels isolados


(Artero, 1999) O pixel isolado é o elemento com mais simplicidade que pode
acontecer em uma imagem. Esta técnica pode ser identificada como aplicação de
uma máscara de convolução, como pode se ver na figura 1.

-1 -1 -1
-1 8 -1
-1 -1 -1

Figura 1 – Máscara usada para identificar pixels isolados. (Artero, 1999)

(Artero, 1999) No caso das linhas que se encontram na imagem, proporciona


grandes chances de identificação dos objetos que estão presentes nela. Na figura 2
apresenta um conjunto de mascaras que podem ser usados para detectar tais linhas
9
isoladas.

10
-1 -1 -1 -1 -1 2 -1 2 1 2 1 1
2 2 2 -1 2 1 -1 2 1 -1 2 1
-1 -1 -1 2 1 1 -1 2 1 -1 -1 2
(a) (b) (c) (d)
Figura 2 – Máscaras que podem ser usadas para identificar linhas isoladas nas direções: (a) 0°,
(b) 45°, (c) 90° e (d) -45º. (Artero, 1999)

(Artero, 1999) Tais casos não possuem muitas aplicações pelo motivo de, não
ser comum a ocasião destes elementos em imagens digitais, sendo então uma
melhor alternativa para a extração de feições, o uso das bordas.

2.2.2. Bordas em imagens


(Artero, 1999) No processo de análise de imagens, é fundamental as bordas
dos elementos existentes nela. Isto acontece pelo motivo das bordas definirem o
contorno dos objetos presentes na imagem.
(Artero, 1999) A grande parte dos métodos de detecção de descontinuidades
consiste no caso de que elas são, de fato, uma alteração do nível de cinza no pixel
em relação ao estudo tirado de seus vizinhos, então pode-se dizer que tal alteração
é definida pela derivada do sinal no pixel.
(Artero, 1999) O processo para ter uma aproximação da derivada na prática, é
feita através de máscara de convolução.

2.2.3. Operador de Sobel


(Artero, 1999) Se levarmos em conta que os pixels que estão mais perto do
centro são os que apresentam uma maior influência sobre o mesmo, este operador é
determinado pelos maiores valores da parte central.

2.3. Limiarização (Thresholding)


(Artero, 1999) A etapa de limiarização, é utilizada geralmente no caso de
algumas bordas, por possuírem uma baixa magnitude, devem ser desconsideradas,
ou seja, eliminadas, para que a próxima etapa (de afinamento das bordas) seja
simplificada.
(Artero, 1999) Nesta etapa, para uma técnica ser eficiente, tem que conseguir
fornecer automaticamente um valor limiar, a fim de todos os pixels com valor de
11
brilho menor a este, tenham que ser eliminados.
(Artero, 1999) Há vários métodos para conseguir um valor limiar, e é possível
notar que cada um destes utiliza algum fundamento que considera importante para a
obtenção do melhor valor limiar.
(Artero, 1999) A seguir será descrito o método P-Tile, que pode ser utilizado
para obter a limiar. Mas também existem outros métodos como, Método de Pun,
Kapur, Sahoo e Wong, Método de Johannsen e Bille, Método do Triângulo e Método
de Otsu.

2.3.1. P-Tile
(Artero, 1999) O método P-Tile, seria o mais simples para ter a limiar. Este
método se baseia na premissa de que sabe a área de ocupação do objeto na
imagem, com isso, o limiar é estabelecido pelo valor acima do resultante desta área
da imagem, exemplo, supõe-se que o objeto tenha valores altos e que o fundo tenha
valores baixos.
(Artero, 1999) Este método somente é adequado para o objeto a ser separado
tem cor diferente do fundo da imagem, sendo assim, tendo um histograma bimodal.

2.4. Afinamento de bordas (Thinning)


(Artero, 1999) Nesta fase, as bordas que possuem espessura com mais de
um pixel necessitam serem afinadas, tendo então, melhor definição de sua real
posição. Sendo assim, o resultado precisa ser uma borda com a largura de um pixel.
(Artero, 1999) Para chegar a tal resultado, é necessário realizar algumas
etapas, como, afinamento da linha de borda. Visto que, normalmente, na obtenção
da borda, se obtém um conjunto de pixels e não uma apenas uma linha definindo-a.
(Artero, 1999) Os métodos mais conhecidos para esta fase participam das
operações morfológicas afinamento (Thinning) e geração de esqueleto
(Skeletonization), mas, estas operações não são muito adequadas em caso onde as
linhas que serão afinadas não são binárias, sendo assim, são formadas por pixels
que possuem brilho alterável, alteração de magnitude, e também é observado que o
valor do brilho fica maior conforme a aproximação do mesmo sobre a borda, sendo
assim, elas são mais utilizadas em imagens binárias, que possuem todos os pixels
com apenas dois valores de brilho, se resumindo em cor de frente, sendo o objeto, e

12
a cor de fundo, onde o afinamento baseia-se em eliminar gradualmente os pixels da
região de uma borda, desta maneira, fazendo com que, sobre somente os pixels
centrais da região.

2.5. Conexão (Linking)


(Artero, 1999) Nesta etapa, conexão de pixels, deve-se achar todos os pixels
que pertencem a uma borda e agrupa-los, de maneira que constituem uma única
feição, possuindo suas características peculiares, isto é, um pixel inicial, uma
direção, uma linha reta e entre outras.
(Artero, 1999) A transformada de Hough é o método mais conhecido desta
etapa, permitindo localizar objetos (círculos, linhas e entre outros) em imagens
digitais. Por mais que este processo seja de fácil compreensão, o seu algoritmo traz
grandes limitações quanto a sua implementação.

2.5.1. A Transformada de Hough


(Artero, 1999) Sendo esta uma das técnicas mais conhecidas para determinar
as formas geométricas que fazem parte de um dado conjunto de pixels, a
transformada de Hough, é uma técnica robusta, capaz de localizar linhas retas e
outros tipos de feições.
(Artero, 1999) A mesma ideia usada para identificar a localização de um
círculo de raio conhecido, cruzando por um conjunto de pixels, é utilizada no caso de
linhas retas, porém neste caso, para cada pixel da imagem traça-se todo o conjunto
de retas que passam por ele. E então de novo a reta que deslocar-se ao mesmo
tempo pelo maior número de pixels será a reta buscada.
(Artero, 1999) Este método é capaz de achar linhas retas em bordas que
tenha tido algum tipo de quebra, este caso é bastante comum no processamento de
imagens aéreas.
(Artero, 1999) Um dos problemas que dificulta a aplicação deste método é
que uma discretização muito densificada dos parâmetros θ e ρ faz com que precise
de uma estrutura muito grande. Mas, caso haja a aplicação de uma quantização
insuficiente os resultados que serão apresentados, não terão a precisão desejada.
Outro problema que podemos citar é o caso de surgimento de falsos picos
nos acumuladores, causados pelas interseções das curvas formadas por retas muito

13
grandes, que excedem os valores de acumuladores, por conta de pequenas retas.
Para este problema, a solução pode ser fazer o valor de θ modificar só em uma faixa
perto ao valor da direção da borda.
(Artero, 1999) Um método que em comparação a Transformada de Hough,
permite a utilização de uma estrutura computacional mais simples, seria o
agrupamento θ-ρ, mas, devido ao caso de precisar também da informação de
direção dos pixels da borda, pode ter problemas, uma vez que não se nota na
aplicação uma completa confiança nesta informação.

2.5.2. Método de varredura e rotulação (scan & label)


(Artero, 1999) Este método realiza uma varredura e rotulação dos pixels da
imagem, de modo que os pixels com mesmos vizinhos e direção ganham um mesmo
rótulo, onde simultaneamente, uma estrutura de dados é usada para armazenar as
propriedades das retas que estão sendo determinadas.
(Artero, 1999) No método de varredura e rotulação a imagem é percorrida da
esquerda para a direita e de cima para baixo, sendo que, para cada pixel, conforme
seja sua direção são examinados os vizinhos e, a vizinhança que será levada em
consideração depende da direção do pixel atual. Se for identificado perto deste pixel,
algum vizinho que já foi rotulado, então o pixel atual ganha o mesmo rotulo.
Operando desta maneira, um segmento começa a ser estabelecido.
(Artero, 1999) Quando se fala pixel vizinho do pixel atual, podemos julgar que,
o pixel vizinho se encontra no máximo a uma distância equivalente a dois, onde,
nesse caso, quer dizer que existe um pixel que também não possui rótulo entre o
pixel atual e o seu vizinho, sendo este pixel sem magnitude e sem direção, onde
essas informações podem nunca terem existido, por conta de uma pequena quebra
do segmento, ou então, terem sido excluídas na etapa de limiarização e, também é
necessário ter a mesma direção que o pixel atual. Este pixel possui o nome de pixel
ponte, por estabelecer a ligação entre o pixel atual e o pixel rótulo. Ele também tem
que ser incluído nesta linha, para não ter problemas, por ele representar um buraco
na linha que esta sendo traçada e deve receber o mesmo rotulo do pixel vizinho. O
pixel ponte tem que ter o mesmo rótulo, mesma direção e uma magnitude, sendo
esta, a média entre a magnitude do pixel atual e vizinho.
(Artero, 1999) Após fazer a processo de varredura e rotulação, pode ocorrer o

14
processo de eliminação de linhas insignificantes, onde, verifica-se a presença de
uma grande quantidade de linhas que possuem um tamanho insignificante, sendo
em muitas situações, apenas um pixel. Mas também, pode acontecer que estes
pequenos segmentos, se reconectem uns aos outros, ocasionando maiores
segmentos. Com isso, possa ser mais proveitoso que antes de realizar a eliminação
de tais segmentos, se faça a conexão destes (este caso será descrito a seguir).

2.5.2.1. Conexão de segmentos colineares


(Artero, 1999) Uma técnica que pode ser usada para realizar este processo é
averiguar as vizinhanças de cada pixel inicial e final de todos os segmentos
conseguidos, e então, checar se possui nas proximidades deles, o início ou fim de
outro segmento. Caso ocorra, é necessário checar ainda se eles têm uma mesma
direção, e nessa circunstância, deve ter a união dos dois, formando um único
segmento. Com isso, as características do novo segmento devem ser atualizadas,
sendo realizadas as necessárias alterações na estrutura de dados que possui o
controle da localização do início e fim deste segmento, e a exclusão dos segmentos
que tiveram união, onde na prática, o primeiro segmento é atualizado contendo os
atributos do novo segmento, e o segundo tem que ser excluído.
(Artero, 1999) Nesta etapa é importante levar em consideração as pequenas
diferenças de direção, na hora de analisar a junção de dois segmentos, pois na
etapa de detecção de bordas nem sempre é possível conseguir os mesmos valores
de direção para todos os pixels relacionados a uma mesma borda. Em muitas
situações, dois segmentos que estão próximos, têm pequenas diferenças de direção
então, podem ser ligados em um único segmento. Porém, existem casos onde tais
segmentos não poderão ser unidos. Uma medida que pode ser usada para
determinar em quais circunstancias dois segmentos poderão ser unidos é, se as
distancias dos segmentos que estão sendo analisados, são menores que um fator
de qualidade previamente estabelecido. Os valores de distância são estabelecidos
pela distância entre os pixels finais dos segmentos, e a reta determinada pelos
extremos opostos destes.

2.6. Ajustamento de retas


(Artero, 1999) Depois de identificar os pixels que fazem parte a um

15
determinado segmento, é necessário determinar a equação da reta que melhor se
adapta a estes pixels, sendo esta definida na etapa de ajustamento de retas.
(Artero, 1999) Nesta etapa pode ser utilizado o método M.M.Q. (Método dos
Mínimos Quadrados). Este método é bem simples e baseia-se em diminuir o
somatório dos quadrados das distâncias entre os pixels e a reta em que são
ajustados. Ele possibilita que, caso seja obtido uma minimização insuficiente, a reta
possa ser repartida em outras menores, até que consiga obter retas adequadas aos
pixels identificados, obedecendo a um fator de qualidade antes estabelecido. Então,
desta maneira, é definido um controle de qualidade dos resultados alcançados.

3. PLANO DE DESENVOLVIMENTO DA APLICAÇÃO 


 
3.1. Por que este tema? 
Vivemos cercados de serviços que usamos quase 24h por dia como: redes
sociais, cartões bancários, serviços de streaming de música e mais infinitas
possibilidades existentes no mundo tecnológico moderno. 
O que poucos se importam, entretanto é de extrema importância para outros,
é a segurança oferecida por esses serviços. Como estou seguro sabendo que meus
dados pessoais e informações privilegiadas de minha vida estão em redes sociais
visíveis para qualquer ser humano do planeta visualizá-la a hora que bem
entender? 
Todos nós temos a opção de decidir não usar os serviços de redes sociais ou
bancários, porém, como iremos se encaixar em uma sociedade tão mergulhada em
tamanha tecnologia? Hoje nossas vidas são baseadas em tecnologias cada vez
mais invasivas ao nosso dia-a-dia. 
Em constante crescimento, o ramo da tecnologia hoje conta com inúmeras
formas de assegurar a segurança de nós usuários, como palavras-chaves,
perguntas secretas, desenhos-padrões, leituras de íris e biometria.
Todas as tecnologias são felizes tratando o que se propõem a fazer, porém
uma em particular é a mais utilizada hoje no mundo, de fácil acesso e de grande
conveniência. Uma perfeita combinação entre o útil ao seguro. Estamos falando da
biometria. 

16
Todas as tecnologias de biometria apresentam uma maior taxa
de proteção ao usuário, que pode ser usado desde o desbloqueio de um celular, até
o controle de funcionários autorizados a entrar em um determinado ambiente. 

3.2. De onde surgiu a ideia da aplicação?


  Queríamos desenvolver uma aplicação capaz de ser usada no dia-a-dia do
usuário de computadores pessoais, visto que a maioria das aplicações da biometria
hoje em dia é voltada para o mundo bancário e mobile. Levamos em consideração
como os usuários de computadores efetivamente usam suas máquinas a fim de ter
uma maior assertividade com o propósito do nosso software.
Percebemos que usuários coorporativos são mais sucintos ao bloqueio e
desbloqueio recorrente de suas máquinas, pois estão em constante movimento pela
empresa, como por exemplo, para buscar água ou ir a uma reunião.
Com isso em mente, tivemos a ideia de fazer uma ferramenta capaz de
identificar de forma inteligente fotos via biometria que pode ter seu algoritmo
acoplado a outras aplicações, como leitura de digital.

3.3. Onde o tema do trabalho se encaixa na aplicação? 


Notamos que no ramo do meio ambiente, não temos tanta preocupação
quanto à segurança da informação. Deste modo, precisávamos inserir no ramo uma
forma que era mais sucinta no modo de tratar os usuários da área.
Camponeses e agricultores, pouco se importam sobre a segurança dos dados
que lhes é oferecida, pois imaginam que ninguém nunca irá ter interesse em tal
conteúdo.
Uma das maiores fontes de rendas do país vem da agricultura e atividades
voltadas ao meio ambiente e isso se deve ao grande volume de produtos e serviços
oferecidos pela indústria. Assim, é de extrema importância que seja feita a proteção
dos dados referente às empresas que tratam de tamanha quantidade de informação
e consequentemente em dinheiro.
Pensando nesta linha de raciocínio, temos como projeto, iniciar os testes
iniciais de nossa aplicação com agricultores e usuários mais voltados ao
agronegócio devido ao gap tecnológico que é apresentado nesta área.
 

17
3.4. Aplicações do mundo real que nos ajudaram no desenvolvimento
 TouchID (Apple);
 Biometria utilizada em bancos (Banco do Brasil, Itaú, Santander, etc);
 Galaxy Iris (Samsung)
 SenseID (Qualcomm)

3.4.1. Como a aplicação foi pensada usando as ideias acima? 


Usamos algoritmos de reconhecimento digital para desenvolver a aplicação e
levamos em consideração usos reais como o desbloqueio de uma máquina pessoal
ou corporativa que devem ser desbloqueadas apenas por seus respectivos donos. 
Os últimos conceitos de mercado para biometria utilizam métodos não
convencionais como comparações de pixel e imagens.
  Construímos uma parte gráfica intuitiva capaz de ser entendida pela maioria
dos usuários básicos a fim de atingirmos uma maior gama de utilizadores.
Queríamos uma forma mais real de aproximar o usuário final das tecnologias de
identificação pessoal, assim usamos uma interface amigável que podemos realizar
pequenas alterações em futuras atualizações.
Nosso maior foco foi usabilidade e rapidez, sendo o último o mais complicado
de se adquirir, pois hoje existem milhares de variáveis em um software desse
tamanho que podem implicar na velocidade de captura e processamento da imagem
adquirida.
Quando imaginamos um software dessa proporção, pensávamos que iríamos
nos deparar com uma grande dificuldade para encontrar informações sobre os
temas, porém não foi assim que as coisas ocorreram, pois na internet existe muito
conteúdo para apoio e muitos métodos que nos ajudaram a finalizar a ideia do
projeto e iniciar o desenvolvimento em si.

3.5. O que esperamos alcançar com este projeto?


Esperamos após o término do projeto, ter uma aplicação capaz de identificar
um usuário usando biometria através de um método independente o bastante para
calcular todas as formas para determinar se o usuário é mesmo o dono do conteúdo
que está tentando acessar.

18
3.6. Recursos usados para o desenvolvimento 
 Java
o Para a criação deste aplicativo foi usada a linguagem de programação
orientada a objetos JAVA, com seu ambiente de compilação JRE versão
1.8. Todas suas bibliotecas e classes são padrões do ambiente e não foi
necessária a criação de novos frameworks para a compilação e
funcionamento da ferramenta.
o Swing e AWT foram usados para a criação da interface e tratamento de
eventos de mouse e teclado.
o A Orientação a Objetos é usada firmemente em todo o projeto com
trechos de encapsulamento, herança e instanciações.
 Eclipse
o A IDE (Integrated Development Environment – ou Ambiente de
Desenvolvimento Integrado) usada para este projeto foi parcialmente o
Eclipse for Mac, e parcialmente o Eclipse Mars para Windows. Os dois em
seus últimos releases/service-packs.
o O JRE (Java Runtime Environment) 1.8 foi importado e adicionado ao
projeto via Eclipse, proporcionando assim uma maior liberdade de
programação e orientação a objeto.
 API de leituras de imagens
o Java OCR, interface capaz de determinar e classificar imagens e
caracteres de texto imagens, suas localidades e emoções de pessoas.

4. PROJETO DESENVOLVIDO
A figura 3 mostra a tela inicial do programa que consiste em três
compartimentos chaves, sendo eles:
 Nome;
 Botão de login;
 Panel de imagem.
No campo Nome, é necessário inserir o nome do usuário que deseja logar no
sistema.

19
Após a inserção, o mesmo deverá clicar no botão de login para o método de
biometria ser realizado no Panel à direita.
Assim que o botão for acionado, o processamento da imagem irá ser
mostrado à direita de acordo com suas etapas.

Figura 3 – Tela Inicial


Caso o login falhe, lhe será avisado que houve algum erro de autenticação,
impossibilitando o usuário de se logar no sistema.
Caso o login seja realizado com sucesso, o usuário será redirecionado para a
tela correspondente com seu nível de acesso, como pode ser visto nas figuras 3, 4 e
5 abaixo:

20
Figura 4 – Acesso nível um

Figura 5 – Acesso nível dois

21
Figura 6 – Acesso nível três

4.1 Processamento da imagem


Primeiro será exibida a imagem original, como pode ser visto na figura 5
abaixo:

Figura 7 – Imagem Original


Então será removido o fundo branco, vide figura 6:

22
Figura 8 – Sem fundo branco
E então é realizado o processo de pintar com escala cinza a imagem, como é
visto na figura 7:

Figura 9 – Escala cinza

5. LINHAS DE CÓDIGO
package biometricpass;

import com.sun.xml.internal.ws.util.StringUtils;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
23
import javax.swing.UIManager;

public class BiometricPass {

//Definicao das variaveis para criacao dos JFrames (janelas)


private static JFrame mainFrame;
private static JFrame operatorsFrame;
private static JFrame directoryFrame;
private static JFrame ministerFrame;
//***********************************************************

public static void main(String[] args) throws ParseException {


//Definicao de cores e fontes de alguns atributos do sistema
UIManager.put("Button.font", new Font("Century Gothic", Font.PLAIN, 12));
UIManager.put("ComboBox.font", new Font("Century Gothic", Font.PLAIN,
20));
UIManager.put("Label.foreground", new Color(54, 54, 54));
UIManager.put("TextField.foreground", new Color(105, 105, 105));
//***********************************************************
//Criacao e definicao das propriedades da tela principal
mainFrame = new JFrame();
mainFrame.setTitle("BiometricPass");
mainFrame.getContentPane().setBackground(Color.WHITE);
mainFrame.setLayout(null);
mainFrame.setSize(750, 500);
mainFrame.setLocationRelativeTo(null);
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createMainFrame();
//***********************************************************
//Torna a tela principal visivel apos configurada
mainFrame.setVisible(true);
//***********************************************************
}

private static void createMainFrame() {


//Definicao das variaveis e criacao dos componentes
JLabel lbNome = new JLabel("Insira Seu Nome:");
JTextField tfNome = new JTextField();
JButton btnEnable = new JButton();
JLabel lbEnable = new JLabel("Pressione para Iniciar a Leitura!");
JPanel scannerPanel = new JPanel();
JLabel image = new JLabel();
JLabel lbStatus = new JLabel();
JLabel lbCredits = new JLabel("Criado por: Bruno, Fabricio, Matheus e
Thiago.");
//***********************************************************
//Definicao das propriedades dos componentes
lbNome.setBounds(72, 60, 250, 40);
lbNome.setFont(new Font("Century Gothic", Font.PLAIN, 30));
tfNome.setBounds(70, 100, 300, 40);
tfNome.setFont(new Font("Century Gothic", Font.PLAIN, 20));
btnEnable.setBounds(170, 180, 100, 100);
btnEnable.setIcon(new ImageIcon("resources/fingerprint.jpg"));
btnEnable.addActionListener((ActionEvent e) -> {
if (!tfNome.getText().equals("")) {
try {
JOptionPane.showMessageDialog(null, "1ª Etapa - Imagem

24
Original");
BufferedImage bufferedImage = ImageIO.read(new
File("resources/digital.jpg"));
image.setIcon(new ImageIcon("resources/digital.jpg"));
lbStatus.setBounds(480, 340, 300, 30);
removeWhite(bufferedImage);
JOptionPane.showMessageDialog(null, "2ª Etapa - Dividindo
Objeto do Fundo");
image.setIcon(new ImageIcon("resources/digital.png"));
lbStatus.setBounds(440, 340, 300, 30);
BufferedImage bufferedImage2 = ImageIO.read(new
File("resources/digital.png"));
applyGreyScale(bufferedImage2);
JOptionPane.showMessageDialog(null, "3ª Etapa - Media Cinza");
image.setIcon(new ImageIcon("resources/output.png"));
lbStatus.setBounds(500, 340, 300, 30);
JOptionPane.showMessageDialog(null, "Acesso Garantido!");
if (tfNome.getText().equalsIgnoreCase("matheus")){
createOperatorsFrame(tfNome.getText());
} else if (tfNome.getText().equalsIgnoreCase("thiago")) {
createDirectoryFrame(tfNome.getText());
} else if (tfNome.getText().equalsIgnoreCase("bruno")) {
createMinisterFrame(tfNome.getText());
}
image.setIcon(null);
tfNome.setText("");
} catch (IOException ex) {
Logger.getLogger(BiometricPass.class.getName()).log(Level.SEVE
RE, null, ex);
}
} else {
JOptionPane.showMessageDialog(null, "Por favor, preencha o campo
NOME para prosseguir com a leitura!",
"Aviso", JOptionPane.WARNING_MESSAGE);
}
});
lbEnable.setBounds(130, 280, 180, 15);
lbEnable.setFont(new Font("Century Gothic", Font.PLAIN, 12));
scannerPanel.setBounds(425, 30, 300, 300);
scannerPanel.setBorder(BorderFactory.createLineBorder(new Color(156, 156,
156)));
scannerPanel.add(image);
scannerPanel.setEnabled(false);
image.setBounds(425, 60, 300, 350);
lbStatus.setFont(new Font("Century Gothic", Font.PLAIN, 18));
lbCredits.setBounds(180, 450, 750, 30);
lbCredits.setFont(new Font("Century Gothic", Font.PLAIN, 13));
//***********************************************************
//Adicionar os componentes a tela principal
mainFrame.add(lbNome);
mainFrame.add(tfNome);
mainFrame.add(btnEnable);
mainFrame.add(lbEnable);
mainFrame.add(scannerPanel);
mainFrame.add(lbStatus);
mainFrame.add(lbCredits);
//***********************************************************
}

25
private static void removeWhite(BufferedImage image) throws IOException {
final BufferedImage imageWithoutWhite = new
BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
for (int i = 0; i < image.getHeight(); i++) {
for (int j = 0; j < image.getWidth(); j++) {
final int red = (image.getRGB(j, i) >> 16) & 0xFF;
final int green = (image.getRGB(j, i) >> 8) & 0xFF;
final int blue = (image.getRGB(j, i)) & 0xFF;
final int RGB = (red + green + blue) / 3;
if (RGB < 180) {
imageWithoutWhite.setRGB(j, i, new Color(red, green,
blue).getRGB());
}
}
}
ImageIO.write(imageWithoutWhite, "PNG", new
File("resources/digital.png"));
}

private static void applyGreyScale(BufferedImage image) throws IOException {


int red = 0, green = 0, blue = 0, times = 0, pixel;
final BufferedImage imageInGreyScale = new BufferedImage(image.getWidth(),
image.getHeight(), BufferedImage.TYPE_INT_ARGB);
for (int i = 0; i < image.getHeight(); i++) {
for (int j = 0; j < image.getWidth(); j++) {
red += (image.getRGB(j, i) >> 16) & 0xFF;
green += (image.getRGB(j, i) >> 8) & 0xFF;
blue += (image.getRGB(j, i)) & 0xFF;
times++;
}
}
int greyScale = (red + green + blue) / times;
for (int i = 0; i < image.getHeight(); i++) {
for (int j = 0; j < image.getWidth(); j++) {
pixel = (image.getRGB(j, i)) & 0xFF;
if (pixel > 0)
imageInGreyScale.setRGB(j, i, new Color(greyScale, greyScale,
greyScale).getRGB());
}
}
ImageIO.write(imageInGreyScale, "PNG", new File("resources/output.png"));
}

private static void createOperatorsFrame(String name) {


//Criacao e definicao das propriedades da tela principal
operatorsFrame = new JFrame();
operatorsFrame.setTitle("Acesso Operários");
operatorsFrame.getContentPane().setBackground(Color.WHITE);
operatorsFrame.setLayout(null);
operatorsFrame.setSize(750, 500);
operatorsFrame.setLocationRelativeTo(null);
operatorsFrame.setResizable(false);
operatorsFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//***********************************************************
//Definicao das variaveis e criacao dos componentes
JLabel lbWelcome = new JLabel("Bem-Vindo, " +
StringUtils.capitalize(name));
JLabel lbTitle = new JLabel("Manchete");

26
JLabel title = new JLabel("Empresa é multada em R$ 66 mil por transportar
9,5 mil litros de agrotóxicos");
JLabel lbPlace = new JLabel("Local do Ocorrido");
JLabel place = new JLabel("Paraná - PR");
JLabel lbDate = new JLabel("Data da Ocorrido");
JLabel date = new JLabel("25 de Outubro de 2017");
JLabel lbOwner = new JLabel("Publicado Por");
JLabel owner = new JLabel("Midimax");
JLabel lbLink = new JLabel("Link da Noticia: ");
JLabel link = new JLabel("http://www.midiamax.com.br/policia/empresa-
multada-r-66-mil-transportar-95-mil-litros-agrotoxicos-323473");
JButton btnBack = new JButton();
//***********************************************************
//Definicao das propriedades dos componentes
lbWelcome.setBounds(10, 10, 730, 30);
lbWelcome.setFont(new Font("Century Gothic", Font.PLAIN, 30));
lbTitle.setBounds(10, 80, 730, 30);
lbTitle.setFont(new Font("Century Gothic", Font.BOLD, 25));
title.setBounds(10, 110, 730, 30);
title.setFont(new Font("Century Gothic", Font.PLAIN, 19));
lbPlace.setBounds(10, 160, 730, 30);
lbPlace.setFont(new Font("Century Gothic", Font.BOLD, 25));
place.setBounds(10, 190, 730, 30);
place.setFont(new Font("Century Gothic", Font.PLAIN, 20));
lbDate.setBounds(10, 240, 730, 30);
lbDate.setFont(new Font("Century Gothic", Font.BOLD, 25));
date.setBounds(10, 270, 730, 30);
date.setFont(new Font("Century Gothic", Font.PLAIN, 20));
lbOwner.setBounds(10, 320, 730, 30);
lbOwner.setFont(new Font("Century Gothic", Font.BOLD, 25));
owner.setBounds(10, 350, 730, 30);
owner.setFont(new Font("Century Gothic", Font.PLAIN, 20));
lbLink.setBounds(10, 400, 730, 30);
lbLink.setFont(new Font("Century Gothic", Font.BOLD, 25));
link.setBounds(10, 430, 730, 30);
link.setFont(new Font("Century Gothic", Font.PLAIN, 13));
btnBack.setBounds(640, 10, 100, 100);
btnBack.setIcon(new ImageIcon("resources/backarrow.jpg"));
btnBack.addActionListener((ActionEvent e) -> {
operatorsFrame.dispose();
});
//***********************************************************
//Adicionar os componentes a tela principal
operatorsFrame.add(lbWelcome);
operatorsFrame.add(lbTitle);
operatorsFrame.add(title);
operatorsFrame.add(lbPlace);
operatorsFrame.add(place);
operatorsFrame.add(lbDate);
operatorsFrame.add(date);
operatorsFrame.add(lbOwner);
operatorsFrame.add(owner);
operatorsFrame.add(lbLink);
operatorsFrame.add(link);
operatorsFrame.add(btnBack);
//***********************************************************
//Torna a tela principal visivel apos configurada
operatorsFrame.setVisible(true);
//***********************************************************
27
}

private static void createDirectoryFrame(String name) {


//Criacao e definicao das propriedades da tela principal
directoryFrame = new JFrame();
directoryFrame.setTitle("Acesso Diretoria");
directoryFrame.getContentPane().setBackground(Color.WHITE);
directoryFrame.setLayout(null);
directoryFrame.setSize(750, 500);
directoryFrame.setLocationRelativeTo(null);
directoryFrame.setResizable(false);
directoryFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//***********************************************************
//Definicao das variaveis e criacao dos componentes
JLabel lbWelcome = new JLabel("Bem-Vindo, Diretor " +
StringUtils.capitalize(name));
JLabel lbTitle = new JLabel("Manchete");
JLabel title = new JLabel("Vigilância apreende embalagens de agrotóxicos
no Centro de Santarém");
JLabel lbPlace = new JLabel("Local do Ocorrido");
JLabel place = new JLabel("Santarém - PA");
JLabel lbDate = new JLabel("Data da Ocorrido");
JLabel date = new JLabel("25 de Novembro de 2016");
JLabel lbOwner = new JLabel("Publicado Por");
JLabel owner = new JLabel("G1 de Santarém");
JLabel lbLink = new JLabel("Link da Noticia: ");
JLabel link = new JLabel("http://glo.bo/2guglLl");
JButton btnBack = new JButton();
//***********************************************************
//Definicao das propriedades dos componentes
lbWelcome.setBounds(10, 10, 730, 30);
lbWelcome.setFont(new Font("Century Gothic", Font.PLAIN, 30));
lbTitle.setBounds(10, 80, 730, 30);
lbTitle.setFont(new Font("Century Gothic", Font.BOLD, 25));
title.setBounds(10, 110, 730, 30);
title.setFont(new Font("Century Gothic", Font.PLAIN, 20));
lbPlace.setBounds(10, 160, 730, 30);
lbPlace.setFont(new Font("Century Gothic", Font.BOLD, 25));
place.setBounds(10, 190, 730, 30);
place.setFont(new Font("Century Gothic", Font.PLAIN, 20));
lbDate.setBounds(10, 240, 730, 30);
lbDate.setFont(new Font("Century Gothic", Font.BOLD, 25));
date.setBounds(10, 270, 730, 30);
date.setFont(new Font("Century Gothic", Font.PLAIN, 20));
lbOwner.setBounds(10, 320, 730, 30);
lbOwner.setFont(new Font("Century Gothic", Font.BOLD, 25));
owner.setBounds(10, 350, 730, 30);
owner.setFont(new Font("Century Gothic", Font.PLAIN, 20));
lbLink.setBounds(10, 400, 730, 30);
lbLink.setFont(new Font("Century Gothic", Font.BOLD, 25));
link.setBounds(10, 430, 730, 30);
link.setFont(new Font("Century Gothic", Font.PLAIN, 20));
btnBack.setBounds(640, 10, 100, 100);
btnBack.setIcon(new ImageIcon("resources/backarrow.jpg"));
btnBack.addActionListener((ActionEvent e) -> {
directoryFrame.dispose();
});
//***********************************************************
//Adicionar os componentes a tela principal
28
directoryFrame.add(lbWelcome);
directoryFrame.add(lbTitle);
directoryFrame.add(title);
directoryFrame.add(lbPlace);
directoryFrame.add(place);
directoryFrame.add(lbDate);
directoryFrame.add(date);
directoryFrame.add(lbOwner);
directoryFrame.add(owner);
directoryFrame.add(lbLink);
directoryFrame.add(link);
directoryFrame.add(btnBack);
//***********************************************************
//Torna a tela principal visivel apos configurada
directoryFrame.setVisible(true);
//***********************************************************
}

private static void createMinisterFrame(String name) {


//Criacao e definicao das propriedades da tela principal
ministerFrame = new JFrame();
ministerFrame.setTitle("BiometricPass");
ministerFrame.getContentPane().setBackground(Color.WHITE);
ministerFrame.setLayout(null);
ministerFrame.setSize(750, 500);
ministerFrame.setLocationRelativeTo(null);
ministerFrame.setResizable(false);
ministerFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//***********************************************************
//Definicao das variaveis e criacao dos componentes
JLabel lbWelcome = new JLabel("Bem-Vinda, Ministro " +
StringUtils.capitalize(name));
JLabel lbTitle = new JLabel("Manchete");
JLabel title = new JLabel("Fiscalização detecta uso irregular de
agrotóxicos em plantios de abacaxi");
JLabel lbPlace = new JLabel("Local do Ocorrido");
JLabel place = new JLabel("Paraíba - PB");
JLabel lbDate = new JLabel("Data da Ocorrido");
JLabel date = new JLabel("25 de Outubro de 2017");
JLabel lbOwner = new JLabel("Publicado Por");
JLabel owner = new JLabel("Redação do Ascom");
JLabel lbLink = new JLabel("Link da Noticia: ");
JLabel link = new JLabel("http://paraibaonline.net.br/fiscalizacao-
detecta-uso-irregular-de-agrotoxicos-em-plantios-de-abacaxi");
JButton btnBack = new JButton();
//***********************************************************
//Definicao das propriedades dos componentes
lbWelcome.setBounds(10, 10, 730, 30);
lbWelcome.setFont(new Font("Century Gothic", Font.PLAIN, 30));
lbTitle.setBounds(10, 80, 730, 30);
lbTitle.setFont(new Font("Century Gothic", Font.BOLD, 25));
title.setBounds(10, 110, 730, 30);
title.setFont(new Font("Century Gothic", Font.PLAIN, 20));
lbPlace.setBounds(10, 160, 730, 30);
lbPlace.setFont(new Font("Century Gothic", Font.BOLD, 25));
place.setBounds(10, 190, 730, 30);
place.setFont(new Font("Century Gothic", Font.PLAIN, 20));
lbDate.setBounds(10, 240, 730, 30);
lbDate.setFont(new Font("Century Gothic", Font.BOLD, 25));
29
date.setBounds(10, 270, 730, 30);
date.setFont(new Font("Century Gothic", Font.PLAIN, 20));
lbOwner.setBounds(10, 320, 730, 30);
lbOwner.setFont(new Font("Century Gothic", Font.BOLD, 25));
owner.setBounds(10, 350, 730, 30);
owner.setFont(new Font("Century Gothic", Font.PLAIN, 20));
lbLink.setBounds(10, 400, 730, 30);
lbLink.setFont(new Font("Century Gothic", Font.BOLD, 25));
link.setBounds(10, 430, 730, 30);
link.setFont(new Font("Century Gothic", Font.PLAIN, 14));
btnBack.setBounds(640, 10, 100, 100);
btnBack.setIcon(new ImageIcon("resources/backarrow.jpg"));
btnBack.addActionListener((ActionEvent e) -> {
ministerFrame.dispose();
});
//***********************************************************
//Adicionar os componentes a tela principal
ministerFrame.add(lbWelcome);
ministerFrame.add(lbTitle);
ministerFrame.add(title);
ministerFrame.add(lbPlace);
ministerFrame.add(place);
ministerFrame.add(lbDate);
ministerFrame.add(date);
ministerFrame.add(lbOwner);
ministerFrame.add(owner);
ministerFrame.add(lbLink);
ministerFrame.add(link);
ministerFrame.add(btnBack);
//***********************************************************
//Torna a tela principal visivel apos configurada
ministerFrame.setVisible(true);
//***********************************************************
}
}

30
6. BIBLIOGRAFIA

ARTERO, Almir Olivette. TÉCNICAS PARA A EXTRAÇÃO AUTOMÁTICA DE


FEIÇÕES RETAS EM IMAGENS DIGITAIS. Presidente Prudente, 1999

BRASIL, Consolidação das leis de agrotóxicos. Decreto - Lei Nº 7.802, de 11 de


julho de 1989, aprova a consolidação das leis de agrotóxicos.
<http://www.planalto.gov.br/ccivil_03/leis/L7802.htm>

GUIMARÃES, Eliseu. BIOMETRIA – RECONHECIMENTO DE ASSINATURAS,


22/09/2016. <http://www.gta.ufrj.br/grad/07_2/eliseu/Oquebiometria..html>

MINISTÉRIO DO MEIO AMBIENTE. AGROTÓXICOS, 22/09/2016.


<http://www.mma.gov.br/seguranca-quimica/agrotoxicos>

MINISTÉRIO DO MEIO AMBIENTE. ESTUDO MOSTRA QUE AGROTÓXICOS


PODEM CAUSAR DISTÚRBIOS REPRODUTIVOS, 22/09/2016.
<http://www.brasil.gov.br/saude/2014/11/estudo-mostra-que-agrotoxicos-podem-
causar-disturbios-reprodutivos>

NAÇÕES UNIDAS NO BRASIL. AGÊNCIAS DA ONU APRESENTAM PLANO PARA


REDUZIR DANOS CAUSADOS POR AGROTÓXICOS PERIGOSOS, 22/09/2016.
<https://nacoesunidas.org/agencias-da-onu-apresentam-plano-para-reduzir-danos-
causados-por-agrotoxicos-perigosos/>

VIEIRA, Danielle C., SILVA, David, B., Robert, CARVALHO, Rodrigo. BIOMETRIA –
ASSINATURA, 22/09/2016. <
http://www.gta.ufrj.br/grad/10_1/1a-versao/assinatura/historico.html >

31
7. FICHAS DE ATIVIDADES PRÁTICAS SUPERVISIONADAS

32
33
34
35

Você também pode gostar