Creación de un programa de reconocimiento facial utilizando OpenCV y Python

En este tutorial, aprenderás a crear un programa de reconocimiento facial utilizando OpenCV y Python. OpenCV es una biblioteca de visión por computadora de código abierto que se utiliza para procesar imágenes y videos. Python es un lenguaje de programación popular que se utiliza en aplicaciones de ciencia de datos, aprendizaje automático y visión por computadora.

El reconocimiento facial es una técnica de identificación biométrica que se utiliza para identificar personas en imágenes o videos. El reconocimiento facial se utiliza en aplicaciones de seguridad, como el desbloqueo de teléfonos móviles y la identificación de sospechosos en videos de vigilancia.

Requisitos previos

Antes de comenzar con este tutorial, asegúrate de tener lo siguiente:

  • Python 3 instalado en tu sistema.
  • OpenCV instalado en tu sistema.
  • Conocimientos básicos de programación en Python.

Paso 1: Importar bibliotecas

Lo primero que debemos hacer es importar las bibliotecas necesarias para nuestro programa. Abre tu editor de texto favorito y crea un nuevo archivo de Python. Luego, escribe el siguiente código:


import cv2
import numpy as np

En este código, estamos importando las bibliotecas OpenCV y NumPy. OpenCV se utilizará para procesar imágenes y videos, mientras que NumPy se utilizará para realizar operaciones matemáticas en matrices.

Paso 2: Cargar la imagen de entrenamiento

El siguiente paso es cargar la imagen de entrenamiento. En el reconocimiento facial, necesitamos una imagen de entrenamiento para que el programa pueda aprender a reconocer el rostro de una persona. Abre una imagen de una persona y guárdala en tu directorio de trabajo con el nombre «training_image.jpg». Luego, escribe el siguiente código:


training_image = cv2.imread('training_image.jpg')

En este código, estamos cargando la imagen de entrenamiento en la variable «training_image» utilizando la función imread de OpenCV.

Paso 3: Convertir la imagen a escala de grises

Después de cargar la imagen de entrenamiento, debemos convertirla a escala de grises. La razón de esto es que los algoritmos de reconocimiento facial funcionan mejor con imágenes en escala de grises. Escribe el siguiente código:


gray_image = cv2.cvtColor(training_image, cv2.COLOR_BGR2GRAY)

En este código, estamos convirtiendo la imagen de entrenamiento a escala de grises utilizando la función cvtColor de OpenCV.

Paso 4: Detectar caras en la imagen de entrenamiento

El siguiente paso es detectar caras en la imagen de entrenamiento. Para hacer esto, utilizaremos el algoritmo de detección de caras Haar de OpenCV. Escribe el siguiente código:


face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

En este código, estamos creando un objeto de detección de caras utilizando el archivo XML «haarcascade_frontalface_default.xml» y detectando las caras en la imagen de entrenamiento utilizando la función detectMultiScale de OpenCV. La función detectMultiScale devuelve una lista de caras detectadas en la imagen.

Paso 5: Mostrar las caras detectadas en la imagen de entrenamiento

Para verificar que las caras se han detectado correctamente, podemos dibujar un rectángulo alrededor de cada cara en la imagen de entrenamiento. Escribe el siguiente código:


for (x, y, w, h) in faces:
    cv2.rectangle(training_image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Training Image', training_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

En este código, estamos utilizando un bucle for para recorrer cada cara detectada en la imagen de entrenamiento y dibujar un rectángulo alrededor de ella utilizando la función rectangle de OpenCV. Luego, estamos mostrando la imagen de entrenamiento con los rectángulos dibujados utilizando la función imshow de OpenCV.

Paso 6: Capturar una imagen de prueba

El siguiente paso es capturar una imagen de prueba. Esta imagen se utilizará para probar si el programa puede reconocer la cara de la persona en la imagen de entrenamiento. Abre la cámara de tu ordenador y captura una imagen de tu rostro. Luego, guárdala en tu directorio de trabajo con el nombre «test_image.jpg». Escribe el siguiente código:


test_image = cv2.imread('test_image.jpg')

En este código, estamos cargando la imagen de prueba en la variable «test_image» utilizando la función imread de OpenCV.

Paso 7: Convertir la imagen de prueba a escala de grises

Después de cargar la imagen de prueba, debemos convertirla a escala de grises. Escribe el siguiente código:


gray_test_image = cv2.cvtColor(test_image, cv2.COLOR_BGR2GRAY)

En este código, estamos convirtiendo la imagen de prueba a escala de grises utilizando la función cvtColor de OpenCV.

Paso 8: Detectar caras en la imagen de prueba

El siguiente paso es detectar caras en la imagen de prueba. Escribe el siguiente código:


faces = face_cascade.detectMultiScale(gray_test_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

En este código, estamos detectando las caras en la imagen de prueba utilizando la función detectMultiScale de OpenCV.

Paso 9: Mostrar las caras detectadas en la imagen de prueba

Para verificar que las caras se han detectado correctamente en la imagen de prueba, podemos dibujar un rectángulo alrededor de cada cara. Escribe el siguiente código:


for (x, y, w, h) in faces:
    cv2.rectangle(test_image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Test Image', test_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

En este código, estamos utilizando un bucle for para recorrer cada cara detectada en la imagen de prueba y dibujar un rectángulo alrededor de ella utilizando la función rectangle de OpenCV. Luego, estamos mostrando la imagen de prueba con los rectángulos dibujados utilizando la función imshow de OpenCV.

Paso 10: Reconocer la cara en la imagen de prueba

Finalmente, llegamos al paso más importante: reconocer la cara en la imagen de prueba. Para hacer esto, utilizaremos la función predict de OpenCV. Escribe el siguiente código:


for (x, y, w, h) in faces:
    roi_gray = gray_test_image[y:y+h, x:x+w]
    roi_color = test_image[y:y+h, x:x+w]
    id, confidence = recognizer.predict(roi_gray)
    if confidence < 100:
        label = subjects[id]
        cv2.putText(test_image, label, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    else:
        cv2.putText(test_image, "Desconocido", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
    cv2.rectangle(test_image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Test Image', test_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

En este código, estamos utilizando un bucle for para recorrer cada cara detectada en la imagen de prueba. Luego, estamos extray

Creación de un programa de reconocimiento facial utilizando OpenCV y Python

Introducción

En este tutorial, aprenderás a crear un programa de reconocimiento facial utilizando OpenCV y Python. OpenCV es una biblioteca de visión por computadora de código abierto que se utiliza para procesar imágenes y videos. Python es un lenguaje de programación popular que se utiliza en aplicaciones de ciencia de datos, aprendizaje automático y visión por computadora.

El reconocimiento facial es una técnica de identificación biométrica que se utiliza para identificar personas en imágenes o videos. El reconocimiento facial se utiliza en aplicaciones de seguridad, como el desbloqueo de teléfonos móviles y la identificación de sospechosos en videos de vigilancia.

Requisitos previos

Antes de comenzar con este tutorial, asegúrate de tener lo siguiente:

  • Python 3 instalado en tu sistema.
  • OpenCV instalado en tu sistema.
  • Conocimientos básicos de programación en Python.

Paso 1: Importar bibliotecas

Lo primero que debemos hacer es importar las bibliotecas necesarias para nuestro programa. Abre tu editor de texto favorito y crea un nuevo archivo de Python. Luego, escribe el siguiente código:


import cv2
import numpy as np

En este código, estamos importando las bibliotecas OpenCV y NumPy. OpenCV se utilizará para procesar imágenes y videos, mientras que NumPy se utilizará para realizar operaciones matemáticas en matrices.

Paso 2: Cargar la imagen de entrenamiento

El siguiente paso es cargar la imagen de entrenamiento. En el reconocimiento facial, necesitamos una imagen de entrenamiento para que el programa pueda aprender a reconocer el rostro de una persona. Abre una imagen de una persona y guárdala en tu directorio de trabajo con el nombre «training_image.jpg». Luego, escribe el siguiente código:


training_image = cv2.imread('training_image.jpg')

En este código, estamos cargando la imagen de entrenamiento en la variable «training_image» utilizando la función imread de OpenCV.

Paso 3: Convertir la imagen a escala de grises

Después de cargar la imagen de entrenamiento, debemos convertirla a escala de grises. La razón de esto es que los algoritmos de reconocimiento facial funcionan mejor con imágenes en escala de grises. Escribe el siguiente código:


gray_image = cv2.cvtColor(training_image, cv2.COLOR_BGR2GRAY)

En este código, estamos convirtiendo la imagen de entrenamiento a escala de grises utilizando la función cvtColor de OpenCV.

Paso 4: Detectar caras en la imagen de entrenamiento

El siguiente paso es detectar caras en la imagen de entrenamiento. Para hacer esto, utilizaremos el algoritmo de detección de caras Haar de OpenCV. Escribe el siguiente código:


face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

En este código, estamos creando un objeto de detección de caras utilizando el archivo XML «haarcascade_frontalface_default.xml» y detectando las caras en la imagen de entrenamiento utilizando la función detectMultiScale de OpenCV. La función detectMultiScale devuelve una lista de caras detectadas en la imagen.

Paso 5: Mostrar las caras detectadas en la imagen de entrenamiento

Para verificar que las caras se han detectado correctamente, podemos dibujar un rectángulo alrededor de cada cara en la imagen de entrenamiento. Escribe el siguiente código:


for (x, y, w, h) in faces:
    cv2.rectangle(training_image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Training Image', training_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

En este código, estamos utilizando un bucle for para recorrer cada cara detectada en la imagen de entrenamiento y dibujar un rectángulo alrededor de ella utilizando la función rectangle de OpenCV. Luego, estamos mostrando la imagen de entrenamiento con los rectángulos dibujados utilizando la función imshow de OpenCV.

Paso 6: Capturar una imagen de prueba

El siguiente paso es capturar una imagen de prueba. Esta imagen se utilizará para probar si el programa puede reconocer la cara de la persona en la imagen de entrenamiento. Abre la cámara de tu ordenador y captura una imagen de tu rostro. Luego, guárdala en tu directorio de trabajo con el nombre «test_image.jpg». Escribe el siguiente código:


test_image = cv2.imread('test_image.jpg')

En este código, estamos cargando la imagen de prueba en la variable «test_image» utilizando la función imread de OpenCV.

Paso 7: Convertir la imagen de prueba a escala de grises

Después de cargar la imagen de prueba, debemos convertirla a escala de grises. Escribe el siguiente código:


gray_test_image = cv2.cvtColor(test_image, cv2.COLOR_BGR2GRAY)

En este código, estamos convirtiendo la imagen de prueba a escala de grises utilizando la función cvtColor de OpenCV.

Paso 8: Detectar caras en la imagen de prueba

El siguiente paso es detectar caras en la imagen de prueba. Escribe el siguiente código:


faces = face_cascade.detectMultiScale(gray_test_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

En este código, estamos detectando las caras en la imagen de prueba utilizando la función detectMultiScale de OpenCV.

Paso 9: Mostrar las caras detectadas en la imagen de prueba

Para verificar que las caras se han detectado correctamente en la imagen de prueba, podemos dibujar un rectángulo alrededor de cada cara. Escribe el siguiente código:


for (x, y, w, h) in faces:
    cv2.rectangle(test_image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Test Image', test_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

En este código, estamos utilizando un bucle for para recorrer cada cara detectada en la imagen de prueba y dibujar un rectángulo alrededor de ella utilizando la función rectangle de OpenCV. Luego, estamos mostrando la imagen de prueba con los rectángulos dibujados utilizando la función imshow de OpenCV.

Paso 10: Reconocer la cara en la imagen de prueba

Finalmente, llegamos al paso más importante: reconocer la cara en la imagen de prueba. Para hacer esto, utilizaremos la función predict de OpenCV. Escribe el siguiente código:


for (x, y, w, h) in faces:
    roi_gray = gray_test_image[y:y+h, x:x+w]
    roi_color = test_image[y:y+h, x:x+w]
    id, confidence = recognizer.predict(roi_gray)
    if confidence < 100:
        label = subjects[id]
        cv2.putText(test_image, label, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    else:
        cv2.putText(test_image, "Desconocido", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
    cv2.rectangle(test_image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Test Image', test_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

En este código, estamos utilizando un bucle for para recorrer cada cara detectada en la imagen de prueba. Luego, estamos extrayendo la región de interés (ROI) de cada cara en la imagen de prueba utilizando las coordenadas x, y, ancho y alto obtenidos en el paso anterior. Después, estamos utilizando la función predict de OpenCV para predecir la identificación de la cara en la ROI. Si la confianza de la predicción es menor a 100, estamos obteniendo el nombre de la persona correspondiente a la identificación y lo mostramos en la imagen de prueba utilizando la función putText de OpenCV.

También estamos dibujando un rectángulo alrededor de la cara y mostrando la imagen de prueba con las caras detectadas, el nombre de la persona (si es reconocida) y los rectángulos dibujados.

 

Buenos amigos, hemos aprendido a crear un programa de reconocimiento facial utilizando OpenCV y Python. Hemos cubierto los pasos necesarios para cargar una imagen de entrenamiento, detectar caras en la imagen de entrenamiento, capturar una imagen de prueba, detectar caras en la imagen de prueba, reconocer la cara en la imagen de prueba y mostrar el resultado final en la imagen de prueba. Esperamos que este tutorial haya sido útil y te haya ayudado a comprender cómo funciona el reconocimiento facial utilizando OpenCV y Python.

No te pierdas los últimos artículos:

Web Scraping con Python y BeautifulSoup para Principiantes

Bienvenido a esta guía sobre Web Scraping con Python y BeautifulSoup, diseñada especialmente para principiantes. Si estás buscando aprender a extraer datos de sitios web de manera eficiente, seguro que ...

Curso de Python Básico Gratis

Módulo 1: Introducción a Python Nuestra meta principal es que, al final de este curso, tengas una sólida comprensión de los fundamentos de Python y estés listo para crear tus ...

Sistemas Expertos: ¿Qué son y para qué sirven?

Los sistemas expertos representan una rama fascinante de la inteligencia artificial, diseñada para emular la toma de decisiones de un humano experto en un campo particular. Estas herramientas avanzadas combinan ...

La Historia de la Inteligencia Artificial contada en Años

¿Cómo comenzó todo? Echemos un ojo a la historia de la IA a lo largo del tiempo. Desde 1950 hasta 2024. El artículo es largo, usa la tabla de contenidos ...

¿Qué es el meta-aprendizaje?

El mundo de la Inteligencia Artificial (IA) está en constante evolución, y una de las áreas más intrigantes y prometedoras es el metaaprendizaje. Pero, ¿qué es exactamente el metaaprendizaje y ...
Cargando...