Você também pode ler uma versão traduzida deste arquivo em chinês 简体中文版 ou em coreano 한국어 ou em japonês 日本語.
Reconhecer e manipular rostos do Python ou da linha de comando com a biblioteca de reconhecimento de rosto mais simples do mundo.
Construído usando o reconhecimento facial de ponta da DLIB construído com um aprendizado profundo. O modelo tem uma precisão de 99,38% nas faces rotuladas no benchmark selvagem.
Isso também fornece uma ferramenta simples de linha de comando face_recognition
que permite que você enfrente o reconhecimento em uma pasta de imagens da linha de comando!
Encontre todos os rostos que aparecem em uma foto:
import face_recognition
image = face_recognition . load_image_file ( "your_file.jpg" )
face_locations = face_recognition . face_locations ( image )
Pegue os locais e esboços dos olhos de cada pessoa, nariz, boca e queixo.
import face_recognition
image = face_recognition . load_image_file ( "your_file.jpg" )
face_landmarks_list = face_recognition . face_landmarks ( image )
Encontrar recursos 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'):
Reconheça quem aparece em cada foto.
import face_recognition
known_image = face_recognition . load_image_file ( "biden.jpg" )
unknown_image = face_recognition . load_image_file ( "unknown.jpg" )
biden_encoding = face_recognition . face_encodings ( known_image )[ 0 ]
unknown_encoding = face_recognition . face_encodings ( unknown_image )[ 0 ]
results = face_recognition . compare_faces ([ biden_encoding ], unknown_encoding )
Você pode até usar esta biblioteca com outras bibliotecas do Python para fazer reconhecimento de rosto em tempo real:
Veja este exemplo para o código.
Demo de notebook compartilhado com uso do usuário (não é oficialmente suportado):
Primeiro, verifique se você já está instalado com o Python Bindings:
Em seguida, certifique -se de instalar o CMake:
brew install cmake
Por fim, instale este módulo do Pypi usando pip3
(ou pip2
para Python 2):
pip3 install face_recognition
Como alternativa, você pode experimentar esta biblioteca com o Docker, consulte esta seção.
Se você estiver tendo problemas com a instalação, também pode experimentar uma VM pré-configurada.
pkg install graphics/py-face_recognition
Embora o Windows não seja oficialmente suportado, os usuários úteis publicaram instruções sobre como instalar esta biblioteca:
Ao instalar face_recognition
, você obtém dois programas simples da linha de comando:
face_recognition
- Reconheça rostos em uma fotografia ou pasta cheia para fotografias.face_detection
- Encontre rostos em uma fotografia ou pasta cheia para fotografias. face_recognition
O comando face_recognition
permite que você reconheça 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 executa o comando face_recognition
, passando na pasta de pessoas conhecidas e na pasta (ou imagem única) com pessoas desconhecidas e 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.
Um unknown_person
é um rosto na imagem que não combinava com ninguém em sua pasta de pessoas conhecidas.
face_detection
O comando face_detection
permite encontrar o local (coordenados de pixels) de qualquer faces em uma imagem.
Basta executar o comando face_detection
, passando em 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
Ele 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).
Se você estiver recebendo várias correspondências para a mesma pessoa, pode ser que as pessoas em suas fotos pareçam muito semelhantes e seja necessário um valor de tolerância mais baixo para tornar as comparações de rosto mais rigorosas.
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 rosto mais rigorosas:
$ face_recognition --tolerance 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 correspondência 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
Se você simplesmente quiser saber os nomes das pessoas em cada fotografia, mas não se importa com nomes de arquivos, você pode fazer isso:
$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ | cut -d ' , ' -f2
Barack Obama
unknown_person
O reconhecimento de rosto 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 seus núcleos de CPU em paralelo.
Se você estiver usando o Python 3.4 ou mais recente, passe em 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 --cpus -1
para usar todos os núcleos da CPU em seu sistema.
Você pode importar o módulo face_recognition
E depois manipular faces com apenas algumas linhas de código. É super fácil!
API Docs: https://face-recognition.readthedocs.io.
import face_recognition
image = face_recognition . load_image_file ( "my_picture.jpg" )
face_locations = face_recognition . face_locations ( image )
# face_locations is now an array listing the co-ordinates of each face!
Veja este exemplo para experimentá -lo.
Você também pode optar por um modelo de detecção de rosto baseado em aprendizado profundo 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 deseja ativar o suporte do CUDA ao reclamar dlib
.
import face_recognition
image = face_recognition . load_image_file ( "my_picture.jpg" )
face_locations = face_recognition . face_locations ( image , model = "cnn" )
# face_locations is now an array listing the co-ordinates of each face!
Veja este exemplo para experimentá -lo.
Se você tiver muitas imagens e uma GPU, também pode encontrar rostos em lotes.
import face_recognition
image = face_recognition . load_image_file ( "my_picture.jpg" )
face_landmarks_list = face_recognition . face_landmarks ( image )
# face_landmarks_list is now an array with the locations of each facial feature in each face.
# face_landmarks_list[0]['left_eye'] would be the location and outline of the first person's left eye.
Veja este exemplo para experimentá -lo.
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 now contains a universal 'encoding' of my facial features that can be compared to any other picture of a face!
unknown_picture = face_recognition . load_image_file ( "unknown.jpg" )
unknown_face_encoding = face_recognition . face_encodings ( unknown_picture )[ 0 ]
# Now we can see the two face encodings are of the same person with `compare_faces`!
results = face_recognition . compare_faces ([ my_face_encoding ], unknown_face_encoding )
if results [ 0 ] == True :
print ( "It's a picture of me!" )
else :
print ( "It's not a picture of me!" )
Veja este exemplo para experimentá -lo.
Todos os exemplos estão disponíveis aqui.
Se você deseja criar um executável independente que possa ser executado sem a necessidade de instalar python
ou face_recognition
, você pode usar o PyInstaller. No entanto, requer alguma configuração personalizada para funcionar com esta biblioteca. Veja esta questão de como fazê -lo.
face_recognition
Se você quiser saber como o local do rosto e o reconhecimento funcionam, em vez de dependendo de uma biblioteca de caixas pretas, leia meu artigo.
Como face_recognition
depende do dlib
que está escrito em C ++, pode ser complicado implantar um aplicativo usando -o em um provedor de hospedagem em nuvem como Heroku ou AWS.
Para facilitar as coisas, há um exemplo do Dockerfile neste repositório que mostra como executar um aplicativo construído com face_recognition
em um contêiner do Docker. Com isso, você deve ser capaz de implantar para qualquer serviço que suporte imagens do Docker.
Você pode experimentar a imagem do docker localmente executando: docker-compose up --build
Existem também várias imagens pré -construídas do Docker.
Os usuários do Linux com uma GPU (drivers> = 384.81) e NVIDIA-Docker instalados podem executar o exemplo na GPU: abra o arquivo Docker-compose.yml e descomemente o dockerfile: Dockerfile.gpu
e runtime: nvidia
Lines.
Se você tiver problemas, leia a seção de erros comuns do wiki antes de apresentar um problema no GitHub.