Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
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.
5
reduzir-danos-causados-por-agrotoxicos-perigosos/>
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.
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.
-1 -1 -1
-1 8 -1
-1 -1 -1
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.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.
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.
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.
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).
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.
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.
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)
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.
20
Figura 4 – Acesso nível um
21
Figura 6 – Acesso nível três
22
Figura 8 – Sem fundo branco
E então é realizado o processo de pintar com escala cinza a imagem, como é
visto na figura 7:
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;
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"));
}
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
}
30
6. BIBLIOGRAFIA
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