Cómo instalar y usar la biblioteca de detección y reconocimiento facial de Python en Ubuntu 16.04

Cómo instalar y usar la biblioteca de detección y reconocimiento facial de Python en Ubuntu 16.04

La biblioteca face_recognition es ampliamente conocida en la web por ser la api de reconocimiento facial más simple del mundo para Python y la línea de comandos, y lo mejor de todo es que no tendrás que pagar un centavo por ella, el proyecto es totalmente de código abierto. por lo que si tiene algunos conocimientos sobre desarrollo y puede crear una biblioteca desde cero, seguramente sabrá cómo trabajar con esta biblioteca.

En este artículo, le enseñaremos cómo instalar, configurar y usar básicamente la biblioteca de Python "reconocimiento facial" en Ubuntu 16.04.

Requisitos

Antes de continuar con el uso de esta biblioteca, necesitará en su sistema:

Python 3

En este tutorial, seguiremos la instalación de la biblioteca con Python 3.

hacer

Su sistema necesita CMake instalado, una familia de herramientas multiplataforma de código abierto diseñada para construir, probar y empaquetar software. CMake se utiliza para controlar el proceso de compilación de software utilizando archivos de configuración independientes del compilador y una plataforma simple, y generar archivos MAKE nativos y espacios de trabajo que se pueden utilizar en el entorno de compilación de su elección. El conjunto de herramientas CMake fue creado por Kitware en respuesta a la necesidad de un poderoso entorno de construcción multiplataforma para proyectos de código abierto como ITK y VTK.

Si no está instalado en su sistema, puede ejecutar los siguientes comandos para instalarlo:

# Update repo
sudo apt-get update

# Install cmake if it's not installed
sudo apt-get install build-essential cmake

1. Instale y compile dlib

Antes de continuar con el uso y la instalación de la biblioteca de reconocimiento facial en Python, necesitará el distribuible de dlib instalado en su sistema y también el enlace de Python. Dlib es un conjunto de herramientas moderno de C ++ que contiene algoritmos y herramientas de aprendizaje automático para crear software complejo en C ++ para resolver problemas del mundo real. Se utiliza tanto en la industria como en el mundo académico en una amplia gama de dominios que incluyen robótica, dispositivos integrados, teléfonos móviles y grandes entornos informáticos de alto rendimiento. Las licencias de código abierto de Dlib le permiten usarlo en cualquier aplicación, sin cargo.

Para comenzar con la compilación de dlib en su sistema, clone el repositorio en algún directorio de su sistema:

# Clone the dlib library in some directory of the system
git clone https://github.com/davisking/dlib.git

Luego, proceda a construir dlib con los siguientes comandos:

# entrar en el directorio clonado
cd dlib

# crear directorio de compilación dentro del directorio clonado
mkdir build

# Cambiar al directorio creado
cd build

# generar un Makefile en el directorio actual
cmake ..

# ¡Compila dlib!
cmake --build .

Esto iniciará el proceso de compilación y una vez que finalice, la biblioteca nativa de dlib estará disponible en su sistema. Para obtener más información sobre Dlib, visite el sitio web oficial aquí .

2. Instale el enlace de Python para dlib

Después de compilar dlib, vuelva a cambiar al directorio clonado en el paso anterior:

cd ..

Y continúe con la instalación de los enlaces de Python ejecutando el archivo setup.py con Python 3 con el siguiente comando:

python3 setup.py install

Esto instalará el enlace y podrá importar dlib más adelante en su código Python. En caso de que se enfrente a la siguiente excepción durante la ejecución del comando anterior:

Traceback (most recent call last):
  File "setup.py", line 42, in <module>
    from setuptools import setup, Extension
ImportError: No module named 'setuptools'

Instale las herramientas de configuración de Python 3 con el siguiente comando:

sudo apt-get install python3-setuptools

Y ahora intente nuevamente ejecutar el comando python3 setup.py install.

3. Instalar la biblioteca de reconocimiento facial

Como se mencionó, usaremos la biblioteca de reconocimiento facial. Esta biblioteca reconoce y manipula rostros desde Python o desde la línea de comandos con la biblioteca de reconocimiento facial más simple del mundo. Creado con el reconocimiento facial de última generación de dlib creado con aprendizaje profundo. El modelo tiene una precisión del 99,38% en el punto de referencia Caras etiquetadas en la naturaleza .  

Esto también proporciona una herramienta de línea de comando simple que le permite hacer reconocimiento facial en una carpeta de imágenes desde la línea de comando fácilmente. Puedes instalarlo con el siguiente comando: face_recognition 

Nota

La instalación tardará un poco en descargarse e instalarse, así que tenga paciencia .

pip3 install face_recognition

Si no tiene pip3 instalado, instálelo con el siguiente comando:

sudo apt-get -y install python3-pip

Para obtener más información sobre esta biblioteca, visite el repositorio oficial en Github aquí . Después de instalar la biblioteca, podrá usarla desde la CLI o sus scripts de Python.

4. Cómo usar

Cuando lo instala , obtiene dos programas sencillos de línea de comandos: face_recognition

  • face_recognition - Reconocer rostros en una fotografía o carpeta completa para fotografías.
  • face_detection - Encuentra caras en una fotografía o carpeta llena de fotografías.

¡También tendrá la posibilidad de importar la biblioteca en sus scripts y usarla desde allí!

Reconocimiento facial

Por ejemplo, con esta biblioteca podrás identificar algunas caras según alguna pequeña base de datos como fuente. Crea un directorio que contenga las posibles personas que el script podrá identificar, en este ejemplo tendremos un directorio con 3 celebridades:

Face Recognition Python Ubuntu CLI

En nuestro comando, identificaremos este directorio como nuestra fuente de imágenes. En otro directorio almacenaremos la imagen de la celebridad que queremos identificar de nuestra base de datos, obviamente usaremos una de las celebridades registradas, pero con otra imagen:

Face Recognition Python

La lógica es la siguiente, la biblioteca usará el directorio de imágenes celebritiescomo base de datos y buscaremos de quién son las imágenes almacenadas en el directorio unknown. Puede ejecutar el siguiente comando para realizar la tarea mencionada:

face_recognition ./celebrities/ ./unknown/

Entonces, la salida será:

Face Recognition Library Python CLI

El comando generará la ruta a la imagen que se procesó, en nuestro caso, unknown_celebrity.jpgy agregará el nombre de la imagen coincidente del celebrities directorio como sufijo. En este caso, la biblioteca pudo identificar al actor Ryan Reynolds a partir de nuestras imágenes. Tenga en cuenta que esto también puede funcionar con varias imágenes.

Como se mencionó, la utilidad CLI es solo un extra, uno de los hechos divertidos es la capacidad de escribir un código por ti mismo e identificar las caras con algo de lógica, por ejemplo:

import face_recognition

#Cargue los archivos jpg en matrices numpy
obama_image = face_recognition.load_image_file("Barack Obama.jpg")
justin_image = face_recognition.load_image_file("Justin Timberlake.jpg")
ryan_image = face_recognition.load_image_file("Ryan Reynolds.jpg")
unknown_image = face_recognition.load_image_file("unknown_celebrity.jpg")

# Obtenga las codificaciones de caras para cada cara en cada archivo de imagen
# Dado que podría haber más de una cara en cada imagen, devuelve una lista de codificaciones.
# Pero como sé que cada imagen solo tiene una cara, solo me importa la primera codificación en cada imagen, así que tomo el índice 0.
try:
    obama_face_encoding = face_recognition.face_encodings(obama_image)[0]
    justin_face_encoding = face_recognition.face_encodings(justin_image)[0]
    ryan_face_encoding = face_recognition.face_encodings(ryan_image)[0]
    
    unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0]
except IndexError:
    print("No pude localizar ningún rostro en al menos una de las imágenes. Verifique los archivos de imagen. Abortando ...")
    quit()

known_faces = [
    obama_face_encoding,
    justin_face_encoding,
    ryan_face_encoding
]

# Los resultados son una matriz de Verdadero / Falso que indica si la cara desconocida coincide con alguien en la matriz de caras conocidas.
results = face_recognition.compare_faces(known_faces, unknown_face_encoding)

print("Is the unknown face a picture of Obama? {}".format(results[0]))
print("Is the unknown face a picture of Justin? {}".format(results[1]))
print("Is the unknown face a picture of Ryan? {}".format(results[2]))
print("Is the unknown face a new person that we've never seen before? {}".format(not True in results))

La idea es básicamente la misma, compara la codificación de caras generada por las imágenes que tienes en tu "base de datos" con la codificación generada por la imagen que quieres identificar.

Detección de rostro

La detección de rostros le permite identificar la ubicación de rostros dentro de una imagen. La biblioteca devolverá las coordenadas de las imágenes en la imagen, por lo que puede usar esas coordenadas para dibujar cuadrados en las imágenes. Exactamente como la herramienta de reconocimiento facial, el comando imprimirá la ruta de la imagen en el directorio providen seguido de las coordenadas como sufijo, por ejemplo:

face_detection ./celebrities/

Esto generará la siguiente salida:

Face Detection on Images Python

Como puede ver, puede obtener las coordenadas de las caras identificadas en la imagen después de la primera coma de la cadena. También puede usarlo con su código:

import face_recognition

image = face_recognition.load_image_file("Ryan Reynolds.jpg")
face_locations = face_recognition.face_locations(image)

# [(98, 469, 284, 283)]
print(face_locations)

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable