Tech Updates

Cómo crear una aplicación de software de reconocimiento facial

Hoy, estoy escribiendo este artículo para discutir cómo crear un software de reconocimiento facial en Python usando la biblioteca OpenCV,...

Escrito por Ashok Kumar · Lectura de 9 min >
cómo hacer un software de reconocimiento facial

Uno de los últimos resultados de la inteligencia artificial y el aprendizaje automático es el software o aplicación de reconocimiento facial.

Los sistemas de reconocimiento facial se están infiltrando lenta pero seguramente en nuestra vida diaria. Pueden distinguirte entre la multitud e identificarte como persona, lo que puede conducir a una variedad de resultados. Pueden desbloquear la pantalla de su teléfono, pagar sus compras, encarcelarlo, marcar su asistencia a la oficina y pueden hacer más cosas más allá de nuestros pensamientos. Y estoy desarrollando un algoritmo de reconocimiento facial en el que mi software de reconocimiento facial reconocerá incluso la imagen que piensas. Y te ayudará a dibujar a tu reina de las hadas. Burlarse de la primera parte. Volvamos al tema principal.

Hay dos métodos comunes para crear software o aplicaciones de reconocimiento facial.

  1. Este primer método consiste en el uso de equipos previamente entrenados. modelos como dlibcara profundafacenet, y otros. Así que hoy discutiremos este método. Tomará menos tiempo con esfuerzos.
  2. El segundo método para crear un software de detección de rostros es crear una red neuronal desde cero. Este enfoque es apropiado para sistemas de reconocimiento facial multipropósito con características complicadas. Implica más tiempo y esfuerzo, así como millones de fotografías en el conjunto de datos de entrenamiento, a diferencia de un modelo previamente entrenado, que solo requiere miles de imágenes en el aprendizaje por transferencia.

Las empresas de inteligencia artificial más grandes del mundo

Hoy escribo este artículo para discutir

Cómo crear un software de reconocimiento facial en Python usando la biblioteca OpenCV, DLib

Pero, ¿cómo funcionan en la práctica estos programas de reconocimiento facial, qué tan precisos son y quién tiene la autoridad para usarlos en los portales públicos? Hagamos uno nosotros mismos utilizando software gratuito de código abierto y fotografías de amigos para descubrirlo. Déjame seguir diciéndote que este tipo de software de reconocimiento facial se instala en áreas privadas como oficinas corporativas.

Hagamos una lista de todo lo que necesitamos para crear un software de reconocimiento facial.

  1. Necesitas descargar el Texto sublime Cuando se complete la descarga, abra el editor de texto Sublime Text y continúe con las instrucciones de instalación. Aquí es donde crearemos el código que eventualmente se convertirá en el software.

2. Verifique para determinar si 3 Python ya está instalado en su máquina. Este es el lenguaje de programación más recomendado para crear el mejor software de reconocimiento de imágenes en Python. Este es el idioma en el que crearemos nuestro código. Abra Terminal (en la carpeta de utilidades en Aplicaciones) o Símbolo del sistema (haga clic en Windows + X y seleccione Símbolo del sistema) en una computadora Mac o Windows para lograr esto. Luego presione Intro para escribir lo siguiente:

3. Regrese a la Terminal o al Símbolo del sistema y escriba los siguientes comandos, presionando Intro después de cada línea para instalar los paquetes requeridos. Puede llevar un poco de tiempo llegar a la cuarta línea, dlib.

pip3 install cmake
pip3 install face_recognition
pip3 install numpy
pip3 install dlib
pip3 install opencv-python

Continuaré con la configuración de este código en la siguiente Sección 2.

Antes de saber cómo crear un software de reconocimiento facial, analicemos el proceso de detección y reconocimiento de rostros.

El proceso de reconocimiento facial comienza con una aplicación de cámara instalada en cualquier dispositivo. La solicitud está escrita en Golang y se ejecuta como una aplicación de consola local en ambos Raspbian y Ubuntu. La aplicación debe configurarse utilizando un archivo de configuración JSON con el ID de cámara local y el tipo de lector de cámara cuando se inicia por primera vez.
Después de eso, este programa puede emplear visión por computadora y una red neuronal profunda para descubrir una cara potencial dentro de su flujo.

Hay dos métodos básicos para hacerlo que son efectivos:

  1. El modelo de detección de objetos de TensorFlow
  2. Seguimiento de rostros de café

Ambas soluciones han demostrado ser efectivas y ahora están incluidas en el Biblioteca OpenCV.

Una vez que el software de reconocimiento facial ha tomado una cara, la imagen recortada se enviará al backend a través de una solicitud de datos de formulario HTTP. Luego, la API guarda esta imagen facial en el sistema de archivos local, así como en el registro de detección, junto con una ID de persona.

Imagen 2: Distancia euclidiana

cómo crear software de reconocimiento facial en Python

En la parte trasera, un algoritmo encuentra registros con el valor 'clasificado = falso' y utiliza la función Dlib para crear un vector de 128 dimensiones que describe las cualidades de esta cara. Luego, el programa utiliza la distancia euclidiana para comparar este vector con todos los registros faciales en la base de datos para ver si esta nueva cara coincide con alguna cara registrada anteriormente.

cómo hacer un algoritmo de detección de rostros

En la imagen de arriba se muestra una representación del código de la función Dlib, con los puntos de índice correspondientes a partes de la cara. Utilizando el algoritmo anterior, podemos crear un software de reconocimiento facial que detecte rostros con una precisión superior al 80%. Este es solo un código de demostración para representar la estructura.

Conozca las etapas del reconocimiento facial para crear un software de reconocimiento facial

Para crear una aplicación móvil con tecnología de reconocimiento facial, primero debes determinar qué pasos debes seguir. ¿Cuáles son los distintos pasos del procedimiento de identificación?

  • Detección de rostros al inicio. El sistema debe detectar el rostro en la imagen en la primera etapa. No se trata todavía de identificar a una persona; se trata simplemente del hecho de que estás mirando un rostro humano. Y si te atrae la idea de crear un software de detección de rostros y no necesitas nada más avanzado, los procedimientos.
  • Determinación de los puntos de referencia Ahora hay un trabajo mucho más delicado por hacer. El programa busca puntos de referencia (rasgos) en el rostro que puedan usarse para determinar las cualidades únicas de una persona. Anteriormente, se pensaba que los ojos eran el principal punto de referencia, pero la tecnología informática actual ha avanzado hasta abarcar más de 70 aspectos cruciales.
  • Construyendo una cara frontal La cara debe cambiarse para obtener su imagen frontal para facilitar el proceso de emparejar cosas.
  • Cálculo de descriptores de características Ahora se está determinando el descriptor, que es un conjunto de rasgos que describen el rostro de una persona independientemente de su edad, peinado u otros factores. Para ser más específicos, necesitaremos un retrato digital específico, un vector facial, para poder realizar una comparación más precisa.
  • Comparación del rostro. El procedimiento de hacer coincidir el vector facial digital generado con los elementos contenidos en la base de datos es la quinta etapa.
  • El reconocimiento facial es la identificación final de una persona (o, más precisamente, de su rostro) cuando se encuentra una coincidencia.

Sección 2:

Cómo crear software de reconocimiento facial en Python

pip3 install cmake
pip3 install face_recognition
pip3 install numpy
pip3 install dlib
pip3 install opencv-python

Si el comando final le pidió que instalara Xcode (para Mac), vaya a la App Store e instálelo. Esto puede tardar un poco ya que es bastante grande. Luego vuelva a escribir la última línea (pip3 install OpenCV-python) y presione enter.

Crear y ejecutar la aplicación que instalamos

1. Copie y pegue el siguiente código en un fragmento de código abierto en Sublime Text.

#code forked and tweaked from https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py
#to extend, just add more people into the known_people folder

import face_recognition
import cv2
import numpy as np
import os
import glob

# Get a reference to webcam #0 (the default one)
video_capture = cv2.VideoCapture(0)

#make array of sample pictures with encodings
known_face_encodings = []
known_face_names = []
dirname = os.path.dirname(__file__)
path = os.path.join(dirname, 'known_people/')

#make an array of all the saved jpg files' paths
list_of_files = [f for f in glob.glob(path+'*.jpg')]
#find number of known faces
number_files = len(list_of_files)

names = list_of_files.copy()

for i in range(number_files):
    globals()['image_{}'.format(i)] = face_recognition.load_image_file(list_of_files[i])
    globals()['image_encoding_{}'.format(i)] = face_recognition.face_encodings(globals()['image_{}'.format(i)])[0]
    known_face_encodings.append(globals()['image_encoding_{}'.format(i)])

    # Create array of known names
    names[i] = names[i].replace("known_people/", "")  
    known_face_names.append(names[i])

# Initialize some variables
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True

while True:
    # Grab a single frame of video
    ret, frame = video_capture.read()

    # Resize frame of video to 1/4 size for faster face recognition processing
    small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)

    # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
    rgb_small_frame = small_frame[:, :, ::-1]

    # Only process every other frame of video to save time
    if process_this_frame:
        # Find all the faces and face encodings in the current frame of video
        face_locations = face_recognition.face_locations(rgb_small_frame)
        face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations)

        face_names = []
        for face_encoding in face_encodings:
            # See if the face is a match for the known face(s)
            matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
            name = "Unknown"

            # # If a match was found in known_face_encodings, just use the first one.
            # if True in matches:
            #     first_match_index = matches.index(True)
            #     name = known_face_names[first_match_index]

            # Or instead, use the known face with the smallest distance to the new face
            face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)
            best_match_index = np.argmin(face_distances)
            if matches[best_match_index]:
                name = known_face_names[best_match_index]

            face_names.append(name)

    process_this_frame = not process_this_frame


    # Display the results
    for (top, right, bottom, left), name in zip(face_locations, face_names):
        # Scale back up face locations since the frame we detected in was scaled to 1/4 size
        top *= 4
        right *= 4
        bottom *= 4
        left *= 4

        # Draw a box around the face
        cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)

        # Draw a label with a name below the face
        cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
        font = cv2.FONT_HERSHEY_DUPLEX
        cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)

    # Display the resulting image
    cv2.imshow('Video', frame)

    # Hit 'q' on the keyboard to quit!
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release handle to the webcam
video_capture.release()
cv2.destroyAllWindows()

2. Guarde este archivo con el algoritmo escrito anteriormente como reconocimiento face.py en su sistema y luego cree una carpeta llamada personas conocidas (asegúrese de que también esté en la carpeta Escritorio).

3. Ahora podremos agregar fotografías de las personas que queremos identificar a la carpeta de personas conocidas guardando una imagen de su rostro. Asegúrese de que la persona en la fotografía esté mirando hacia adelante y sea la única en la imagen (recorte si es necesario). A cada archivo se le asigna el nombre de la persona tal y como queremos que aparezca en pantalla. En este escenario solo se utilizarán archivos.jpg.

4. Para ejecutar la aplicación, regrese a la Terminal (Mac) o al Símbolo del sistema (Windows), escriba lo siguiente y haga clic en Intro.

cd Desktop
python3 recognise_face.py

<---- if an error message appears try:----!>

python recognise_face.py


Pressing Ctrl + c with the Terminal window selected will exit the programme.

En resumen, el proceso de reconocimiento facial se puede dividir en cuatro pasos.

  1. Detecta cualquier rostro que aparezca en el marco.
  2. Para hacer una máscara, busque puntos precisos en la cara, como la punta de la nariz y las esquinas de cada ojo, como se explica en la Imagen 2: Distancia euclidiana. Luego, usando solo cambios que preserven la forma original, como rotación y zoom, reposicione esa máscara para que apunte hacia adelante.
  3. El proceso de codificación. Esta etapa implica encontrar las características esenciales de un rostro (a través de visión por computadora) que será similar en cualquier foto de la misma persona pero diferente en cualquier foto de otra persona.
cómo hacer software de reconocimiento facial en Python

Programas de reconocimiento facial en el escenario mundial

Bloomberg estima que el mercado mundial de reconocimiento facial tendrá un valor de 7.76 millones de dólares en 2022 (frente a 4.05 millones de dólares en 2017).

En este sentido, sería fascinante saber en qué parte del mundo la gente gana más dinero con el software de reconocimiento facial (aplicaciones, sitios web y otros programas). El siguiente gráfico proporciona una respuesta a la pregunta.

Demanda de software de reconocimiento facial año tras año.

Formas de identificar el rostro de una persona en el software de reconocimiento facial

  • El reconocimiento 2D es un enfoque popular para el reconocimiento facial en este momento. Se basa en la comparación y uso de imágenes bidimensionales.
  • Reconocimiento en tres dimensiones. El método se está volviendo cada vez más popular, a pesar de que sigue siendo significativamente inferior al anterior. Aprovecha la capacidad de reconstruir imágenes tridimensionales. El Face ID de Apple es uno de los escáneres 3D más conocidos.
  • En un entorno controlado, se realiza el reconocimiento facial. El modelo de reconocimiento es sencillo; presupone un fondo inmóvil y controlable. En esta situación, una aplicación de reconocimiento facial no tendrá problemas para separar elementos individuales (como los ojos, la nariz y la boca) y recrear el elemento completo (un rostro humano).
  • Reconocimiento facial basado en color. El software examina la imagen en busca de áreas de color de piel normal e intenta capturar, analizar e identificar segmentos faciales.
  • Reconocimiento facial basado en la textura de la piel. Se trata de fotografías de alta resolución que permiten una evaluación detallada de la textura de la piel, incluidas líneas, arrugas y poros.
  • Búsqueda de rostros basada en movimiento Tiene que ver con imágenes de vídeo que tienen un efecto de movimiento. El software debe buscar puntos de referencia específicos en esta situación, como ojos parpadeantes, cejas, nariz, frente o labios. El algoritmo intenta modelar e identificar el rostro tan pronto como se identifica cualquiera de estos elementos y lo compara con los de la base de datos.
  • Reconocimiento facial mediante imágenes térmicas. En los últimos años, las cámaras termográficas se han vuelto cada vez más populares para identificar rostros humanos. Además, el área está en constante evolución año tras año.

¿Cómo crear una aplicación móvil para reconocimiento facial?

La pregunta más importante es, sin duda, cómo crear software de reconocimiento facial en Python. ¿Qué recursos necesitarías para hacer realidad tu concepto?

Hay muchas opciones, describiremos las 3 más populares.

API nativas

La forma más sencilla de crear una aplicación de reconocimiento facial para Android o iOS es utilizar las API nativas de Apple y Google. Es económico, fácil de ejecutar y no requiere ningún costo ni esfuerzo adicional. Por supuesto, no habrá muchas funciones, pero quién sabe, tal vez las suficientes para hacer el trabajo.

Soluciones de terceros

Crear un software de reconocimiento facial es una solución de terceros fácil de usar y es la segunda alternativa. Y, digamos, la amplitud de las opciones de estas herramientas lo sorprenderá: muchas empresas tienen API que pueden usarse para crear una aplicación de detección de rostros. ¿Qué opinas de estos?

  • Una API de reconocimiento visual es una de las muchas ofertas de desarrollo de Amazon (que también incluyen una plataforma de compras y soluciones en la nube). Además, hay opciones disponibles tanto de pago como gratuitas.
  • La API Luxand.cloud permite a los desarrolladores crear aplicaciones que pueden evaluar el género, la edad, la condición emocional y más de las personas. BASIC, PRO y ULTRA son los tres paquetes de precios que ofrece la empresa.
  • FaceMark es una solución API sencilla y confiable que ofrece una gran cantidad de puntos de referencia para recrear todo el rostro y el perfil, además de facilidad de uso y una variedad de opciones de precios.

Cómo el aprendizaje profundo hace que el software de reconocimiento facial esté libre de errores

Uno de los enfoques más innovadores para mejorar la tecnología de reconocimiento facial es el aprendizaje profundo. Las incrustaciones de rostros se extraen de fotografías con rostros. Los rostros distintos tendrán diferentes incrustaciones faciales. Y el método más eficaz para lograrlo es entrenar una red neuronal profunda.

Sin embargo, a largo plazo, si el sistema de reconocimiento facial tiene características únicas, puede ser la mejor opción. Las siguientes son las consideraciones más importantes.

  • La selección correcta de la arquitectura CNN y la función de pérdida.
  • Optimización del tiempo de inferencia 
  • El poder de una cámara y otro hardware

Escrito por Ashok Kumar
Director ejecutivo, fundador y director de marketing de Make An App Like. Soy escritor en OutlookIndia.com, KhaleejTimes, DeccanHerald. Contáctame para publicar tu contenido. Mi Perfil

Deje un comentario

Translate »