Projeto final disciplina Técnicas de Programação 1
A documentação foi gerada utilizando a ferramenta Doxygen, podendo ser acessada pelo link:
https://mashiro11.github.io/html/
Este projeto consiste em um sistema de controle de acesso para ser utilizado na entrada dos Laboratórios de Informática (Linf).
Sendo que no momento do cadastramento de usuário são passados suas informações e logo após o sistema capta algumas fotos do rosto dessa pessoa com diferentes expressões faciais para que seja feita a validação de acesso.
O reconhecimento facial é uma das técnicas mais utilizadas na biometria tanto para a segurança da informação como para segurança de nossa sociedade.
Este trabalho implementa um software que reconhece uma imagem retirada através de um webcam ou câmera para reconhecer suas características e compará-las com as de um banco de dados.
Foi utilizada a biblioteca OpenCV, biblioteca para a utilização de processamento de imagens de grande eficácia e por obter excelentes resultados no reconhecimento de características utilizando os HaarCascade.
O software foi desenvolvido em c++.
Versão testada Ubuntu 16.04 LTS
Compilador :
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
Para compilar no ambiente Linux, utilize a branch "ubuntu", com a seguinte linha de compilação:
g++ src/Main.cpp src/Usuario.cpp src/Reserva.cpp src/GerenteBD.cpp src/GerenteLogin.cpp src/SistemaLinf.cpp -I include/ -o ProjetoTP1 pkg-config --cflags --libs opencv
-std=c++11
Copyright (C) 2015 Free Software Foundation, Inc.
Opencv 3.2.0-dev:
Fonte: https://github.com/opencv/opencv
Modulos extra: https://github.com/opencv/opencv_contrib
Compilador G++
Baixe o MinGW acessando SourceForge, clique depois em Download e espere o download finalizar, execute o aplicativo. Prossiga com Next e escolha a configuração adequada, como uma versão mais recente e a arquitetura compatível. Clique em Next até finalizar a instalação. Será mostrado uma tela inicial mostrando informações do Projeto. Prossiga até chegar em uma tela para escolher os recursos que serão instalados, selecione mingw32-base e o mingw32-gcc-g++. Depois disso, clique em Instalattion > Apply Changes.
Agora será necessário adicionar o diretório de binários do MinGW na Path do Windows, para isso, clique no Iniciar, e depois clique com o botão direito em Computador, e em seguida em Propriedades. No lado esquerdo clique em Configurações avançadas do sistema. Clique agora em variáveis de ambiente. Ache a variável PATH, e clique em editar, no fim dela, adicione um “;” (ponto e vírgula), e coloque o diretório dos binários que foram instalados com o MinGW (geralmente em C:\Program Files (x86)\mingw-w64). Para testar se deu certo, abra o Prompt de Comando e digite “g++”.
.NET Framework
Será utilizado nas próximas instalações o .NET Framework. Baixe acessando Microsoft, escolha uma versão 4.3 ou superior e clique em Download. Execute e aceite os termos de contrato e em seguida clique em instalar, espere o download e a instalação finalizar.
OpenCV
Baixe o OpenCV versão 2.4.* de preferência ou acesse diretamente pela página do SourceForge que irá fazer o Download automaticamente. Depois abra e clique em extrair.
Agora será necessário adicionar o diretório de binários do OpenCV na Path do Windows, para isso, clique no Iniciar, e depois clique com o botão direito em Computador, e em seguida em Propriedades. No lado esquerdo clique em Configurações avançadas do sistema. Clique agora em variáveis de ambiente. Em variáveis do sistema clique em Novo, defina o nome da variável como "OPENCV_DIR" sem aspas e o valor da variável como o diretório da build do OpenCV (ex. C:\opencv\build;). Ache a variável PATH, e clique em editar, no fim dela, adicione um “;” (ponto e vírgula), e coloque "%OPENCV_DIR%" ligado a continuação do diretório dos binários que foram instalados com o OpenCV (ex. %OPENCV_DIR%\x64\vc11\bin;).
Visual Studio IDE
Para quem gosta do auxílio que uma IDE proporciona, sugiro baixar o VisualStudio
Veja aqui um tutorial instrutivo que irá deixar a IDE configurada para reconhecer a biblioteca OpenCV.
Baixe o CMake para a portabilidade do seu projeto após verificar o tipo de sistema de sua máquina e extraia os arquivos. Após a extração encontre o diretório binário do CMake e execute o programa cmake-gui. Após isso insira o caminho dos arquivos de código na primeira entrada e na segunda insira o caminho que irá ser armazenados os arquivos build do CMake. Clique em Configure e depois que nenhum erro for relatado, você pode clicar no botão Generate. E seu trabalho estará pronto.
CMakeLists:
cmake_minimum_required (VERSION 2.6)
project (tp1.2)
add_executable(tp1.2 tp1.cpp)
Linha de comando utilizada:
cmake .
Esse diagrama foi feito pensando nos principais atores presentes no laboratório. É também uma ideia inicial de modelagem do banco de dados.
Fonte:
https://yuml.me/diagram/scruffy/usecase/samples
[Professor]-(Reservar laboratório)
[Professor]-(Acessar laboratório)
[Professor]-(Criar cadastro de acesso)
[Aluno]-(Criar cadastro de acesso)
[Aluno]-(Acessar laboratório [Funcionário]-(Criar cadastro de acesso)
[Funcionário]-(Acessar laboratório)
[Funcionário]-(Modificar cadastro de acesso)
[Funcionário]-(Excluir cadastro de acesso)
Descreve o parte do sistema de reconhecimento de faces para permitir a entrada ou cadastrar uma pessoa no linf.
Fonte:
https://yuml.me/diagram/nofunky/activity/samples
(start)->(Reconhecer_Face)-><a>[Ok]->(Permite_Acesso_Linf),
<a>[Nao_identificado]->(Digita_login_senha)->(Atualiza_Cadastro)->(Permite_Acesso_Linf)->(end)
Abaixo, o diagrama de sequência que representa como o sistema efetua o login de um usuário, caso este já se encontre cadastrado no banco de dados.
Fonte:
https://www.websequencediagrams.com/
O código abaixo é o gerador da versão final do diagrama de sequência.
title Sequência de Login
Usuario->+SistemaLinf: EfetuaLogin()
SistemaLinf->+GerenteLogin: CredenciaUsuario(matricula)
GerenteLogin->+GerenteBD: ExisteUsuario(matricula)
GerenteBD-->-GerenteLogin: bool
alt ExisteUsuario() == true
GerenteLogin->GerenteLogin: ReconheceFace()
alt _ReconheceFace() == true
GerenteLogin->+GerenteBD:BuscaUsuario(matricula)
GerenteBD-->-GerenteLogin: usuario
GerenteLogin-->SistemaLinf: usuario
else
GerenteLogin->+GerenteBD: ChecaUsuario(matricula,Senha)
GerenteBD-->-GerenteLogin: bool
alt ChecaUsuario() == true
GerenteLogin->+GerenteBD: BuscaUsuario(matricula)
GerenteBD-->-GerenteLogin: usuario
GerenteLogin->GerenteLogin: _AtualizaBancoDeFotos()
end
end
GerenteLogin-->-SistemaLinf: usuario
end
SistemaLinf-->Usuario: usuario
Este é o primeiro diagrama de classes imaginado para o sistema. Na versão final, não se viu necessidade da classe GerenteReserva, permitindo comunicação direta entre a classe Usuario e GerenteBD.