claudineien / machine-learning-webcam-face-recognition-python

Machine Learning using Deep Learning at Real time face recognition. OpenCV, MTCNN, svm-SVC, LabelEncoder, Face Embedding

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Machine Learning no reconhecimento facial através da webcam

Público alvo: Estudante de Machine Learning 🎓 - Objetivo: Demonstrar Machine Learning - Tempo leitura: 00:09:30 mins - Idioma : [EN]󠁧󠁢󠁥󠁮󠁧󠁿
1 CONCEITOS DE FORMA SIMPLES
  1. Reconhecimento Facial

    É a técnica de capturar/pegar em uma imagem a parte frontal do rosto/face que envolve parte da cabeça, testa, olhos, nariz, maças do rosto, bochechas, boca, maxilar, queixo, analisar a distância entre cada uma destas partes, comparar com outras imagens, identificar diferenças, comparar similaridades e exibir o alvo desejado.

    A imagem considerada pode ser uma foto, vídeo ou câmera.

    O alvo desejado é o ser humano que será identificado.

  2. Machine Learning

    Machine Learning é o objeto de estudo neste projeto. É a técnica computacional de ensinar uma máquina com determinado poder computacional a analisar um conjunto de dados e predizer informações para auxiliar nas decisões.

    Esta técnica pode ser utilizada para tentar resolver qualquer tarefa -da mais simples a mais complexa.

  3. Deep Learning

    É a técnica computacional que analisa muito detalhadamente determinadas características de imagem para auxiliar a identificar quem a imagem pertence.

  4. Neural Network

    É um algoritmo computacional que aprende com novos dados inseridos, simulando o cérebro humano.

    Exemplo: Programar um computador para aprender todos os detalhes de forma e formato de um determinado rosto, ao inserimos outros rostos ele automaticamente armazenara as suas formas e formatos e a partir dai conseguiremos extrair a quem pertence determinado rosto

2 MACHINE LEARNING + WEBCAM - A ESCOLHA

Machine Learning at Face Recognition

  1. Machine Learning como back-end de webcam

    Demonstrar o funcionamento de machine learning no reconhecimento facial através de uma webcam, para mim, é a forma mais fácil de explicar na prática a qualquer pessoa, que é possivel incluir uma inteligência em uma máquina com determinado poder computacional. Neste caso utilizei o conhecido Reconhecimento Facial em Tempo Real.

  2. As bibliotecas de algoritmos a seguir foram ensinadas no treinamento Data Science do Zero e demonstraram eficiência satisfatória, mesmo assim consultei diversas documentações, explicações e exemplos em sites voltados a data science para cumprir este desafio. Os algoritmos principais são :

    • OpenCV
    • MTCNN
    • PIL
    • numpy
    • keras
    • LabelEncoder
    • svm-SVC
    • Standardization
    • Normalizer
    • pickle

  3. Fontes de Estudo : edureka, medium, stack overflow, towards data science

3 INFORMAÇÕES TÉCNICAS
  1. Tecnologias utilizadas neste projeto

    1. Linguagem de programação : python 3.7.7
    2. Python Package Index -pip : versão 20.1.1
    3. Visual Studio Code : Version: 1.46.0 (user setup) Electron: 7.3.1
    4. OS : Windows_NT x64 10.0.18363 (Windows 10 Home)
    5. CPU : Intel(R) Corel(TM) i3-4005U CPU @ 1.70GHz 1.70 GHz
    6. RAM : 8GB
    7. SSD : 225GB
    8. Browser : Chrome: 78.0.3904.130
    9. Plataforma Front de Desenvolvimento : Jupyter notebook 4.6.3
    10. Plataforma Back de Desenvolvimento : miniconda-conda 4.8.3
  2. Algoritmos de visão computacional OpenCV para

    1. Acessar a webcam local do computador, notebook
    2. Exibir a imagem em tempo real através da webcam
  3. Algoritmos deep learning e neural networks mtcnn 0.1.0 para

    1. Aplicar na imagem capturada diversos cálculos de reconhecimento de forma e formato
    2. Disponibilizar resultado dos cálculos aos algoritmos machine learning
  4. Utilizando as técnicas Machine Learning vamos :

    1. Calcular o Embedding da imagem
    2. Aplicar Standardization
    3. Aplicar Normatization com Normalizer da sklearn
    4. Converter os dados categóricos em numéricos com o LabelEncoder
    5. Executar treinamento de reconhecimento facial do algoritmo SVC da sklearn.svm
    6. Utilizar o algoritmo de predição svm nos dados de treino e teste
    7. Aplicar o cáculo de acurácia/precisão do algoritmo accuracy_score da sklearn.metrics
    8. Calcular as coordenadas da face
    9. Utilizar o método de predição do modelo facenet_keras.h5 na imagem visualizada pela webcam
    10. Aplicar o método Normalizer l2
    11. Utilizar a inversão do LabelEncoder
    12. Exibir o resultado da identificação no algoritmo OpenCV pela webcam
4 PRE-REQUISITOS PARA FUNCIONAMENTO DO SISTEMA
  1. Instalar as plataformas de desenvolvimento

    1. Instalar miniconda3
    2. Instalar jupyter notebook
    3. Instalar visual studio code

    Nota:
    Analisar o item Tecnologias utilizadas neste projeto

  2. Instalar as bibliotecas de algoritmos
    1. Atualizar o instalador pip - python package index 💻 python3 -m pip install --upgrade pip
    2. Recomendo utilizar o prompt/terminal do anaconda e/ou miniconda para instalar as bibliotecas, por ser mais prático e apresentar menos inconsistências.
    3. Sintaxe para instalar bibliotecas : pip3 install [nome_biblioteca] --user
    4. Desbloquear sua webcam em seu anti-virus e/ou firewall

  3. Biblioteca Objetivo
    pandas Estrutura de dados e ferramentas de análise de dados
    numpy Algoritmos para cálculos matemáticos e computação científica
    opencv-contrib-python Algoritmos de visão computacional
    scikit-learn Algoritmos para classificação, regressão, agrupamento, dimensionalidade, validações, melhorias na precisão de predições, preprocessamentos, normalizações, etc
    scipy Cálculos científicos com numpy
    keras É uma interface de aplicação de programação desenvolvida para seres humanos, não para máquinas
    Pillow Biblioteca com algoritmos para ler, escrever, criar, inserir, converter, cortar, redimensionar imagens
    mtcnn Algoritmos para reconhecimento facial -Face Recognition
    tensorflow APIs intuitivas de nível superior e construção flexível de modelos em qualquer plataforma
5 GUIA DE INSTALAÇÃO DO SISTEMA
  1. Cumprir o item 4 PRE-REQUISITOS PARA FUNCIONAMENTO DO SISTEMA
  2. Baixar o notebook facenet-keras-mtcnn-labelencoder.ipynb
  3. Baixar os arquivos facenet_keras.part1.rar a facenet_keras.part4.rar. Nestes há o arquivo modelo treinado facenet_keras.h5
  4. Nota : Consultar documentação DESCOMPACTAR O CONTEÚDO DOS ARQUIVOS EXTENSÃO .rar - WINRAR

  5. Baixar o arquivo dataset.rar. Neste há imagens diversas para utilizar em seus treinos e testes

Importante : Disponibilizei os arquivos .py caso queira testar com vscode, pycharm, spyder ou em outros IDEs

6 PROCEDIMENTOS DE COMO UTILIZAR O SISTEMA
  1. Criar estrutura de diretório, para armazenar os arquivos disponibilizados neste repositório. A seguir um modelo de estrutura como orientação :
                  c:/temp/facenet/ : colocar aqui o conteudo do arquivo dataset.rar, que esta na em files
                  c:/temp/facenet/ : colocar aqui o conteudo do arquivo facenet_keras.rar, que esta em files
                  c:/temp/facenet/facerecognition : os arquivos serão criados no rotina de treinamento do modelo
                  
  2. Fazer o download do arquivo facenet_keras.rar e descompactar no diretorio facenet
  3. Abrir o notebook facenet-keras-mtcnn-labelencoder.ipynb no jupyter notebook e executar procedimentos a seguir :
    1. Na class RegisterImg : substituir conteúdo da variável self.grv_img pelo local em que o conteúdo do dataset.rar foi gravado
    2. Na class FaceTrainer : substituir conteúdo da variável self.datasetpath pelo local em que o conteúdo do dataset.rar foi gravado
    3. Na class FaceTrainer : substituir conteúdo da variável self.faces_npz pelo local em que o conteúdo do dataset.rar foi gravado(*)
    4. Na class FaceTrainer : substituir conteúdo da variável self.keras_facenet pelo local em que o conteúdo dos arquivos .rar foram gravados(**)
    5. Na class FaceTrainer : substituir conteúdo da variável self.faces_embeddings pelo local em que você criou o diretório facerecognition(*)
    6. Na class FaceTrainer : substituir conteúdo da variável self.svm_classifier pelo local em que você criou o diretório facerecognition(*)
    7. Na class FaceDetector : substituir conteúdo da variável self.facenet_model pelo local em que o conteúdo dos facenet_kerasX.rar foram gravados
    8. Na class FaceDetector : substituir conteúdo da variável self.svm_model pelo local em que você criou o diretório facerecognition
    9. Na class FaceDetector : substituir conteúdo da variável self.data pelo local em que você criou o diretório facerecognition

    Nota : (*) Manter a extensão .npz; (**) Manter o nome e a extensão do arquivo;

  4. Executar as 5 linhas de códigos
  5. A linha com os códigos a seguir apresentará uma nova linha solicitando algumas informações
                  if __name__ == "__main__":
                    os.system('cls')
                    menu = MainMenu()
                    menu.menu_inicial()
                
  6. Para gravar sua imagem no conjunto de dados, digitar 1 no campo seguido de >> :
    TelaPrincipal
    1. No campo 'Número Matrícula -> ', digitar o número da matricula
      Numero_Matricula
    2. No campo 'Nome Completo -> ', digitar o primeiro nome de quem esta sendo filmado
      Nome_Completo
    3. O sistema se conectará em sua webcam, para lhe filmar. A luz de sua webcam ligará e uma janela com sua imagem será habilitada em sua barra de taferas
      Webcam_Img

    Nota : Na parte superior desta janela há informação para pressionar ENTER para gravar ou ESC para Finalizar

    Importante : Pressione ESC para sair, caso queira executar uma das outras tarefas

  7. Para treinar o algoritmo com a nova imagem, digitar 2. O sistema exibirá uma imagem similar a seguinte :
    TrainAlgor

    Note : O sistema
    1. criara os arquivos faces_dataset_embeddings.npz e SVM_classifier.sav no diretório facerecognition
    2. criara o arquivo faces_dataset.npz no diretório dataset
    3. finalizara e retorna ao menu principal

  8. Para identificar a pessoa através da webcam digitar 3. O sistema ativará a webcam e iniciará o reconhecimento da face. Exibirá janela similar a seguinte :
    Webcam_Img
  9. Para finalizar o sistema, digite 0 (zero). Uma janela similar a seguinte deverá aparecer :
    FinalSistem
7 RESULTADOS
  1. Acurácia

    Representa . . .

  2. Precisão

    É a . . .

8 FONTES DE ESTUDO
9 AGRADECIMENTOS

*Ser agradecido para mim é a atitude que torna as pessoas seres melhores*

Agradeço a mulher mais importante da minha vida, a minha mãe sra Rosalita Borges Evangelista por ter sido uma lutadora incansável, lutando por mim, para mim e comigo e também com meus irmãos. Minha mãe é o motivo de eu me tornar um ser humano honrado.

Agradeço aos meus dois irmãos que me ajudaram nos momentos em que mais precisei.

Agradeço à minha esposa e às minhas duas filhas por serem minha razão, emoção e inspiração e por me apoiar em todos os momentos.

Agradeço aos criadores do computador, da internet, das linguagens de programação computacional, inteligência artificial e tecnologias em geral.

Agradeço à equipe Minerando Dados por criar o espaço Data Sciente do Zero, disponibilizando diversos ensinamentos em machine learning, estatísticas, deep learning e data science, para acelerar meu aprendizado e por este desafio proposto que acabei de concluir.



Muito obrigado a todos 😉


Desejo muito sucesso a todos !

About

Machine Learning using Deep Learning at Real time face recognition. OpenCV, MTCNN, svm-SVC, LabelEncoder, Face Embedding

License:Other


Languages

Language:Jupyter Notebook 53.9%Language:Python 46.1%