Baixe o app para aproveitar ainda mais
Prévia do material em texto
São Paulo – SP 2020 UNIVERSIDADE PAULISTA – UNIP CIÊNCIA DA COMPUTAÇÃO BRENO LUCAS DESENVOLVIMENTO DE UM SISTEMA DE IDENTIFICAÇÃO E AUTENTICAÇÃO BIOMÉTRICA São Paulo – SP 2020 BRENO LUCAS – N253AF4 DESENVOLVIMENTO DE UM SISTEMA DE IDENTIFICAÇÃO E AUTENTICAÇÃO BIOMÉTRICA Trabalho semestral apresentado à Universidade Paulista como parte dos requisitos para aprovação de semestre do curso Bacharel em Ciência Da Computação. Orientador: Dr. Rafael do Espírito Santo Dedico este trabalho primeiramente a Deus por ter me concedido a dádiva da vida até os dias de hoje, aos meus pais que me incentivaram incondicionalmente, desde o início, com muito amor, compreensão e carinho. AGRADECIMENTOS Em primeiro lugar, agradeço a Deus por ter me dado forças para prosseguir nessa jornada mediante uma época extremamente adversa e por ter sido a base sólida e inabalável de todas as minhas conquistas. Aos meus pais, por sempre acreditarem em mim e não me deixarem esmorecer. Ao professor Dr. Rafael do Espírito Santo, pelo empenho e dedicação em suas aulas, me auxiliando e colaborando com o desenvolvimento dessa pesquisa acadêmica. A tarefa não é tanto ver aquilo que ninguém viu, mas pensar o que ninguém ainda pensou sobre aquilo que todo mundo vê. Arthur Schopenhauer LISTA DE ABREVIATURA E SIGLAS ATM – Automated Teller Machine C.V – Computer Vision A.I – Artificial Inteligence CCD – Change Couple Device RGB – Red, Blue e Green. TSE – Tribunal Superior Eleitoral. PARA – Programa de Análise de Resíduos de Agrotóxicos em Alimentos. ANVISA – Agência Nacional de Vigilância Sanitária. POO – Programação Orientada a Objetos. SUMARIO INTRODUÇÃO .................................................................................................. 8 OBJETIVO ...................................................................................................... 10 FUNDAMENTOS DAS PRINCIPAIS TÉCNICAS BIOMÉTRICAS .................. 11 VISÃO HUMANA .................................................................................. 11 COMPUTER VISION (VISÃO COMPUTACIONAL) .............................. 12 AQUISIÇÃO DE IMAGENS .................................................................. 12 CONCEITOS GERAIS: BIOMETRIA ............................................................... 15 USO DE AGROTÓXICOS E FERTILIZANTES DANOSOS À SAÚDE EM TERRITÓRIO NACIONAL ............................................................................... 16 RESÍDUOS DE AGROTÓXICOS EM ALIMENTOS NO BRASIL .......... 18 COMO PROCEDER? ............................................................................ 19 TECNOLOGIAS UTILIZADAS PARA IMPLEMENTAÇÃO E DESENVOLVIMENTO DO SOFTWARE .......................................................... 20 CONCEITOS BÁSICOS: PYTHON ........................................................ 20 SQLITE3 ................................................................................................ 22 SISTEMA USADO PARA A CRIAÇÃO DO PROJETO .......................... 23 PROJETO. ....................................................................................................... 24 INTERFACE LOGIN .............................................................................. 24 INTERFACE CADASTRAR ................................................................... 25 FAZENDO LOGIN NA REDE ................................................................. 26 CADASTRANDO NOVOS USUÁRIOS .................................................. 27 RELATÓRIO COM AS LINHAS DE CÓDIGO DO PROGRAMA..................... 29 REFERENCIAS ............................................................................................... 41 8 INTRODUÇÃO Em culturas mais antigas, na ancestralidade, as pessoas tinham o costume de serem gregárias, ou seja, conviver em grupos onde viam-se e reconheciam-se um no outro sem quaisquer dificuldades ou equívocos. Todavia, com a aceleração da mobilidade e com a abrupta expansão populacional, o reconhecimento para com o outro tornou-se um processo mais complexo, necessitando, assim, de um meio mais refinado para um melhor reconhecimento das possíveis identidades que nos são apresentadas. O termo “identidade” refere-se ao conjunto de dados e informações que são ligados a uma pessoa, sendo eles, por exemplo, nome, sobrenome, endereço, data de nascimento etc. Para um melhor reconhecimento e identificação de quem quer que seja, com maior assertividade, a biometria é conhecida como um dos procedimentos de reconhecimento mais pragmático e mais utilizados na atual sociedade. Ao pé da letra, biometria refere-se à pesquisa dos traços, características físicas e comportamental de cada ser humano, pois, é partir do corpo humano que essas credenciais serão confrontadas para que se possa acessar determinadas informações. Em um sistema de gerenciamento de qualquer tipo, a nível usuário, tais informações podem ser acessadas após uma breve checagem. Dada a confirmação mediante confrontamento das credenciais deste usuário em questão, pode-se atribuir (ou não) privilégios de acesso para o mesmo, dando a possibilidade de o usuário fazer alterações significativas no sistema. Faz-se também o uso da biometria a fim de que haja uma identificação de indivíduos suspeitos em locais que tenha ocorrido algum crime. Essa metodologia, utilizada pelos órgãos públicos, tem início com a polícia cientifica, que coleta os dados do suspeito em questão para posteriormente confrontar e examinar os dados coletados. Métodos manuais para identificação por biometria em casos criminais já existem e se mostraram altamente produtivos, entretanto, a tecnologia torna- se uma aliada para minimizar, ou, anular problemas e intercorrências que são oriundos dos sistemas manuais. 9 Os sistemas que não são tecnológicos, ou seja, os que são operados de maneira manual possibilitam a procura de indivíduos em uma grande base de dados de formulários biométricos, no entanto, o tempo de processamento dessa base de dados é demasiadamente demorado, carecem de padrões e formas eficazes de relacionamento de informações entre distintos sistemas. Tratando-se de uma assinatura biométrica digital, a vantagem primária que esse cenário nos apresenta inicialmente é, sem dúvidas, a integridade e a segurança da informação. Todavia, existe também diversas outras vantagens a qual a biometria digital pode oferecer. Atualmente, o Brasil mostrou-se não ter dificuldade para implantar esse tipo de tecnologia, pois um dos órgãos que mais utilizam esse método são os Bancos, onde adotaram o uso da biometria nos ATM’s (Automated Teller Machine) comumente mais conhecido como Caixa Eletrônico, para algumas operações. Tendo como base o tempo de estudo e absorção dos conteúdos transmitidos em aulas, acreditamos que uma aplicação construída na linguagem de programação Java, pode, de maneira satisfatória, ajudar na elaboração de um Sistema de Identificação e Autenticação Biométrica. Através de pesquisas e análises, o vigente trabalho ambiciona descrever a metodologia de desenvolvimento de um Sistema de Identificação e Autenticação Biométrica, desde sua idealização até seu processo de finalização. Por fim, torna-se também um objetivo, mesmo que seja secundário, mas não menos importante, juntamente com a elaboração desse sistema de identificação e autenticação, restringir o acesso a uma rede com Banco de Dados do Ministério do Meio Ambiente, onde as informações contidas nesse Banco são estratégicas sobre as propriedadesrurais que utilizam agrotóxicos proibidos, causando grandes impactos nos lençóis freáticos, rios e mares. Dividas em três níveis de acesso, cada usuário, respeitando sua respectiva hierarquia deverá proceder da seguinte maneira de acordo com seu nível: o nível 1, todos podem ter acesso; já o nível 2, é restrito o acesso, liberado somente aos diretores de divisões; no nível 3, somente quem pode ter acesso são Ministros do Meio Ambiente. 10 OBJETIVO As Atividades Práticas Supervisionadas do 6º Semestre de 2020 do Curso de Ciência da Computação, tem por seu objetivo a pesquisa bibliográfica e o desenvolvimento de um sistema de identificação e autenticação biométrica. Para tal, a apresentação do desenvolvimento de uma aplicação desse nível contempla o uso da seguinte linguagem de programação Python juntamente com o auxílio do SQLite3, em linguagem SQL, para que possa ser desenvolvido um local de armazenamento de informações estratégicas. No intuito de satisfazer e cumprir o que foi proposto para o trabalho acadêmico semestral vigente, desenvolver um Banco de Dados para armazenar informações estratégicas sobre as propriedades rurais que utilizam agrotóxicos proibidos por causarem grandes impactos nos lenções freáticos, rios e mares, tornou-se nossa base para atingir o objetivo principal, que visa a criação do desenvolvimento de um sistema de identificação e autenticação biométrica. Não menos importante, é, compreender os conceitos, a utilização e aplicação das técnicas selecionadas, buscando os benefícios que o estudo sobre elas proporcionou durante o desenvolvimento da atual pesquisa acadêmica. Visa-se, também, entender como o processo da utilização de agrotóxicos e fertilizantes proibidos, danosos à saúde, em território nacional, ocorre, fazendo uma breve abordagem sobre o assunto, tentando encontrar uma solução para um equilíbrio ambiental resultando na boa qualidade do meio ambiente, no bom funcionamento da vida social campestre e que maneiras melhores e sustentáveis fortaleçam o bom desenvolvimento das comunidades camponesas. 11 FUNDAMENTOS DAS PRINCIPAIS TÉCNICAS BIOMÉTRICAS As áreas que se relacionam aos sistemas de imagens digitais, como, por exemplo, processamento de imagens, síntese de imagens, CV (Computer Vision) e reconhecimento de padrões, possuem, atualmente, uma área de atuação bem definida, relacionando dados e imagens. O que difere cada uma delas, concentra-se na relação entre a utilização de técnicas de A.I (Artificial Intelligence), imagens e dados. Se os dados são utilizados para gerar imagens, a área que será empregada para tal, será a síntese de imagens. Se caso os dados forem resultantes das informações adquiridas por meio de imagem, a área que compete à essa técnica seria a área de análise de imagens. A técnica de processamento de imagens é uma vertente da computação gráfica que modifica as imagens, bem como a área de processamento de dados, que, por sua vez, faz a transformação dos dados. Visão Humana Por se tratar de um órgão sensorial extremamente complexo que realiza a captura de relações espaciais e temporais dos objetos que se apresentam no ângulo de visão, o olho torna-se um dos sensores essenciais para o entendimento e compreensão do ser humano sobre o que ocorre ao seu redor, onde, impulsos luminosos que são capturados pelo olho são transformados em impulsos elétricos, que são transmitidos e processados pelo cérebro. Nesse caminho, a fase inicial que seria a energia luminosa capturada pelo olho, trabalha em conjunto com a retina, enviando os impulsos capturados através do nervo óptico para que a imagem possa ser formada no cérebro. Esse processo da visão dá-se início pela córnea. A córnea é a parte anterior translucida do olho, e nela, acontece a entrada do estímulo luminoso no sistema visual humano. Para auxiliar a córnea, a retina converte esses estímulos luminosos em impulsos elétricos que são enviados ao cérebro através do nervo óptico, que contém aproximadamente 1,000,000 de fibras nervosas. O “modo de ignição”, ou seja, o start para a percepção do sistema visual encontra-se na retina, que, por sua vez, ocupa um espaço de aproximadamente 1.000mm² e é constituída por mais ou menos 100 milhões de sensores. 12 Cada um desses sensores converte apenas uma parte do estímulo luminoso da imagem para impulso elétrico, que será processado pelo cérebro. Como resposta ao estímulo luminoso que percorre as camadas translucidas da retina e, juntamente, com cones e bastonetes, geram reações fotoquímicas que são transformadas em sinais nervosos, enviados pelas fibras ópticas aos centros cerebrais superiores, ocasionando, assim, o efeito que conhecemos como visão. Computer Vision A visão computacional relaciona-se à análise de imagens, e vem sendo muito desenvolvida ao passar dos últimos anos. Este ramo da computação, em específico, trata da retirada de informação das imagens e da classificação e identificação de objetos que nelas se fazem presentes. Os sistemas de Computer Vision vêm sendo utilizados em reconhecimentos de pessoas, de assinaturas e de objetos; inspecionamento de peças em linhas de fabricação; supervisão de movimentos de robôs em indústrias automatizadas etc. Sistemas de Computer Vision (ou Visão Computacional) envolvem a análise de imagem e técnicas de Artificial Intelligence (ou Inteligência Artificial) ou tomada de decisão, permitindo a identificação e proporcionando a classificação de imagens e/ou objetos. Aquisição De Imagens A etapa inicial de um sistema de Computer Vision tem como base a aquisição de imagens. A conversão de um cenário real tridimensional para uma imagem eletrônica é a redução de sua dimensionalidade, esse é o primeiro passo. Câmeras fotográficas ou câmeras de vídeo converte cenas 3D em representações 2D da imagem. Pode-se considerar uma imagem como uma distribuição de energia luminosa em um posicionamento espacial. A iluminação distribui energia sobre indeterminado objeto. Parte dessa energia luminosa é absorvida por tal objeto, outra parte é enviada e uma outra parte é refletida, onde será capturada por uma câmera ou por qualquer outro sensor semelhante. 13 Em caso de ser uma câmera, mais especificamente uma câmera CCD (Charge Couple Device) monocromática simples que contém um jogo de lentes que focaliza a imagem sobre a área fotossensível do CCD, um sensor CCD e seus circuitos complementares. Para que haja a possibilidade da aquisição de imagens coloridas fazendo a utilização do CCD, necessita-se de um conjunto de primas e filtros de cor que são encarregados para realizar a decomposição da imagem colorida em suas componentes R, G e B (red, green e blue), onde cada um desses componentes será capturado por um CCD de maneira independente. Com essas tecnologias computacionais em estágio mais avançado foi possível desenvolver novos métodos de segurança para se ter acesso a dados pessoais e para possíveis transações, esse método começou a ser conhecido como biometria. A biometria pode ser usada com reconhecimento facial, de voz, de íris e impressão digital o que automaticamente pode se traduzir em uma autenticação muito mais confiável e segura já que possibilidade de erro é bem menor, entretanto, isso não faz da biometria a prova de falhas. Essa tecnologia começou a ser realmente importante a partir da década de 80 onde o FBI realizou a digitalização das digitais de seus bancos de dados para maior facilidade na identificação do seu próprio pessoal e de pessoas com passagem em delegacias, presídios entre outras ocasiões de interesse do governo federal. Acabou se tornando mais popular 10 anos depois, quando empresas corporativas despertaram interesse na tecnologia e hoje vemos o resultado de tal confiança nela já que no momento atual Celulares, Caixa Eletrônicos, Fechaduras entre outrasdezenas de dispositivos funcionam a partir da sua digital para autenticar a segurança. E como funciona a autenticação utilizando o método impressão digital? • A primeira etapa do processo consiste em capturar a imagem digitalizada da impressão digital por meio de um sensor. 14 • A segunda etapa é chamada de extração, que é a etapa onde a imagem é tratada e é retirada características únicas conhecida como templates que vão ser usadas na próxima etapa. • E por fim a terceira e última camada, que irá comparar a imagem capturada pelo sensor com as imagens já armazenadas em seu banco de dados, e assim, caso eles sejam iguais, é feita a autenticação. Atualmente, empresas utilizam as digitais para grande parte de seus processos, como por exemplo: para que os funcionários no momento de entrada e saída do seu expediente possam bater o ponto, marcando suas horas trabalhadas sem a necessidade de passar cartões ou assinar, o que agiliza esse processo e aumenta a segurança do local. Outro exemplo, demasiadamente visto no cenário corporativo, é a autenticação para acessar o sistema da empresa via de impressão digital onde cada funcionário terá acesso sem a necessidade de digitar logins e senhas. No Brasil, a biometria também é utilizada para auxiliar nas eleições. O TSE (Tribunal Superior Eleitoral) decretou a obrigatoriedade do cadastramento das digitais para que o eleitor possa participar das eleições, logo, sua confirmação de presença na votação seria mais segura, o que poderia minimizar ou extinguir alguns erros ou fraudes. Alguns municípios haviam informado que as eleições de 2020 utilizariam autenticação via biometria para confirmar a presença do eleitor, todavia, com a chegada da pandemia isso acaba se tornando incerto. 15 CONCEITOS GERAIS: BIOMETRIA A biometria vem sendo apontada como uma rentável e promissora solução para sanar os problemas de autenticação. Esse tipo de tecnologia, a tecnologia biométrica, consiste em identificar com segurança qualquer indivíduo através de sua impressão digital, íris, palma da mão, entre outras características corporais. Com ênfase voltada ao combate de fraudes, proporcionar ao cidadão o exercício de sua cidadania, promover o conforto e facilitar o acesso em certos locais são algumas das benfeitorias que a tecnologia biométrica pode proporcionar a sociedade. Biometria, (do grego bios: vida; metron: medida), é a utilização de características biológicas em sistemas de identificação. Designa-se uma maneira automática de verificação ou reconhecimento através de medidas anatômicas, fisiológicas e características comportamentais de cada indivíduo em sua particularidade. No Brasil, a utilização desse tipo de tecnologia faz-se presente em diversos lugares, por exemplo, como espaços de ginásticas, controle de acessos em universidades, ensino fundamental e médio privado, residências e em empresas, para realizar consultas e exames médios em sistemas privatizados de saúde. Francis Galton, um cientista britânico, é considerado um dos fundadores do que é chamado hoje de Biometria. Em meados do ano de 1892, Galton desenvolveu o primeiro sistema moderno de impressão digital. Posteriormente, esse sistema foi severamente incorporado e utilizado nos departamentos de polícia ao redor do mundo, pois, até então, a impressão digital era o meio de identificação que mais poderia se confiar, até o surgimento da tecnologia do DNA, no século XX. As impressões digitais, quando utilizadas a fim de identificar alguém, dá-se por meio de uma forma computadorizada, que é baseada no processo de análise das minúcias ou pontos singulares, característico de cada indivíduo, a saber: linhas da digital, bifurcações e as extremidades, que passam por uma transformação algorítmica matemática para posteriormente serem guardadas em um banco de dados. 16 USO DE AGROTÓXICOS E FERTILIZANTES DANOSOS À SAÚDE EM TERRITÓRIO NACIONAL No Brasil, o estilo de produção agropecuário utilizado baseia-se na “revolução-verde”, onde o aumento da produtividade é obtido por meio do melhoramento de plantas através de processo genético e pela utilização de insumos, como os fertilizantes e agrotóxicos. Todavia, esse processo necessita de uma estruturação da sociedade para que seja possível avaliá-la e gerenciar os possíveis riscos que surgirão com o uso desses produtos. Mesmo havendo um grande número de dados com propriedades físico-químicas, ambientais e toxicológicos que são exigidos por órgãos que regulam esse processo de registros dos agrotóxicos, restam incertezas inúmeras ao que diz respeito sobre os impactos causados ao meio ambiente com a utilização dessas substâncias e, por consequência, o detrimento da saúde humana. A supervisão e a avaliação dos danos advindos através da utilização destas substâncias tornam-se essenciais para assegurar a sustentabilidade dos sistemas de produção agropecuários que usam tais insumos (OLIVEIRA, 2005). Somente através da realização de avaliações contínuas e periódicas, torna-se possível estabelecer um nível considerável de segurança para a utilização de substâncias com toxicidade reconhecida para organismos biológicos, como são os agrotóxicos. Ao passo que ciência foi avançando, observou-se que, atualmente, é imprescindível a geração de dados às novas tecnologias, para que sejam verificados os níveis ideais de segurança que foram estabelecidos na época da concessão do registro do ingrediente ativo, se são validos (ou não) para as condições atuais. Sendo assim, o objetivo deste trabalho, especificamente nesta etapa, destina-se a identificar a utilização de agrotóxicos e fertilizantes danosos à saúde baseando-se em referências que foram geradas e disponibilizadas pela comunidade científica nas últimas duas décadas. Na figura abaixo, observa-se que consumo médio de agrotóxicos vem crescendo comparando-se à a área plantada, ou seja, de 10,5 litros/hectare em 2002, passou para 12,01 litros/hectare em 2011. Este aumento deve-se a diversos fatores contribuintes, como o crescimento do plantio da soja transgênica 17 que aumenta o consumo de glifosato, a crescente resistência das ervas “daninhas”, dos fungos e dos insetos, onde a demanda de agrotóxico torna-se maior, aumentando consideravelmente possíveis doenças nas lavouras, como ferrugem asiática, na soja, que propicia o aumento do consumo de fungicidas. Os agricultores sentem-se estimulado ao uso dos agrotóxicos devido a diminuição dos preços e da abrupta isenção de taxas de impostos dos agrotóxicos, propiciando aos agricultores uma utilização maior dessas substâncias por hectare (PIGNATI, 2012). A utilização dos fertilizantes químicos, sua média de consumo por hectare, não sofreu alteração em seu nível no período. Figura 1 - Produção agrícola e consumo de agrotóxicos e fertilizantes químicos nas lavouras do Brasil, de 2002 a 2011. Fonte: Dossiê Abrasco. Um alerta sobre os impactos dos Agrotóxicos na Saúde, 2012. Dado o volume de agrotóxicos que fora consumido por inúmeros tipos de culturas sendo que a soja, a que mais utilizou, fez uso de 40% do volume total entre herbicidas, inseticidas, fungicidas, acaricidas e outros. Logo após está o milho, que utilizou 15%, a cana e o algodão com 10%, posteriormente os críticos com 7%, o café (3%), o trigo (%3), o feijão, a pastagem (1%), a batata (1%), o tomate (1%), a maçã (0,5%), a banana (0,2%) e as outras culturas consumiram 18 3,3% do total de 852,8 milhões de litros de agrotóxicos pulverizados nessas lavouras em 2011, segundo o dossiê Abrasco e a figura exibida acima. RESÍDUOS DE AGROTÓXICOS EM ALIMENTOS NO BRASIL No território nacional brasileiro, um terço dos alimentos que são consumidos diariamente encontra-se contaminado pelos agrotóxicos, segundo análise de amostras que foram coletadas em 26 Universidades Federadas do Brasil,que foi realizada través do Programa de Análise de Resíduos de Agrotóxicos em Alimentos (PARA) da ANVISA, em 2010. Abaixo, a figura evidencia que um total de 63% das amostras que foram submetidas a análise, apresentam contaminação oriundo da utilização de agrotóxicos, sendo que uma fatia de 28% exibe ingredientes ativos não autorizados, ou seja, de uso proibido ou que excedeu o limite máximo de resíduos que são considerados aceitáveis. Na fatia de 35%, exibe-se a porcentagem de contaminação por agrotóxicos dentro dos limites estipulados. Embora os números exibidos margeiam um cenário demasiado preocupante relacionado à saúde da população, estes mesmos números podem não refletir de maneira fidedigna a real dimensão e situação do problema, pois, há diversas ignorâncias e incertezas científicas enraizadas na definição destes limites, a saber: 37% das amostras sem resíduos referem-se aos ingredientes ativos que foram pesquisados, 235 em 2010 – o que ainda não permite afirmar com extrema acurácia a ausência dos demais (por volta de 400), inclusive o glifosato, amplamente utilizado e não submetido a pesquisa no PARA. Figura 2 - Distribuição das amostras segundo a presença ou a ausência de resíduos de agrotóxicos. PARA, 2010 Fonte - Embrapa Meio Ambiente. Impactos dos agrotóxicos na saúde humana, 2013 19 COMO PROCEDER? Torna-se fundamental que a academia se junte na construção coletiva de maneiras solidárias e sustentáveis de organização da vida social, que fortaleçam a realização da reforma agrária, que intensifiquem as experiencias que foram construídas pelas comunidades camponesas de alternativas ao desenvolvimento, por exemplo, o sistema agroecológico, e que promovam a inserção e a participação ativa dos que atuam no campo, para a definição de políticas com práticas produtivas que respeitem a vida e o meio ambiente. 20 TECNOLOGIAS UTILIZADAS PARA IMPLEMENTAÇÃO E DESENVOLVIMENTO DO SOFTWARE CONCEITOS BÁSICOS: PYTHON A linguagem de programação Python foi desenvolvida no final da década de 80 por Guido Van Rossum quando ainda era funcionário do Centro de Matemática e Ciência da Computação em Amsterdam, O Python recebeu esse nome em homenagem ao comediante Monty Python e hoje é dirigida pela Python Software Foundation. Atualmente o Python é uma ferramenta gratuita oque ocasionalmente atrai mais pessoas e faz com que ele se popularize bastante, outro fator que pode ser algo determinante é facilidade em que as coisas podem ser programadas nesta linguagem e que acaba sendo porta de entrada para pessoas que queira começar a programar. Como qualquer outra linguagem do mercado o Python conta com uma quantidade extensa de documentação gratuita na internet, como por exemplo bibliotecas bem populares como Numpy entre outra que de certo modo agiliza o aprendizado para possíveis projetos como proposto por essa APS. O Python é multiplataforma, tem capacidade operar em diversas plataformas como: Windows, Linux e Mac, assim como dezenas de outras plataformas, desde supercomputadores até telefones celulares como Android e outros sistemas. O python tem como possibilidade ser usado no desenvolvimento de pequenas aplicações, mas também permiti o desenvolver programas complexos. Possui um grupo de ferramentas para Interface Gráfica do Usuário (GUI) poderoso e simples de ser usado, bibliotecas para programação web, e muito mais, as mais populares são: Pillow - essa biblioteca pode ser usada para manipular imagem como abrir, salvar, também consegue manipular outros tipos de arquivos como PDF, GIF e etc, além de conseguir facilmente mostrar miniaturas de imagens. Numpy - O Numpy é uma biblioteca muito conhecida de processamento de array no Python. Ela oferece um bom suporte para diferentes objetos de matriz 21 multidimensional. O Numpy também oferece uma variedade de ferramentas para gerir matrizes. É eficiente e muito bom para gerenciar arrays e matrizes. OpenCV – Igualmente conhecido como Open Source Computer Vision, é uma biblioteca destinada para processamento de imagens. Ela supervisiona funções gerais ligadas na visão instantânea do computador. Apesar de o OpenCV não tenha documentação apropriada, com muitos desenvolvedores pontuam, é uma das bibliotecas mais complexas para o aprendizado. No entanto, ele oferece muitas funções embutidas através das quais você aprende a visão computacional facilmente. PySimpleGUI – Biblioteca usada para criação de janelas bem simples, tendo como possibilidades a criação de botões, campos de texto, caixas de checagem e paneis que podem imprimir os logs. Essa biblioteca funciona de maneira diferente de outras, quando é apertado um botão gera um evento que só vai funcionar se você já tiver pré-determinado o que ele vai fazer, como no emexemplo abaixo. If evento == ‘Fechar’’: Fecharjanela() PyQT5 – Biblioteca usada para criação de janelas como PysimpleGUI, é também uma ferramenta muito poderosa para esse desfecho trazendo diversas possibilidades para o programador como por exemplo o software QtDesign que ajuda muito para quem é iniciante, umas das funções utilizada nesse trabalho foi o QFileDialog que é usado para escolher foto de um diretório do sue computador. 22 SQLITE3 Um banco de dados leve e prático, uma biblioteca feita na linguagem C e que implementa o banco de dados SQL embutido. O código para o SQLite é de domínio público e gratuito para qualquer finalidade, seja comercial ou privada. Diferente da maioria dos outros bancos de dados SQL, o SQLite faz a leitura e grava diretamente em arquivos de discos simples. Um banco de dados SQL complementa várias tabelas, índices e views que está em um único arquivo de disco. Os arquivos de banco de dados são um formato de armazenamento recomendado pela Us Library of Congress. O SQLite não é uma biblioteca usada para conectar com um grande servidor de banco de dados, mas sim com o próprio servidor e os programas que usam o SQLite podem ser acesso ao banco de dados sem ter que executar um processo de SGBD de forma separada. Sendo uma biblioteca compacta, o SQLlite com todos os recursos habilitados, dependendo da plataforma do destino e das configurações de otimização do compilador, o tamanho da biblioteca pode ser inferior a 600kb. O código de 64 bits é maior e algumas otimizações do compilador como inlining de função agressiva e loop unrolling podem fazer com que o código do objeto seja muito maior. O SQLite geralmente funciona mais rápido do que a memória que será fornecida a ele. No entanto, o desempenho na maioria das vezes é muito bom, mesmo em ambientes com pouca memória. Dependendo de como é usado, o SQLite pode ser até mais rápido do que a E/S do sistema de arquivos. Antes de cada lançamento, o SQLite é testado de forma cuidadosa e tem a reputação de ser bem confiável. A maior parte do código-fonte SQLite é dedicado exclusivamente a testes e verificação. O SQLite responde normalmente as falhas de alocação de memória e erros de E/S de disco. Transações são ACID mesmo se interrompido por falhas do sistema ou falhas de energia. Tudo é verificado por testes automatizados usando equipamentos de testes especiais que simulam as falhas do sistema, mesmo assim ainda podem existir bugs e ao contrário de projetos parecidos, o SQLlite é aberto e honesto sobre todos os bugs e o mesmo fornece uma lista de bugs e cronologias de minuto a minuto sobre alterações de código. 23 A base do código SQLite é suportada por uma equipe internacional de desenvolvedores que trabalham em SQLite em tempo integral. Os mesmos continuam a expandir os recursos e aprimoram sua confiabilidade e desempenho, ao mesmo tempo que mantem sua compatibilidade com versões anteriores das interfaces publicadas. O projeto SQLite foi iniciado em 09/05/2000, a intenção dos desenvolvedores é de oferecer suporte aoSQLite até o ano de 2050, mas o futuro é sempre difícil de prever. SISTEMA USADO PARA A CRIAÇÃO DO PROJETO Para o desenvolvimento da aplicação de um sistema de identificação e autenticação biométrica, constituído em linguagem Java, foi utilizado um monitor Samsung (21,5 Full HD), com processador Ryzen 7 2700, memória RAM de 8GB DDR4, placa de vídeo GTX 1050 e armazenamento de 1,5 TB. Para auxiliar no desenvolvimento da aplicação, também foram usados os softwares Apache NetBeans IDE e, para a construção do banco de dados, o MySQL. 24 PROJETO INTERFACE LOGIN 25 INTERFACE DE CADASTRAR 26 FAZENDO LOGIN NA REDE Passo 1: Passo 2: 27 Passo: 3 CADASTRANDO NOVOS USUÁRIOS Passo 1: 28 Passo 2: 29 RELATÓRIO COM AS LINHAS DE CÓDIGO DO PROGRAMA Na Classe Teste2 foi onde importamos todas as outras classes e funções das classes para fazer nosso projeto funcionar. As linhas abaixos mostram as bibliotecas e classes que usamos. import cursor as cursor import cv as cv import skimage.morphology import cv2 import numpy as np import sqlite3 import skimage import skimage.morphology import cv2 as cv import mysql.connector from getTerminationBifurcation import getTerminationBifurcation; from removeSpuriousMinutiae import removeSpuriousMinutiae from CommonFunctions import ShowResults from extractMinutiaeFeatures import extractMinutiaeFeatures from PyQt5 import uic, QtWidgets from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QFileDialog, QLabel, QVBoxLayout from PySimpleGUI import PySimpleGUI as sg Nessa linha foram criadas variáveis locais para que seus valores possam ser usados nas funções que foram criadas. global autenticador global nivel global result global codigo global result1 30 global result_final global nivelc Foi criada a função login, login2 e login 3 para enviar os dados da digital que foi cadastrada no banco de dados e a mesma retornar todos os dados que aquele usuário tem acesso no nivel em que ele foi cadastrado. Caso ele tente entrar em outro nivel, aparecerá uma mensagem informando que ele não possui acesso. def login(): nivelc = 'nivel1' banco = sqlite3.connect('ministerio') cursor = banco.cursor() find_user = ("SELECT * FROM pessoas WHERE id = ? AND nda = ?") cursor.execute(find_user,[(id),(nivelc)]) results = cursor.fetchall() if results: for i in results: print("Welcome " + i [0]) cursor.execute("SELECT nome_propriedade,endereço FROM dados") print(cursor.fetchall()) break else: print("Não encontrado ou não possui acesso") def login2(): nivelc = 'nivel2' banco = sqlite3.connect('ministerio') cursor = banco.cursor() find_user = ("SELECT * FROM pessoas WHERE id = ? AND nda = ?") cursor.execute(find_user,[(id),(nivelc)]) results = cursor.fetchall() if results: for i in results: print("Welcome" + i [0]) 31 cursor.execute("SELECT nome_propriedade,endereço,agrtox_usado FROM dados") print(cursor.fetchall()) break else: print("Não encontrado ou Não possui acesso") def login3(): nivelc = 'nivel3' banco = sqlite3.connect('ministerio') cursor = banco.cursor() find_user = ("SELECT * FROM pessoas WHERE id = ? AND nda = ?") cursor.execute(find_user,[(id),(nivelc)]) results = cursor.fetchall() if results: for i in results: print("Welcome " + i [0]) cursor.execute("SELECT nome_propriedade,endereço,agrtox_usado,dono_p,telefone FROM dados") print(cursor.fetchall()) else: print("Não encontrado ou Não possui acesso") Função cadastro foi criada para cadastrar o usuário no banco de dados, ela reuni todas as informações preenchidas, desde o cadastro da digital até as informações pessoais como nome, cargo e seu nível de acesso. Foi usada a biblioteca PYSimpleGui para criar a interface gráfica da tela cadastrar, inserimos as caixa de texto para o usuário inserir os seus dados e criamos botões do nivel1, nivel2 e nivel3 para ele escolher em qual nível vai ter acesso. def cadastro(): sg.theme("DarkGreen") layout = [ [sg.Text('Nome'), sg.Input(key='nome', size=(20, 1))], [sg.Text('Cargo'), sg.Input(key='cargo', size=(20, 1))], [sg.Button('Carregar Digital'), sg.Button('Confirmar')], 32 [sg.Button('Nivel 1'), sg.Button('Nivel 2'),sg.Button('Nivel 3')], [sg.Button('Cadastrar'), sg.Button('Fechar')] ] janela = sg.Window("Cadastro", layout) while True: eventos, valores = janela.read() if eventos == 'Nivel 1': nivelc = 'nivel1' if eventos == 'Nivel 2': nivelc = 'nivel2' if eventos == 'Nivel 3': nivelc = 'nivel3' if eventos == 'Carregar Digital': fname = QFileDialog.getOpenFileName() global mostra mostra = fname global url url = convertTuple(fname) url = (url[:-13]) if eventos == 'Confirmar': iniciaprogr() if eventos == 'Cadastrar': nome = (valores['nome']) cargo = (valores['cargo']) id = codigo banco = sqlite3.connect('ministerio') cursor = banco.cursor() cursor.execute("INSERT INTO pessoas VALUES ('" + nome + "'," + str(id) + ",'" + cargo + "','" + nivelc + "')") banco.commit() 33 if eventos == sg.WIN_CLOSED or eventos == 'Fechar': break def convertTuple(tup): str = ''.join(tup) return str Classe iniciaprogr está sendo usada para anexar a imagem da digital que está no diretório do computador e assim ela é tratada removendo todos pixels brancos ao redor da digital e assim ele inverte as cores para que a função de minúcias consiga visualizar apenas as minúcias e bifurcações. def iniciaprogr(): imginput = cv2.imread(url,0) img = cv.bitwise_not(imginput) Essa linha transforma a imagem em linear e retorna ele em 8 bit limiar, img = cv2.threshold(img, 128, 255, cv2.THRESH_TOZERO) img = np.uint8(img > 128); skel = skimage.morphology.skeletonize(img) skel = np.uint8(skel) * 255; mask = img * 255; (minutiaeTerm, minutiaeBif) = getTerminationBifurcation(skel, mask); minutiaeTerm = skimage.measure.label(minutiaeTerm, connectivity=2); RP = skimage.measure.regionprops(minutiaeTerm) minutiaeTerm = removeSpuriousMinutiae(RP, np.uint8(img), 10); BifLabel = skimage.measure.label(minutiaeBif, connectivity=2); TermLabel = skimage.measure.label(minutiaeTerm, connectivity=2); 34 Essa linha está usando funções criadas em outras classes que foram importadas nessa classe para que elas possam extrair as minúcias e bifurcação e assim ela faz a soma delas que retorna um valor e usamos ele como o ID de cada usuário. FeaturesTerm, FeaturesBif = extractMinutiaeFeatures(skel, minutiaeTerm, minutiaeBif) chave = len(FeaturesTerm + FeaturesBif); global codigo codigo = (chave+1000) global id id = codigo ShowResults(skel, TermLabel, BifLabel) return codigo Nessa linha foi criada os botões de puxar a função iniciaprogr para poder carregar a imagem e o botão confirmar é quem vai fazer a função funcionar para que a imagem seja tratada e retorne o ID que será necessario para a realização do cadastro no banco de dados. sg.theme("DarkGreen") layout = [ [sg.Button('Carregar Digital'), sg.Button('Confirmar')], [sg.Button('Nivel 1'), sg.Button('Nivel 2'),sg.Button('Nivel 3')], [sg.Button('Cadastrar'),], [sg.Text('MINISTÉRIO DO MEIO AMBIENTE')], [sg.Output(size=(60,30))] ] janela = sg.Window('LOGIN').layout(layout) app = QtWidgets.QApplication([]) while True: eventos, valores = janela.read() if eventos == 'Carregar Digital': fname = QFileDialog.getOpenFileName() global mostra 35 mostra = fname global url url = convertTuple(fname) url = (url[:-13]) if eventos == 'Confirmar': iniciaprogr() Essas linhas são as condições que foram criadas para cada botão, se o usuario por exemplo ao colocar seus dados e clicar no botão nivel 1, a função login vai registrar no banco de dados que aquele usuariovai pertencer ao nivel 1. if eventos == 'Nivel 1': login() if eventos == 'Nivel 2': login2() if eventos == 'Nivel 3': login3() if eventos == 'Cadastrar': cadastro() if eventos == sg.WIN_CLOSED or eventos == 'Fechar': break COMMONFUNCTIONS Essa classe é onde tem as funções que irão tratar as imagens, colocando as minuncias e bifurcações na imagem após ser tradada. import numpy as np import skimage import cv2 36 def ShowResults(skel, TermLabel, BifLabel): minutiaeBif = TermLabel * 0; minutiaeTerm = BifLabel * 0; (rows, cols) = skel.shape DispImg = np.zeros((rows, cols, 3), np.uint8) DispImg[:, :, 0] = skel; DispImg[:, :, 1] = skel; DispImg[:, :, 2] = skel; RP = skimage.measure.regionprops(BifLabel) for idx, i in enumerate(RP): (row, col) = np.int16(np.round(i['Centroid'])) minutiaeBif[row, col] = 1; (rr, cc) = skimage.draw.circle_perimeter(row, col, 3); skimage.draw.set_color(DispImg, (rr, cc), (255, 0, 0)); RP = skimage.measure.regionprops(TermLabel) for idx, i in enumerate(RP): (row, col) = np.int16(np.round(i['Centroid'])) minutiaeTerm[row, col] = 1; (rr, cc) = skimage.draw.circle_perimeter(row, col, 3); skimage.draw.set_color(DispImg, (rr, cc), (0, 0, 255)); cv2.imshow('a', DispImg); cv2.waitKey(0) extractminutiaefeatures Essa Classe é onde as extrações das minúcias que logo são chamadas no main (classe Teste2). Foi utilizada as bibliotecas numpy para que pudesse fazer essa extração nas imagens e retornar um valor ou mostrar em uma nova tela as bifurcações e minúcias encontradas na imagem. 37 import numpy as np import cv2 import skimage import math class MinutiaeFeature(object): def init (self, locX, locY, Orientation, Type): self.locX = locX; self.locY = locY; self.Orientation = Orientation; self.Type = Type; def computeAngle(block, minutiaeType): (blkRows, blkCols) = np.shape(block); CenterX, CenterY = (blkRows-1)/2, (blkCols-1)/2 if(minutiaeType.lower() == 'termination'): sumVal = 0; for i in range(blkRows): for j in range(blkCols): if((i == 0 or i == blkRows-1 or j == 0 or j == blkCols-1) and block[i][j] != 0): angle = -math.degrees(math.atan2(i-CenterY, j-CenterX)) sumVal += 1 if(sumVal > 1): angle = float('nan'); return(angle) elif(minutiaeType.lower() == 'bifurcation'): (blkRows, blkCols) = np.shape(block); CenterX, CenterY = (blkRows - 1) / 2, (blkCols - 1) / 2 angle = [] sumVal = 0; for i in range(blkRows): 38 for j in range(blkCols): if ((i == 0 or i == blkRows - 1 or j == 0 or j == blkCols - 1) and block[i][j] != 0): angle.append(-math.degrees(math.atan2(i - CenterY, j - CenterX))) sumVal += 1 if(sumVal != 3): angle = float('nan') return(angle) Essa função é onde recebe os dados já lidos e assim identifica quantas bifurcações e minúcias foram extraídas e retorna o valor da FeaturesTerm e FeaturesBif. def extractMinutiaeFeatures(skel, minutiaeTerm, minutiaeBif): FeaturesTerm = [] minutiaeTerm = skimage.measure.label(minutiaeTerm, connectivity=2); RP = skimage.measure.regionprops(minutiaeTerm) WindowSize = 2 # --> For Termination, the block size must can be 3x3, or 5x5. Hence the window selected is 1 or 2 FeaturesTerm = [] for i in RP: (row, col) = np.int16(np.round(i['Centroid'])) block = skel[row-WindowSize:row+WindowSize+1, col-WindowSize:col+WindowSize+1] angle = computeAngle(block, 'Termination') FeaturesTerm.append(MinutiaeFeature(row, col, angle, 'Termination')) FeaturesBif = [] minutiaeBif = skimage.measure.label(minutiaeBif, connectivity=2); RP = skimage.measure.regionprops(minutiaeBif) WindowSize = 1 # --> For Bifurcation, the block size must be 3x3. Hence the window selected is 1 for i in RP: 39 (row, col) = np.int16(np.round(i['Centroid'])) block = skel[row-WindowSize:row+WindowSize+1, col-WindowSize:col+WindowSize+1] angle = computeAngle(block, 'Bifurcation') FeaturesBif.append(MinutiaeFeature(row, col, angle, 'Bifurcation')) return(FeaturesTerm, FeaturesBif) getTerminationBifurcation def getTerminationBifurcation(img, mask): img = img == 255; (rows, cols) = img.shape; minutiaeTerm = np.zeros(img.shape); minutiaeBif = np.zeros(img.shape); for i in range(1,rows-1): for j in range(1,cols-1): if(img[i][j] == 1): block = img[i-1:i+2,j-1:j+2]; block_val = np.sum(block); if(block_val == 2): minutiaeTerm[i,j] = 1; elif(block_val == 4): minutiaeBif[i,j] = 1; mask = convex_hull_image(mask>0) mask = erosion(mask, square(5)) # Structuing element for mask erosion = square(5) minutiaeTerm = np.uint8(mask)*minutiaeTerm return(minutiaeTerm, minutiaeBif) 40 removeSpuriousMinutiae Essa função consiste em retirar o máximo de interferências da extração de minutos da digital selecionada. import cv2 import numpy as np import skimage.morphology import skimage def removeSpuriousMinutiae(minutiaeList, img, thresh): img = img * 0; SpuriousMin = []; numPoints = len(minutiaeList); D = np.zeros((numPoints, numPoints)) for i in range(1,numPoints): for j in range(0, i): (X1,Y1) = minutiaeList[i]['centroid'] (X2,Y2) = minutiaeList[j]['centroid'] dist = np.sqrt((X2-X1)**2 + (Y2-Y1)**2); D[i][j] = dist if(dist < thresh): SpuriousMin.append(i) SpuriousMin.append(j) SpuriousMin = np.unique(SpuriousMin) for i in range(0,numPoints): if(not i in SpuriousMin): (X,Y) = np.int16(minutiaeList[i]['centroid']); img[X,Y] = 1; img = np.uint8(img); return(img) 41 REFERENCIAS Python: O que é? Por que usar?. PyScience-Brasil.http://pyscience- brasil.wikidot.com/python:python-oq-e- pq#:~:text=Al%C3%A9m%20disso%2C%20Python%20suporta%20m%C3%BAl tiplos,o%20desenvolvimento%20de%20algoritmos%20complexos. Vaz, Welton. Saiba mais como o python surgiu e qual o seu cenário atual.Vulpi.https://blog.vulpi.com.br/python-como- surgiu/#:~:text=Python%20foi%20criado%20no%20final,com%20o%20sistema %20operacional%20Amoeba. https://www.teses.usp.br/teses/disponiveis/6/6134/tde-28062005- 101218/publico/SergiaSouzaOliveira.pdf (Oliveira) Pignati,Wardelei. Avaliação integrada dos impactos dos agrotóxicos na saúde e ambiente.UFMT. http://www.contag.org.br/imagens/f1656pignati---ufmt.pdf https://www.mprs.mp.br/media/areas/ambiente/arquivos/agrotoxicos/dossie_abr asco_agrotoxico.pdf(Dossie Abrasco) https://www.cnpma.embrapa.br/down_site/forum/2013/agrotoxicos/palestras/Fo rum2013_KARENFRIEDRICH.pdf (cnpma.Embrapa - grafico) http://www.teses.usp.br/teses/disponiveis/6/6134/tde-28062005- http://www.mprs.mp.br/media/areas/ambiente/arquivos/agrotoxicos/dossie_abr http://www.cnpma.embrapa.br/down_site/forum/2013/agrotoxicos/palestras/Fo 42 43 44
Compartilhar