Categorías
Python

Prueba asíncrono con Django y pyVows

 

Tabla de Contenidos

  • ¿Qué es la detección de la cara?
  • ¿Cómo funcionan los equipos de “ver” imágenes?
  • Cuáles son las características? Objeto
  • Preparación
  • Viola-Jones Detección FrameworkHaar-Como FeaturesIntegral ImagesAdaBoostCascading ClassifiersUsing una Viola-Jones clasificador
  • Haar características similares
  • Imágenes Integral
  • AdaBoost
  • en cascada clasificadores
  • El uso de un Viola-Jones clasificador
  • Lectura adicional Características
  • Conclusión
  • Haar-Como
  • Imágenes Integral
  • AdaBoost
  • en cascada clasificadores
  • el uso de un Viola-Jones clasificador

Mira ahora Este tutorial tiene un vídeo relacionado curso creado por el equipo del real Python. Mira que junto con el tutorial escrito para profundizar su comprensión: la visión tradicional de detección de rostros Con Python

informática es un campo emocionante y creciente. Hay un montón de problemas interesantes para resolver! Uno de ellos es la detección de caras: la capacidad de un equipo para reconocer que una fotografía contiene un rostro humano, y le dirá a la que pertenece. En este artículo, usted aprenderá acerca de la detección de rostros con Python.

para detectar cualquier objeto en una imagen, es necesario entender cómo se representan las imágenes dentro de una computadora, y cómo ese objeto se diferencia visualmente de cualquier otro objeto.

Una vez hecho esto, el proceso de escaneo de una imagen y en busca de esas señales visuales necesita ser automatizado y optimizado. Todos estos pasos se unen para formar un algoritmo de visión por ordenador rápido y fiable.

En este tutorial usted aprenderá:

  • ¿Qué es la detección de rostros
  • cómo los ordenadores entienden características en imágenes
  • Cómo analizar rápidamente muchas características diferentes para llegar a una decisión
  • Cómo utilizar una solución mínima para Python la detección de caras humanas en imágenes Bono

gratuito: Haga clic aquí para obtener el pitón de detección de la cara y OpenCV Ejemplos Mini-Guía que muestra ejemplos de códigos de prácticas de las técnicas de visión por ordenador Python en el mundo real.

¿Qué es la detección de la cara?

Detección de la cara es un tipo de tecnología de visión por ordenador que es capaz de identificar las caras de las personas dentro de las imágenes digitales. Esto es muy fácil para los seres humanos, pero los ordenadores necesitan instrucciones precisas. Las imágenes pueden contener muchos objetos que no son caras humanas, como edificios, vehículos, animales, y así sucesivamente.

Es distinto de otras tecnologías de visión por ordenador que involucran caras humanas, como el reconocimiento facial, análisis y seguimiento.

reconocimiento facial implica la identificación de la cara en la imagen como perteneciente a persona X y no persona Y . A menudo se utiliza para fines biométricos, como el desbloqueo de su teléfono inteligente. El análisis facial

trata de entender algo acerca de las personas de sus rasgos faciales, como la determinación de su edad, sexo, o la emoción que se está mostrando.

seguimiento facial es sobre todo presente en el análisis de video y trata de seguir una cara y sus características (ojos, nariz y labios) de cuadro a cuadro. Las aplicaciones más populares son diferentes filtros disponibles en aplicaciones móviles como Snapchat.

Todos estos problemas tienen diferentes soluciones tecnológicas. Este tutorial se centrará en una solución tradicional para el primer reto: la detección de rostros.

¿Cómo funcionan los equipos de “ver” imágenes?

El elemento más pequeño de una imagen se denomina píxel , o un elemento de imagen. Se trata básicamente de un punto en la imagen. Una imagen contiene múltiples píxeles s dispuestas en filas y columnas.

Es frecuente encontrar que el número de filas y columnas, expresado en la resolución de la imagen . Por ejemplo, un televisor de alta definición Ultra tiene la resolución de 3840×2160, lo que significa que es 3840 píxeles de ancho y 2160 píxeles de alto.

Pero el equipo no se entienden píxeles como puntos de color. Sólo se entiende números. Para convertir los colores a los números, el equipo utiliza varios modelos de color. imágenes en color

En, los píxeles se representan a menudo en el modelo de color R G B . R G B significa R ed G reen B Lue. Cada pixel es una mezcla de los tres colores. R G B es grande en el modelado de todos los colores seres humanos perciben mediante la combinación de varias cantidades de rojo, verde y azul.

Desde un ordenador sólo entienden números, cada píxel está representado por tres números, que corresponden a las cantidades de rojo, verde y azul presente en ese píxel. Usted puede aprender más acerca de los espacios de color en la segmentación de imágenes Uso de espacios de color en OpenCV + Python.

en escala de grises imágenes (blanco y negro), cada píxel es un solo número, que representa la cantidad de luz, o la intensidad, que lleva. En muchas aplicaciones, la gama de intensidades es de 0 (negro) a 255 (blanco). Todo entre 0 y 255 es varios tonos de gris.

Si cada píxel de escala de grises es un número, una imagen no es más que una matriz (o tabla) de números: imágenes en color

En, hay tres de tales matrices que representan los canales rojo, verde y azul.

Cuáles son las características?

Una característica es una pieza de información en una imagen que es relevante para la solución de un problema determinado. Podría ser algo tan simple como un único valor de píxel, o más compleja, como bordes, esquinas y formas. Se pueden combinar múltiples característica simple s en una compleja función .

aplicación de determinadas operaciones a una imagen produce información que podría considerarse características también. visión por ordenador y procesamiento de imágenes tienen una gran colección de características útiles y cuentan con las operaciones de extracción.

Básicamente, cualquier propiedad inherente o que se derivan de una imagen podría ser utilizado como una característica para resolver tareas.

Preparación

Para ejecutar los ejemplos de código, es necesario configurar un entorno con todas las librerías necesarias instaladas. La forma más sencilla es utilizar Conda.

Tendrá tres bibliotecas:

Para crear un ambiente en el Conda, ejecute estos comandos en la shell:

$ conda create --name face-detection python=3.7
$ source activate face-detection
(face-detection)$ conda install scikit-learn
(face-detection)$ conda install -c conda-forge scikit-image
(face-detection)$ conda install -c menpo opencv3

Si usted está teniendo problemas para instalar OpenCV correctamente y que dispongan de los ejemplos, trate de consultar a su Guía de instalación o el artículo sobre OpenCV tutoriales, recursos y guías.

Ahora usted tiene todos los paquetes necesarios para la práctica de lo que se aprende en este tutorial.

Viola-Jones objeto Detección Marco

Este algoritmo es el nombre de dos investigadores de visión por ordenador que propusieron el método en 2001: Pablo Viola y Michael Jones.

Se desarrolló un marco de detección de objetos en general que era capaz de proporcionar tasas de detección de objetos competitivas en tiempo real. Se puede utilizar para resolver una variedad de problemas de detección, pero la motivación principal proviene de detección de rostros. El algoritmo de

Viola-Jones tiene 4 etapas principales, y usted va a aprender más acerca de cada uno de ellos en las secciones siguientes: Dado

una imagen, la apariencia del algoritmo en muchas subregiones y trata de menores para encontrar una cara mediante la búsqueda de Las características específicas en cada subregión. Se tiene que comprobar muchas posiciones y escalas diferentes, ya que una imagen puede contener muchas caras de varios tamaños. Viola y Jones utilizan Haar-como características para detectar las caras.

Haar características similares

Todos los rostros humanos comparten algunas similitudes. Si nos fijamos en una fotografía que muestra el rostro de una persona, se ve, por ejemplo, que la región del ojo es más oscuro que el puente de la nariz. Las mejillas también son más brillantes que la región de los ojos. Podemos utilizar estas propiedades para ayudarnos a entender si una imagen contiene un rostro humano.

Una forma sencilla de averiguar qué región es clara o más oscura es para resumir los valores de los píxeles de las dos regiones y compararlas. La suma de los valores de los píxeles en la región más oscura será menor que la suma de los píxeles en la región más ligero. Esto se puede lograr usando las características Haar-como.

A Haar-como característica está representada mediante la adopción de una parte rectangular de una imagen y dividiendo ese rectángulo en múltiples partes. A menudo se visualizan como rectángulos adyacentes en blanco y negro:

En esta imagen, se puede ver 4 tipos básicos de Haar-como características:

El primero dos ejemplos son útiles para detectar bordes. El tercero detecta líneas, y el cuarto es bueno para encontrar características diagonales. Pero, como trabajan?

El valor de la característica se calcula como un solo número: la suma de los valores de píxel en el área de color negro menos la suma de valores de píxel en el área de blanco. Para las áreas uniformes como una pared, esta cifra sería cercana a cero y no le dará ninguna información significativa.

Para ser útil, un Haar-como las necesidades de características para darle un gran número, lo que significa que las áreas de los rectángulos blancos y negros son muy diferentes. Hay características conocidas que realizan muy bien para detectar las caras humanos:

En este ejemplo, la región del ojo es más oscuro que la región por debajo. Puede utilizar esta propiedad para encontrar áreas de una imagen dan una respuesta fuerte (grande) para una característica concreta:

Este ejemplo da una respuesta fuerte cuando se aplica al puente de la nariz. Se pueden combinar muchas de estas características para entender si una región de imagen contiene una cara humana.

Como se ha mencionado, el algoritmo de Viola-Jones calcula una gran cantidad de estas características en muchas subregiones de una imagen. Esto rápidamente se convierte en computacionalmente caro: se tarda mucho tiempo el uso de los limitados recursos de un ordenador.

Para hacer frente a este problema, Viola y Jones utilizó imágenes integrales.

Imágenes Integral imagen integral (también conocida como una tabla de área sumado)

Una es el nombre de tanto una estructura de datos y un algoritmo utilizado para obtener esta estructura de datos. Se utiliza como una forma rápida y eficiente para calcular la suma de los valores de los píxeles de una imagen o de una parte rectangular de una imagen.

En una imagen integral, el valor de cada punto es la suma de todos los píxeles por encima y a la izquierda, incluyendo el píxel objetivo:

La imagen integral se puede calcular en un solo pase la imagen original. Esto reduce la suma de las intensidades de los píxeles dentro de un rectángulo en sólo tres operaciones con cuatro números, independientemente del tamaño rectángulo:

La suma de los píxeles en el rectángulo A B C D se puede derivar de los valores de puntos A , B , C , y D , utilizando la fórmula D B C + A . Es más fácil entender esta fórmula visual:

Se dará cuenta de que restando ambos medios B y C que la zona definida con Un se ha restado dos veces, por lo que hay que añadir de nuevo otra vez.

Ahora usted tiene una forma sencilla de calcular la diferencia entre las sumas de los valores de píxel de dos rectángulos. Esto es perfecto para las características Haar-como!

Pero, ¿cómo decidir cuál de estas características y en qué tamaños de usar para encontrar caras en imágenes? Esto se consigue mediante un algoritmo de aprendizaje automático llamado impulsar . Específicamente, usted aprenderá acerca de AdaBoost, abreviatura de adaptativa Impulsar .

AdaBoost

impulsar se basa en la siguiente pregunta: “¿Puede un conjunto de debilidad de los alumnos crear una sola fuerte alumno ?” Un alumno débil (o clasificador débil) se define como un clasificador que es sólo ligeramente mejor que adivinar al azar. detección de rostros

En, esto significa que un alumno débil puede clasificar una subregión de una imagen como cara o no cara sólo ligeramente mejor que adivinar al azar. Un fuerte aprendiz es sustancialmente mejor en recoger las caras de los no-caras.

El poder de impulsar proviene de la combinación muchos (miles) de clasificadores débiles en un solo clasificador fuerte. En el algoritmo de Viola-Jones, cada Haar-como característica representa una débil alumno. Para decidir el tipo y el tamaño de una característica que entra en el clasificador final, cheques AdaBoost el rendimiento de todos los clasificadores que se proporciona a la misma.

Para calcular el rendimiento de un clasificador, a evaluar en todas las subregiones de todas las imágenes utilizadas para el entrenamiento. Algunas subregiones producirán una fuerte respuesta en el clasificador. Los que serán clasificados como positivos, es decir, el clasificador piensa que contiene una cara humana.

subregiones que no producen una respuesta fuerte no contienen un rostro humano, en opinión clasificadores. Ellos serán clasificados como negativos.

Los clasificadores que obtuvieron buenos resultados se dan mayor importancia o el peso . El resultado final es un clasificador fuerte, también llamado impulsado clasificador , que contiene los mejores clasificadores débiles escénicas.

El algoritmo adaptativo se llama porque, a medida que avanza de formación, se da más énfasis en aquellas imágenes que fueron clasificadas incorrectamente. Los clasificadores débiles que funcionan mejor en estos ejemplos duros se ponderan más fuertemente que otros. La mirada de

Veamos un ejemplo:

Imagine que se supone que para clasificar los círculos azules y naranjas en la siguiente imagen utilizando un conjunto de clasificadores débiles:

El primer clasificador utiliza capturas de algunos de los círculos azules pero no alcanza la otros. En la siguiente iteración, le da más importancia a los ejemplos perdidas:

El segundo clasificador que logra clasificar correctamente los ejemplos obtendrá un mayor peso. Recuerde, si una débil realiza clasificador mejores, que obtendrán un mayor peso y lo más probable lo tanto mayores que deben incluirse en los clasificadores finales, fuertes:

Ahora que ha logrado la captura de todos los círculos azules, pero incorrectamente capturado algunas de las círculos de color naranja. Estos círculos de color naranja incorrectamente clasificadas se les da más importancia en la siguiente iteración:

El clasificador final de las arregla para capturar esos círculos de color naranja correctamente:

Para crear una fuerte clasificador, se combinan los tres clasificadores para clasificar correctamente todos los ejemplos:

Usando una variación de este proceso, Viola y Jones han evaluado cientos de miles de clasificadores que se especializan en la búsqueda de caras en las imágenes. Pero sería computacionalmente caro de mantener todos estos clasificadores en todas las regiones en cada imagen, por lo que crearon algo que se llama un clasificador cascada .

en cascada clasificadores

La definición de una cascada es una serie de cascadas que vienen uno tras otro. Un concepto similar se utiliza en informática para resolver un problema complejo con unidades simples. El problema aquí es reducir el número de cálculos para cada imagen.

Para resolverlo, Viola y Jones volvieron su fuerte clasificador (que consiste en miles de clasificadores débiles) en una cascada, donde cada clasificador débil representa una etapa. El trabajo de la cascada es que no caras y evitar el descarte rápidamente perder un tiempo precioso y cálculos.

Cuando una subregión imagen entra en la cascada, se evalúa por la primera etapa. Si esa etapa evalúa la subregión como positivo, lo que significa que se cree que es una cara, la salida de la etapa es tal vez .

Si una subregión consigue un quizá , se envía a la siguiente etapa de la cascada. Si eso le da a uno una evaluación positiva, entonces eso es otra quizá , y la imagen se envía a la tercera fase:

Este proceso se repite hasta que la imagen pasa a través de todas las etapas de la cascada. Si todos los clasificadores aprueban la imagen, que finalmente se clasifica como un rostro humano y se presenta al usuario como una detección.

Si, sin embargo, la primera etapa da una evaluación negativa, entonces la imagen se descarta inmediatamente como no contiene una cara humana. Si se pasa la primera etapa, pero falla la segunda etapa, se descarta también. Básicamente, la imagen puede quedar descartado en cualquier etapa del clasificador:

Esto está diseñado para que los que no son caras quedan descartados muy rápidamente, lo que ahorra una gran cantidad de tiempo y recursos computacionales. Puesto que cada clasificador representa una característica de un rostro humano, una detección positiva básicamente dice: “Sí, esta subregión contiene todas las características de un rostro humano.” Pero tan pronto como una característica que falta, se rechaza toda la subregión.

Para lograr esto de manera efectiva, es importante poner sus mejores clasificadores realizan temprano en la cascada. En el algoritmo de Viola-Jones, los ojos y los clasificadores de puente nasal son ejemplos de mejor desempeño clasificadores débiles.

Ahora que usted entiende cómo funciona el algoritmo, es el momento de usarlo para detectar las caras con Python.

El uso de un Viola-Jones clasificador de formación

un clasificador Viola-Jones desde cero puede llevar mucho tiempo. Afortunadamente, un pre-formados Viola-Jones clasificador viene fuera de la caja con OpenCV! Que va a utilizar que uno vea el algoritmo en acción.

En primer lugar, encontrar y descargar una imagen que le gustaría explorar en busca de la presencia de rostros humanos. He aquí un ejemplo:

importación OpenCV y cargar la imagen en la memoria:

import cv2 as cv

# Read image from your local file system
original_image = cv.imread('patho/your-image.jpg')

# Convert color image to grayscale for Viola-Jones
grayscale_image = cv.cvtColor(original_image, cv.COLOR_BGR2GRAY)

A continuación, debe cargar el clasificador Viola-Jones. Si ha instalado OpenCV de la fuente, que estará en la carpeta donde se ha instalado la biblioteca OpenCV.

Dependiendo de la versión, el camino exacto puede variar, pero el nombre de la carpeta será haarcascades, y contendrá varios archivos. El que usted necesita se llama haarcascade_frontalface_alt.xml.

Si por alguna razón, su instalación de OpenCV no consiguió el clasificador pre-formados, se puede obtener de la cesión temporal OpenCV GitHub:

# Load the classifier and create a cascade object for face detection
face_cascade = cv.CascadeClassifier('patho/haarcascade_frontalface_alt.xml')

El objeto face_cascade tiene un método de detección de MULTIESCALA (), que recibe una imagen como un argumento y se ejecuta la cascada clasificador sobre la imagen. El término MULTIESCALA indica que las miradas del algoritmo en las subregiones de la imagen en múltiples escalas, para detectar las caras de diferentes tamaños:

detected_faces = face_cascade.detectMultiScale(grayscale_image)

Los detected_faces variables contiene todas las posibles detecciones de la imagen de destino para. Para visualizar las detecciones, es necesario iterar sobre todas las detecciones y dibujar rectángulos sobre las caras detectadas. rectángulo de

OpenCV () dibuja rectángulos sobre las imágenes, y necesita saber las coordenadas de píxel de la esquina superior izquierda e inferior derecha. Las coordenadas indican la fila y columna de píxeles de la imagen.

Por suerte, las detecciones se guardan como coordenadas en píxeles. Cada detección se define por sus coordenadas superior izquierda de esquina y la anchura y altura del rectángulo que abarca la cara detectada.

Adición de la anchura de la fila y la altura de la columna que le dará a la esquina inferior derecha de la imagen: rectángulo

for (column, row, width, height) in detected_faces:
cv.rectangle(
original_image,
(column, row),
(column + width, row + height),
(0, 255, 0),
2
)

() acepta los siguientes argumentos:

  • La imagen original
  • Las coordenadas de las láminas superior punto izquierdo de la detección
  • las coordenadas del punto de la detección
  • el color del rectángulo (una tupla que define la cantidad de rojo, verde y azul (0-255))
  • el espesor de la parte inferior derecha las líneas del rectángulo

Por último, es necesario para mostrar la imagen:

cv.imshow('Image', original_image)
cv.waitKey(0)
cv.destroyAllWindows()

imshow () muestra la imagen. WAITKEY () espera a una pulsación de tecla. De lo contrario, imshow () podría mostrar la imagen e inmediatamente cerrar la ventana. Al pasar 0 como el argumento le dice que espere indefinidamente. Por último, destroyAllWindows () cierra la ventana cuando se pulsa una tecla.

Aquí está el resultado:

Eso es todo! Ahora tiene un detector de caras listos para usar en Python.

Si realmente quiere entrenar el clasificador mismo, scikit-imagen ofrece un tutorial con el código que acompaña en su página web.

Lectura adicional

La Viola-Jones algoritmo fue un logro increíble. A pesar de que todavía se realiza grande para muchos casos de uso, que es cerca de 20 años de edad. Existen otros algoritmos, y utilizan diferentes características

Uno usos de ejemplo Support Vector Machines (SVM) y características llamadas histogramas de gradientes orientadas (HOG). Un ejemplo se puede encontrar en el Manual de Ciencias de datos Python.

mayoría de los métodos actuales del estado de la técnica para la detección de rostros y el uso del reconocimiento de aprendizaje profundo, que vamos a cubrir en un artículo de seguimiento.

Por el estado de la técnica de investigación de la visión por ordenador, echar un vistazo a los artículos científicos recientes sobre la Visión por Computador de arXiv y reconocimiento de patrones.

Si usted está interesado en el aprendizaje de máquina, pero desea cambiar a algo distinto de la visión por ordenador, echa un vistazo a texto práctico de clasificación con Python y Keras.

Conclusión

Buen trabajo! Que ahora son capaces de encontrar caras en las imágenes.

En este tutorial, han aprendido cómo representar las regiones en una imagen con Haar-como características. Estas características se pueden calcular muy rápidamente usando imágenes integrales.

Ha aprendido cómo AdaBoost encuentra la mejor realización de Haar características similares entre miles de funciones y vueltas a disposición en una serie de clasificadores débiles.

Por último, ha aprendido cómo crear una cascada de clasificadores débiles que forma rápida y fiable pueden distinguir las caras de los no caras.

Estos pasos ilustran muchos elementos importantes de la visión por ordenador:

  • Búsqueda de características útiles
  • ellos combinación para resolver problemas complejos
  • de equilibrio entre el rendimiento y la gestión de los recursos computacionales

Estas ideas se aplican a la detección de objetos en general y le ayudará a resolver muchos desafíos del mundo real. ¡Buena suerte!

Mira ahora Este tutorial tiene un vídeo relacionado curso creado por el equipo del Real Python. Mira que junto con el tutorial escrito para profundizar su comprensión: tradicional cara con la detección del pitón

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *