Conhecimento facial com Python e OpenCV

Partilhar

Facebook
Twitter
>WhatsApp

Neste artigo, saberemos o que é o reconhecimento facial e como é diferente da detecção facial. Vamos rever brevemente a teoria do reconhecimento de rostos e depois saltar para a secção de codificação. No final deste artigo, você será capaz de fazer um programa de reconhecimento de rostos para reconhecer rostos em imagens, bem como em imagens ao vivo da webcam.

  1. O que é detecção de rosto?
  2. O que é reconhecimento de rosto?
  3. Reconhecimento de rostos usando Python
    1. Reconhecimento de rostos na alimentação da webcam
    2. Reconhecimento de rostos em imagens

O que é a Detecção de Rosto?

Na visão por computador, um problema essencial que estamos tentando descobrir é a detecção automática de objetos em uma imagem sem intervenção humana. A detecção de rostos pode ser pensada como um problema em que detectamos rostos humanos numa imagem. Pode haver pequenas diferenças nos rostos dos seres humanos, mas em geral, é seguro dizer que existem certas características que estão associadas a todos os rostos humanos. Existem vários algoritmos de detecção de rostos, mas o Algoritmo Viola-Jones é um dos métodos mais antigos que também é usado hoje em dia e usaremos o mesmo mais tarde no artigo. Você pode passar pelo Algoritmo Viola-Jones depois de completar este artigo, pois eu o ligarei no final deste artigo.

Detecção da face é normalmente o primeiro passo para muitas tecnologias relacionadas a face, como reconhecimento ou verificação de face. No entanto, a detecção de rosto pode ter aplicações muito úteis. A aplicação mais bem sucedida da detecção facial seria provavelmente a tirada de fotos. Quando você tira uma foto de seus amigos, o algoritmo de detecção de rosto embutido em sua câmera digital detecta onde os rostos estão e ajusta o foco de acordo.

Para um tutorial sobre apenas detecção de rosto, clique aqui

O que é Reconhecimento de Rosto?

Agora que somos bem sucedidos em fazer tais algoritmos que podem detectar rostos, podemos também reconhecer de quem são os rostos?

O reconhecimento facial é um método para identificar ou verificar a identidade de um indivíduo usando o seu rosto. Existem vários algoritmos que podem fazer o reconhecimento de rostos, mas a sua precisão pode variar. Aqui vou descrever como fazemos o reconhecimento de rostos usando aprendizado profundo.

Então agora vamos entender como reconhecemos rostos usando aprendizado profundo. Fazemos uso da incorporação da face na qual cada face é convertida em um vetor e esta técnica é chamada de aprendizagem profunda de métricas. Deixe-me ainda dividir este processo em três passos simples para facilitar a compreensão:

Detecção da face: A primeira tarefa que realizamos é detectar faces na imagem ou no fluxo de vídeo. Agora que sabemos a localização exacta/coordenadas da face, extraímos esta face para processamento posterior.

Extracção de características: Agora que já tirámos a cara da imagem, extraímos as características da mesma. Aqui vamos usar encaixes de face para extrair as características da face. Uma rede neural tira uma imagem da face da pessoa como entrada e produz um vetor que representa as características mais importantes de uma face. Na aprendizagem mecânica, esse vetor é chamado de embedding e, portanto, chamamos esse vetor de embedding de face. Agora, como isso ajuda no reconhecimento de faces de diferentes pessoas?

Apesar de treinar a rede neural, a rede aprende a emitir vectores semelhantes para faces que parecem semelhantes. Por exemplo, se eu tiver múltiplas imagens de rostos dentro de diferentes períodos, é claro, algumas das características do meu rosto podem mudar, mas não em grande medida. Assim, neste caso os vectores associados às faces são semelhantes ou, em suma, estão muito próximos no espaço vectorial. Dê uma olhada no diagrama abaixo para uma idéia aproximada:

Agora depois de treinar a rede, a rede aprende a emitir vetores que estão mais próximos uns dos outros(semelhantes) para faces da mesma pessoa(parecidas). Os vetores acima agora se transformam em:

Não vamos treinar tal rede aqui, pois é necessária uma quantidade significativa de dados e poder de computação para treinar tais redes. Vamos usar uma rede pré-treinada treinada por Davis King em um conjunto de dados de ~3 milhões de imagens. A rede produz um vector de 128 números que representam as características mais importantes de uma face.

Agora que sabemos como esta rede funciona, vamos ver como utilizamos esta rede nos nossos próprios dados. Passamos todas as imagens dos nossos dados para esta rede pré-treinada para obter os respectivos embeddings e guardamos estes embeddings num ficheiro para o próximo passo.

Comparando faces: Agora que temos as faces embutidas para cada face em nossos dados salvos em um arquivo, o próximo passo é reconhecer uma nova imagem t que não está em nossos dados. Então o primeiro passo é calcular o embutimento da face para a imagem usando a mesma rede que usamos acima e depois comparar este embutimento com o resto dos embutimentos que temos. Reconhecemos a face se o embedding gerado estiver mais próximo ou similar a qualquer outro embedding como mostrado abaixo:

Então passamos duas imagens, uma das imagens é de Vladimir Putin e outra de George W. Bush. Em nosso exemplo acima, não salvamos as incrustações para Putin, mas salvamos as incrustações de Bush. Assim, quando comparamos as duas novas embeddings com as existentes, o vector para Bush está mais próximo das outras embeddings de Bush enquanto as embeddings de Putin não estão mais próximas de nenhuma outra embedding e assim o programa não o consegue reconhecer.

Face Recognition using Python

Nesta secção, vamos implementar o reconhecimento facial usando OpenCV e Python. Primeiro, vamos ver as bibliotecas que vamos precisar e como instalá-las:

  • OpenCV
  • dlib
  • Face_recognition

OpenCV é uma biblioteca de processamento de imagem e vídeo e é usada para análise de imagem e vídeo, como detecção facial, leitura de placas de carro, edição de fotos, visão robótica avançada, reconhecimento óptico de caracteres, e muito mais.

A biblioteca dlib, mantida por Davis King, contém nossa implementação de “aprendizagem profunda de métricas” que é usada para construir nossos embutimentos faciais usados para o processo de reconhecimento real.

A biblioteca de reconhecimento facial, criada por Adam Geitgey, envolve a funcionalidade de reconhecimento facial do dlib, e esta biblioteca é super fácil de trabalhar e nós estaremos usando isto em nosso código. Lembre-se de instalar a biblioteca dlib primeiro antes de instalar o face_recognition.

Para instalar o OpenCV, digite no prompt de comando

pip install opencv-python

Tentei várias maneiras de instalar o dlib no Windows, mas a mais fácil de todas é através do Anaconda. Primeiro, instale o Anaconda (aqui está um guia para instalá-lo) e depois use este comando no seu prompt de comando:

conda install -c conda-forge dlib

Próximo para instalar o face_recognition, digite no prompt de comando

pip install face_recognition

Agora que temos todas as dependências instaladas, vamos começar a codificar. Teremos que criar três arquivos, um vai pegar nosso conjunto de dados e extrair a incorporação de face para cada face usando o dlib. Em seguida, vamos salvar estes embedding em um arquivo.

No próximo arquivo vamos comparar os rostos com os rostos existentes no reconhecimento de imagens e em seguida vamos fazer o mesmo, mas reconhecer os rostos no feed da webcam ao vivo

Extraindo características do Face

Primeiro, você precisa obter um conjunto de dados ou até mesmo criar um de seus próprios. Apenas certifique-se de organizar todas as imagens em pastas com cada pasta contendo imagens de apenas uma pessoa.

Próximo, salve o conjunto de dados em uma pasta da mesma forma que você vai fazer o arquivo. Agora aqui está o código:

Agora armazenamos a incorporação em um arquivo chamado “face_enc”, podemos usá-los para reconhecer rostos em imagens ou fluxo de vídeo ao vivo.

Reconhecimento da cara na alimentação da webcam ao vivo

Aqui está o script para reconhecer rostos numa alimentação da webcam ao vivo:

Embora no exemplo acima tenhamos usado a cascata haar para detectar rostos, também pode usar o face_recognition.face_locations para detectar um rosto como fizemos no script anterior

>

Reconhecimento da face em imagens

>

O script para detectar e reconhecer rostos em imagens é quase similar ao que você viu acima. Tente você mesmo e se não puder dar uma olhada no código abaixo:

Output:

  • Entrada
  • Entrada

Isto nos leva ao final deste artigo onde aprendemos sobre reconhecimento de rostos. Você pode obter um curso gratuito sobre Great learning academy em vários cursos. Clique no banner abaixo para saber mais

Você também pode melhorar com o Curso de Inteligência Artificial e Aprendizagem de Máquina PGP do Great Learning. O curso oferece mentoria de líderes da indústria, e você também terá a oportunidade de trabalhar em projetos relevantes da indústria em tempo real.

Outra Leitura

  1. Detecção de objectos em tempo real usando Viola-Jones Algoritmo
  2. Detecção de objectos em tempo real usando OpenCV
  3. Detecção de objectos em tempo real usando TensorFlow
  4. Detecção de objectos YOLO usando OpenCV
  5. Detecção de objectos em Pytorch | O que é a Detecção de Objectos?

Deixe uma resposta

O seu endereço de email não será publicado.