También puede leer una versión traducida de este archivo en chino 简体中文版 o en coreano 한국어 o en japonés 日本語.
Reconocer y manipular caras de Python o desde la línea de comandos con la biblioteca de reconocimiento facial más simple del mundo.
Construido utilizando el reconocimiento facial de última generación de DLIB construido con un aprendizaje profundo. El modelo tiene una precisión del 99.38% en las caras etiquetadas en el punto de referencia salvaje.
¡Esto también proporciona una herramienta simple de línea de comandos face_recognition
que le permite hacer un reconocimiento de cara en una carpeta de imágenes desde la línea de comando!
Encuentra todas las caras que aparecen en una imagen:
import face_recognition
image = face_recognition . load_image_file ( "your_file.jpg" )
face_locations = face_recognition . face_locations ( image )
Obtenga las ubicaciones y contornos de los ojos, la nariz, la boca y la barbilla de cada persona.
import face_recognition
image = face_recognition . load_image_file ( "your_file.jpg" )
face_landmarks_list = face_recognition . face_landmarks ( image )
Encontrar características faciales es muy útil para muchas cosas importantes. Pero también puedes usarlo para cosas realmente estúpidas como aplicar maquillaje digital (piense 'meitu'):
Reconocer quién aparece en 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 )
Incluso puede usar esta biblioteca con otras bibliotecas de Python para hacer un reconocimiento facial en tiempo real:
Vea este ejemplo para el código.
Demo de cuaderno de Jupyter compartido por el usuario (no compatible oficialmente):
Primero, asegúrese de tener DLIB ya instalado con Python Bindings:
Luego, asegúrese de tener Cmake instalado:
brew install cmake
Finalmente, instale este módulo desde PYPI usando pip3
(o pip2
para Python 2):
pip3 install face_recognition
Alternativamente, puede probar esta biblioteca con Docker, vea esta sección.
Si tiene problemas con la instalación, también puede probar una VM preconfigurada.
pkg install graphics/py-face_recognition
Si bien Windows no es compatible oficialmente, los usuarios útiles han publicado instrucciones sobre cómo instalar esta biblioteca:
Cuando instala face_recognition
, obtiene dos programas de línea de comandos simples:
face_recognition
: reconozca caras en una fotografía o carpeta llena para fotografías.face_detection
: encuentre caras en una fotografía o carpeta llena para fotografías. face_recognition
El comando face_recognition
le permite reconocer caras en una fotografía o carpeta llena para fotografías.
Primero, debe proporcionar una carpeta con una imagen de cada persona que ya conozca. Debe haber un archivo de imagen para cada persona con los archivos nombrados de acuerdo con quién está en la imagen:
A continuación, necesita una segunda carpeta con los archivos que desea identificar:
Luego, simplemente ejecute el comando face_recognition
, pasando a la carpeta de personas conocidas y la carpeta (o imagen única) con personas desconocidas y le dice quién está en cada imagen:
$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/
/unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person
Hay una línea en la salida para cada cara. Los datos se separan con el nombre de archivo y el nombre de la persona encontrada.
Una unknown_person
es una cara en la imagen que no coincidía con nadie en su carpeta de personas conocidas.
face_detection
El comando face_detection
le permite encontrar la ubicación (coordinadas de píxeles) de cualquier cara en una imagen.
Simplemente ejecute el comando face_detection
, pasando una carpeta de imágenes para verificar (o una sola imagen):
$ 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 una línea para cada cara que se detectó. Las coordenadas informadas son las coordenadas superior, derecha, inferior e izquierda de la cara (en píxeles).
Si está obteniendo múltiples coincidencias para la misma persona, podría ser que las personas en sus fotos se ven muy similares y se necesita un valor de tolerancia más bajo para hacer que las comparaciones faciales sean más estrictas.
Puede hacer eso con el parámetro --tolerance
. El valor de tolerancia predeterminado es 0.6 y los números más bajos hacen que las comparaciones faciales sean más estrictas:
$ 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
Si desea ver la distancia de la cara calculada para cada coincidencia para ajustar la configuración de tolerancia, puede 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
Si simplemente desea conocer los nombres de las personas en cada fotografía pero no le importan los nombres de los archivos, puede hacer esto:
$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ | cut -d ' , ' -f2
Barack Obama
unknown_person
El reconocimiento facial se puede hacer en paralelo si tiene una computadora con múltiples núcleos de CPU. Por ejemplo, si su sistema tiene 4 núcleos de CPU, puede procesar aproximadamente 4 veces más imágenes en la misma cantidad de tiempo utilizando todos sus núcleos de CPU en paralelo.
Si está usando Python 3.4 o nuevo, pase en un --cpus <number_of_cpu_cores_to_use>
$ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/
También puede pasar --cpus -1
para usar todos los núcleos de CPU en su sistema.
Puede importar el módulo face_recognition
y luego manipular fácilmente caras con solo un par de líneas de código. ¡Es súper 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!
Vea este ejemplo para probarlo.
También puede optar por un modelo de detección de cara de aprendizaje profundo algo más preciso.
Nota: La aceleración de GPU (a través de la biblioteca CUDA de NVIDIA) es necesaria para un buen rendimiento con este modelo. También querrá habilitar el soporte CUDA al completar 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!
Vea este ejemplo para probarlo.
Si tiene muchas imágenes y una GPU, también puede encontrar caras en 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.
Vea este ejemplo para probarlo.
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!" )
Vea este ejemplo para probarlo.
Todos los ejemplos están disponibles aquí.
Si desea crear un ejecutable independiente que pueda ejecutarse sin la necesidad de instalar python
o face_recognition
, puede usar Pyinstaller. Sin embargo, requiere una configuración personalizada para funcionar con esta biblioteca. Vea este problema sobre cómo hacerlo.
face_recognition
Si desea aprender cómo funcionan la ubicación y el reconocimiento de la cara en lugar de depender de una biblioteca de caja negra, lea mi artículo.
Dado que face_recognition
depende de dlib
que está escrito en C ++, puede ser difícil implementar una aplicación que lo use a un proveedor de alojamiento en la nube como Heroku o AWS.
Para facilitar las cosas, hay un ejemplo de Dockerfile en este repositorio que muestra cómo ejecutar una aplicación creada con face_recognition
en un contenedor Docker. Con eso, debería poder implementar cualquier servicio que admita las imágenes de Docker.
Puede probar la imagen de Docker localmente ejecutando: docker-compose up --build
También hay varias imágenes de Docker preBuidas.
Los usuarios de Linux con una GPU (controladores> = 384.81) y NVIDIA-Docker instalados pueden ejecutar el ejemplo en la GPU: Abra el archivo Docker-Compose.yml y la incommentación de dockerfile: Dockerfile.gpu
y runtime: nvidia
Lines.
Si tiene problemas, lea la sección de errores comunes del wiki antes de presentar un problema de GitHub.