Reconhecimento facial

Categorias: , , ,

Descrição

Reconhecimento Facial

Você também pode ler uma versão traduzida deste arquivo em chinês 简体 中文 版 .

Reconhecer e manipular faces do Python ou da linha de comando com a biblioteca de reconhecimento de face mais simples do mundo.

Construído usando o reconhecimento de face de última geração do dlib , construído com aprendizagem profunda. O modelo tem uma precisão de 99,38% no benchmark Faces Marcados no Wild .

Isso também fornece uma ferramenta simples de linha de comando face_recognition que permite fazer reconhecimento de face em uma pasta de imagens a partir da linha de comando!

PyPI Status de compilação Status da Documentação

Características

Encontre rostos nas fotos

Encontre todos os rostos que aparecem em uma foto:

  import face_recognition
 imagem = face_recognition.load_image_file ( " your_file.jpg " )
 face_locations = face_recognition.face_locations (imagem)

Encontre e manipule recursos faciais em imagens

Obter os locais e contornos dos olhos, nariz, boca e queixo de cada pessoa.

  import face_recognition
 imagem = face_recognition.load_image_file ( " your_file.jpg " )
 face_landmarks_list = face_recognition.face_landmarks (imagem)

Encontrar características faciais é super útil para muitas coisas importantes. Mas você também pode usá-lo para coisas realmente estúpidas como aplicar maquiagem digital (pense em ‘Meitu’):

Identifique rostos em fotos

Reconhecer quem aparece em cada foto.

  import face_recognition
 imagem_conhecida = face_recognition.load_image_file ( " biden.jpg " )
 unknown_image = face_recognition.load_image_file ( " desconhecido.jpg " )

 biden_encoding = face_recognition.face_encodings (known_image) [ 0 ]
 unknown_encoding = face_recognition.face_encodings (imagem desconhecida) [ 0 ]

 results = face_recognition.compare_faces ([biden_encoding], unknown_encoding)

Você pode até usar essa biblioteca com outras bibliotecas do Python para fazer reconhecimento facial em tempo real:

Veja este exemplo para o código.

Demonstrações Online

Demonstração de notebook compartilhada pelo usuário Jupyter (não suportada oficialmente): Deepnote

Instalação

Requisitos

  • Python 3.3+ ou Python 2.7
  • macOS ou Linux (o Windows não é oficialmente suportado, mas pode funcionar)

Opções de instalação:

Instalando no Mac ou Linux

Primeiro, certifique-se de ter o dlib já instalado com ligações do Python:

Então, instale este módulo a partir do pypi usando o pip3 (ou o pip2 para o Python 2):

  pip3 install face_recognition

Alternativamente, você pode tentar esta biblioteca com o Docker , veja esta seção .

Se você está tendo problemas com a instalação, você também pode experimentar uma VM pré-configurada .

Instalando em Raspberry Pi 2+

Instalando no Windows

Embora o Windows não seja oficialmente suportado, usuários úteis publicaram instruções sobre como instalar esta biblioteca:

Instalando uma imagem de máquina virtual pré-configurada

Uso

Interface da Linha de comando

Quando você instala o face_recognition , obtém dois programas simples de linha de comando:

  • face_recognition – Reconheça os rostos de uma fotografia ou pasta cheia de fotografias.
  • face_detection – Encontre faces em uma fotografia ou pasta cheia para fotografias.

ferramenta de linha de comando face_recognition

O comando face_recognition permite reconhecer rostos em uma fotografia ou pasta cheia para fotografias.

Primeiro, você precisa fornecer uma pasta com uma foto de cada pessoa que você já conhece. Deve haver um arquivo de imagem para cada pessoa com os arquivos nomeados de acordo com quem está na foto:

conhecido

Em seguida, você precisa de uma segunda pasta com os arquivos que deseja identificar:

desconhecido

Então em você simplesmente execute o comando face_recognition , passando a pasta de pessoas conhecidas e a pasta (ou imagem única) com pessoas desconhecidas e ele diz quem está em cada imagem:

  $ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/

 /unknown_pictures/unknown.jpg, Barack Obama
 /face_recognition_test/unknown_pictures/unknown.jpg,unknown_person

Há uma linha na saída para cada face. Os dados são separados por vírgula com o nome do arquivo e o nome da pessoa encontrada.

Uma pessoa unknown_person é um rosto na imagem que não corresponde a ninguém na sua pasta de pessoas conhecidas.

ferramenta de linha de comando face_detection

O comando face_detection permite encontrar a localização (coordenadas de pixel) de quaisquer faces em uma imagem.

Basta executar o comando face_detection , passando uma pasta de imagens para verificar (ou uma única imagem):

  $ face_detection ./folder_with_pictures/

 examples / image1.jpg, 65,215,169,112
 examples / image2.jpg, 62.394.211.244
 examples / image2.jpg, 95,941,244,792

Imprime uma linha para cada face que foi detectada. As coordenadas relatadas são as coordenadas superior, direita, inferior e esquerda da face (em pixels).

Ajuste de tolerância / sensibilidade

Se você estiver obtendo várias correspondências para a mesma pessoa, pode ser que as pessoas em suas fotos pareçam muito semelhantes e um valor de tolerância menor seja necessário para tornar as comparações de rosto mais rígidas.

Você pode fazer isso com o parâmetro --tolerance . O valor de tolerância padrão é 0,6 e números mais baixos tornam as comparações de faces mais rígidas:

  $ face_recognition --tolerância 0.54 ./pictures_of_people_i_know/ ./unknown_pictures/

 /unknown_pictures/unknown.jpg, Barack Obama
 /face_recognition_test/unknown_pictures/unknown.jpg,unknown_person

Se você quiser ver a distância da face calculada para cada partida para ajustar a configuração de tolerância, você pode usar --show-distance true :

  $ face_recognition --show-distance true ./pictures_of_people_i_know/ ./unknown_pictures/

 /unknown_pictures/unknown.jpg, Barack Obama, 0.378542298956785
 /face_recognition_test/unknown_pictures/unknown.jpg,unknown_person,None
Mais exemplos

Se você simplesmente quer saber os nomes das pessoas em cada fotografia, mas não se importa com os nomes dos arquivos, você pode fazer isso:

  $ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ |  corte -d ' , ' -f2

 Barack Obama
 pessoa desconhecida
Acelerando o reconhecimento facial

O reconhecimento facial pode ser feito em paralelo, se você tiver um computador com vários núcleos de CPU. Por exemplo, se o seu sistema tiver 4 núcleos de CPU, você poderá processar cerca de 4 vezes mais imagens na mesma quantidade de tempo usando todos os núcleos de CPU em paralelo.

Se você estiver usando o Python 3.4 ou mais recente, passe um parâmetro --cpus <number_of_cpu_cores_to_use> :

  $ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/

Você também pode passar em --cpus -1 para usar todos os núcleos de CPU em seu sistema.

Módulo Python

Você pode importar o módulo face_recognition e manipular facilmente os rostos com apenas algumas linhas de código. É super fácil!

Documentos da API: https://face-recognition.readthedocs.io .

Encontre automaticamente todos os rostos em uma imagem
  import face_recognition

 imagem = face_recognition.load_image_file ( " my_picture.jpg " )
 face_locations = face_recognition.face_locations (imagem)

 # face_locations é agora uma matriz listando as coordenadas de cada face!

Veja este exemplo para experimentá-lo.

Você também pode optar por um modelo de detecção de rosto baseado em aprendizagem profunda um pouco mais preciso.

Nota: A aceleração da GPU (via biblioteca CUDA da NVidia) é necessária para um bom desempenho com este modelo. Você também desejará ativar o suporte ao CUDA ao concluir o dlib .

  import face_recognition

 imagem = face_recognition.load_image_file ( " my_picture.jpg " )
 face_locations = face_recognition.face_locations (image, model = " cnn " )

 # face_locations é agora uma matriz listando as coordenadas de cada face!

Veja este exemplo para experimentá-lo.

Se você tiver muitas imagens e uma GPU, também poderá encontrar faces em lotes .

Localizar automaticamente as características faciais de uma pessoa em uma imagem
  import face_recognition

 imagem = face_recognition.load_image_file ( " my_picture.jpg " )
 face_landmarks_list = face_recognition.face_landmarks (imagem)

 # face_landmarks_list agora é uma matriz com os locais de cada recurso facial em cada face.
 # face_landmarks_list [0] ['left_eye'] seria o local e o contorno do olho esquerdo da primeira pessoa.

Veja este exemplo para experimentá-lo.

Reconhecer rostos em imagens e identificar quem são
  import face_recognition

 picture_of_me = face_recognition.load_image_file ( " me.jpg " )
 my_face_encoding = face_recognition.face_encodings (picture_of_me) [ 0 ]

 # my_face_encoding agora contém uma 'codificação' universal dos meus recursos faciais que podem ser comparados a qualquer outra imagem de um rosto!

 unknown_picture = face_recognition.load_image_file ( " desconhecido.jpg " )
 unknown_face_encoding = face_recognition.face_encodings (imagem desconhecida) [ 0 ]

 # Agora podemos ver que as duas codificações faciais são da mesma pessoa com `compare_faces`!

 results = face_recognition.compare_faces ([minha_face_encodificação], unknown_face_encoding)

 if results [ 0 ] == Verdadeiro :
     print ( " É uma foto minha! " )
 else :
     print ( " Não é uma foto minha! " )

Veja este exemplo para experimentá-lo.

Exemplos de código Python

Todos os exemplos estão disponíveis aqui .

Detecção de rosto

Recursos Faciais

Reconhecimento Facial

Criando um executável autônomo

Se você deseja criar um executável autônomo que possa ser executado sem a necessidade de instalar python ou face_recognition , é possível usar o PyInstaller . No entanto, requer alguma configuração personalizada para trabalhar com essa biblioteca. Veja esta edição para saber como fazer isso.

Artigos e Guias que cobrem o face_recognition rosto

Como funciona o reconhecimento facial

Se você quiser saber como funciona o reconhecimento e a localização da face, em vez de depender de uma biblioteca de caixa preta, leia meu artigo .

Ressalvas

  • O modelo de reconhecimento facial é treinado em adultos e não funciona muito bem em crianças. Ele tende a confundir os filhos com bastante facilidade usando o limite de comparação padrão de 0,6.
  • A precisão pode variar entre grupos étnicos. Por favor, veja esta página wiki para mais detalhes.

Implantação em Cloud Hosts (Heroku, AWS, etc)

Como o face_recognition depende do dlib que é escrito em C ++, pode ser difícil implantar um aplicativo usando-o em um provedor de hospedagem na nuvem, como o Heroku ou o AWS.

Para facilitar as coisas, há um exemplo de Dockerfile neste repositório que mostra como executar um aplicativo criado com o face_recognition em um contêiner do Docker . Com isso, você deve poder implantar em qualquer serviço que ofereça suporte a imagens do Docker.

Você pode tentar a imagem do Docker localmente executando: docker-compose up --build

Usuários do Linux com GPU (drivers> = 384.81) e Nvidia-Docker instalados podem executar o exemplo na GPU: Abra o arquivo docker-compose.yml e descomente o dockerfile: Dockerfile.gpu e runtime: nvidia lines.

Ter problemas?

Se você tiver problemas, leia a seção Erros comuns do wiki antes de registrar um problema no github.

obrigado

  • Muito, muito obrigado a Davis King ( @nulhom ) por criar o dlib e por fornecer os modelos de detecção de recursos faciais e codificação facial usados ​​nessa biblioteca. Para mais informações sobre a ResNet que dá suporte às codificações faciais, confira o post do seu blog .
  • Obrigado a todos que trabalham em todas as fantásticas bibliotecas de dados de Python, como numpy, scipy, scikit-image, pillow, etc, etc, que tornam esse tipo de coisa tão fácil e divertido em Python.
  • Graças ao Cookiecutter e ao modelo de projeto audreyr / cookiecutter-pypackage para tornar o empacotamento do projeto Python mais tolerável.