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!
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):
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
- Baixe a imagem da VM pré-configurada (para VMware Player ou VirtualBox).
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:
Em seguida, você precisa de uma segunda pasta com os arquivos que deseja identificar:
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
- Encontre rostos em uma fotografia
- Encontre rostos em uma fotografia (usando aprendizado profundo)
- Encontre faces em lotes de imagens com GPU (usando deep learning)
- Desfocar todos os rostos em um vídeo ao vivo usando sua webcam (requer que o OpenCV seja instalado)
Recursos Faciais
- Identifique características faciais específicas em uma fotografia
- Aplique (horrivelmente feia) maquiagem digital
Reconhecimento Facial
- Encontre e reconheça rostos desconhecidos em uma fotografia com base em fotografias de pessoas conhecidas
- Identifique e desenhe caixas em volta de cada pessoa em uma foto
- Comparar faces por distância numérica em vez de apenas correspondências True / False
- Reconhecer rostos em vídeo ao vivo usando sua webcam – Versão Simples / Mais Lenta (Requer que o OpenCV seja instalado)
- Reconhecer rostos em vídeo ao vivo usando sua webcam – Versão mais rápida (requer que o OpenCV seja instalado)
- Reconhecer rostos em um arquivo de vídeo e gravar um novo arquivo de vídeo (requer que o OpenCV seja instalado)
- Reconhecer rostos em um Raspberry Pi com câmera
- Executar um serviço da Web para reconhecer rostos via HTTP (requer o Flask a ser instalado)
- Reconhecer rostos com um classificador de vizinhos K mais próximos
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
- Meu artigo sobre como funciona o Reconhecimento Facial: Reconhecimento Facial Moderno com Aprendizado Profundo
- Cobre os algoritmos e como eles geralmente funcionam
- Reconhecimento facial com OpenCV, Python e aprendizado profundo por Adrian Rosebrock
- Cobre como usar o reconhecimento facial na prática
- Raspberry Pi Face Recognition por Adrian Rosebrock
- Cobre como usar isso em um Raspberry Pi
- Enfrentamento de faces com Python por Adrian Rosebrock
- Cobre como agrupar fotos automaticamente com base em quem aparece em cada foto usando o aprendizado não supervisionado
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.