Blog

DETECCIÓN DE PERSONAS / INTELIGENCIA ARTIFICAL – OpenCV (HOG + SVM)

La forma actual de confeccionar y diseñar un plan de seguridad de diferentes áreas, tales como lugares públicos/privados, actualmente están sufriendo una importante transformación debido a la evolución de las tecnologías de visión artificial a través de sistemas de imagen en vivo.

Hoy vamos a revisar una técnica de visión por computadora la cual nos permitirá acércanos a ciertas funciones de detección de analítica inteligente y que nos permitirá crear ciertos modelos automatizados y personalizados.

Vamos a verlo en detalle explicando el fondo e incluso anotando ideas de programación que permitirían a un usuario con conocimientos crear un modelo sencillo basado en visión artificial para la detección de rostros y peatones.

En primer lugar os adjunto un vídeo del objetivo perseguido:

Ok vamos a allá !!

En general, los sistemas de seguridad se componen de dispositivos de hardware y la interacción de personas físicas, que los controlan, supervisan y actúan ante alguna potencial amenaza.

En particular, los sistemas de vigilancia a través de cámaras de vídeo (CCTV), son útiles para detectar actividades criminales.

Una rama importante de investigación en el área de visión por computadora, que ha ganado gran importancia en los últimos años, actualmente en auge, es el entendimiento e interpretación de la actividad humana en streams de video en vivo, con el objetivo de poder extraer información y crear modelos personalizados.

El objetivo, de la detección de movimiento inteligente, es detectar los objetos en movimiento de un modo eficaz y temprano de modo nos permita poder activar en función de la amenaza los procedimientos de seguridad asociados. La detección de un objeto puede contribuir al siguiente paso, que es el reconocimiento de dichos objetos.

En todo caso hay que poder diferenciar conceptos asociados a la eficacia de detección de cara minimizar los posible falsas alarmas. Un problema que presentan por ejemplo los sistemas mas básicos de detección de movimiento es que en sueler estar basados en técnicas de sustracción de fondo y ratios porcentuales de diferencia entre cuadros.

Estos algoritmos son en general muy sensibles a los cambios del entorno, tales como la luminosidad o proyección de sombras en el campo visual de la cámara. Esto produce que muchas veces se detecten “falsos positivos”, es decir, detectar un movimiento cuando en realidad no lo hay.

En la técnica de sustracción de fondo se utiliza la diferencia entre el cuadro actual y el cuadro que representa el fondo de la imagen, para detectar objetos en movimiento.

“El fondo de cualquier stream de video es principalmente estático y no sufre cambios en cuadros consecutivos. Por ende, si se puede modelar el fondo de la imagen, se podrán detectar cambios sustanciales cuando estos se produzcan en el video”.

En este método, es necesario mantener un modelo que represente el fondo de la imagen. Un modelo del fondo podría obtenerse por ejemplo, de la imagen promedio en un cierto periodo de entrenamiento. Los objetos en movimiento son fáciles de detectar mediante esta técnica, pero el modelo del fondo debe ser actualizado regularmente. En su versión más simple, esta técnica es sencilla de implementar pero tiene como hemos comentado la desventaja de ser muy sensible a los cambios generados por el entorno, cambios de luz, reflejos,etc…haciendo difícil aislar las interferencias del movimiento real de los objetos en la imagen.

“La sustracción de fondo es la técnica más comúnmente utilizada dentro de la gama cámaras de seguridad estándar, NO siendo una opción valida para el control de escenarios complejos.”

Quizás, la característica más popular utilizada para la detección de personas (y varias otras tareas basadas en la detección sobre imágenes) son los histogramas de gradientes orientados, desarrollados por Dalal et al. . Este método, será sobre el que nos centremos hoy en detalle de cara poder implementar un detector de intrusos sencillo mediante vision por computadora e inteligencia artificial.

Histograma de Gradientes Orientados

El método de reconocimiento de objetos mediante descriptores HOG (sigla de histogramas de gradientes orientados), es utilizado a menudo en las áreas de visión por computadora y procesamiento de imágenes, a pesar de tener más de una década, es un método que aún hoy sigue siendo ampliamente utilizado y con el que se obtienen buenos resultados. Los descriptores de histogramas de gradientes orientados de una imagen, en conjunto con una máquina vectorial de soporte lineal (LSVM), pueden ser utilizados para entrenar clasificadores con una optima precisión en la detección de personas en imágenes o vídeo en streaming.

La técnica de HOG cuenta las ocurrencias de la orientación de los gradientes localizados en un área de una imagen. El fundamento esencial, detrás de los descriptores de histograma de gradientes orientados, es que la apariencia y la forma de los objetos dentro de una imagen pueden describirse mediante la distribución de gradientes de intensidad o direcciones de los bordes.

La imagen es dividida en pequeñas regiones llamadas celdas, y para los píxeles dentro de cada celda, se compila un histograma de direcciones de gradientes. Los descriptores son la concatenación de estos histogramas.

Para mejorar la precisión, los histogramas locales pueden ser normalizados en contraste, mediante el cálculo de la intensidad en una área mayor de la imagen, llamada bloque; y luego utilizar este valor para normalizar las celdas dentro del bloque. En general, esta normalización, resulta en la obtención de mejores invariantes a cambios en la luminosidad y reflejos que se puedan presentar en las imágenes.

Los descriptores HOG tiene algunas ventajas claves sobre otro tipo de descriptores. Ya que operan sobre celdas locales, son invariantes a las transformaciones geométricas o fotométricas (ejemplo: aumentar el contraste o convertir a escala de grises), excepto por la orientación de los objetos (ejemplo: rotar la imagen en 90 grados). Tales cambios sólo serian notorios en regiones espaciales más amplias.

Además, el muestreo espacial amplio, el muestreo de orientación más fino y la normalización fotométrica localizada permiten que los movimientos corporales individuales de las personas puedan ser ignorados siempre y cuando mantengan una posición los mas cercana a estar erguidas. Por este motivo, es que esta técnica es muy efectiva para la detección de personas en imágenes.

El detector de rostros HOG usa una ventana de detección deslizante que se mueve alrededor de la imagen. En cada posición de la ventana del detector, se calcula un descriptor HOG para la ventana de detección. Este descriptor se muestra luego al SVM entrenado, que lo clasifica como “rostro” o “no rostro”.

Para reconocer los rostros a diferentes escalas, la imagen se submuestrea en varios tamaños. Se busca cada una de estas imágenes submuestreadas.

El algoritmo general para entrenar un detector de objetos, utilizando histogramas de gradientes orientados, implica los siguientes pasos:

  1. Del conjunto de datos de entrenamiento tomar P muestras positivas (muestras que contengan los objetos que se desea detectar) y extraer los descriptores HOG de estas muestras.
  2. Del conjunto de datos de entrenamiento tomar N muestras negativas (muestras que no contengan los objetos que se desea detectar) y extraer los descriptores HOG de estas muestras. En la práctica es esperable que N >> P.
  3. Entrenar una máquina de con soporte para vectores lineales sobre las muestras negativas y positivas.
  4. Aplicar minería de datos negativa. Es decir, para cada imagen y cada posible escala de cada imagen en el conjunto de entrenamiento negativo, aplicar la técnica de ventana deslizante deslizando dicha ventana sobre la imagen (Imagen 4). En cada ventana computar los descriptores HOG y aplicar el clasificador. Si el clasificador clasifica (incorrectamente) una ventana como un objeto, registrar el vector de características asociado con el falso positivo junto con la probabilidad de clasificación.
  5. Tomar los falsos positivos encontrados durante el paso 4 y ordenarlos por su confidencia (probabilidad) y re entrenar el clasificador utilizando estos ejemplos negativos (Es posible aplicar los pasos 4 y 5 en forma iterativa, pero en la práctica con una sola etapa suele ser suficiente).
  6. En este punto el clasificador está entrenado y puede ser aplicado al conjunto de datos de prueba. Una vez más, al igual que en el paso 4, para cada imagen en el conjunto de datos de prueba, y para cada escala de la imagen, aplicar la técnica de ventana deslizante. En cada ventana extraer los descriptores HOG y aplicar el clasificador. Si el clasificador detecta un objeto con una alta probabilidad, registrar el marco de la ventana. Luego de terminar de escanear la imagen, será necesario aplicar alguna alguna tecnica para eliminar aquellas ventanas que se solapen y obtener el área del objeto detectado.

OpenCV cuenta con un modelo HOG + Linear SVM preentrenado  basado en el método Dalal y Triggs  que se puede utilizar para realizar la detección de peatones tanto en imágenes como en secuencias de video. Es un método  que tiende a ser más preciso que su contraparte Haar.

POC – PROCEDIMIENTO DETECCIÓN DE PEATONES

Vamos a comprobar en la practica como se llevaría a cabo a través de este método (HOG+SVM) para poder realizar una detección de personas en imagenes fijas. Vamos a utilizar OpenCv y Python.

Inicialmente se requiere un entorno virtualizado con todas las librerias precargadas . Una vez realizado se inicializaría nuestro detector de peatones. Hacemos una llamada a la función  hog = cv2.HOGDescriptor()  que inicializa el descriptor de histograma de gradientes orientados HOG. Luego, llamamos al setSVMDetector  para configurar la máquina de soporte Vectorial para que sea un detector de peatones preentrenado , cargado a través del la función cv2.HOGDescriptor_getDefaultPeopleDetector()  

Lo siguiente es redimensionar nuestra imagen a analizar cambiando su tamaño para tener un ancho máximo de 400 píxeles. La razón por la que intentamos reducir nuestras dimensiones de imagen es doble:

  1. Reducir el tamaño de la imagen garantiza que se deben evaluar menos ventanas deslizantes en la pirámide de imágenes (es decir, extraer las características HOG y luego pasarlas a la SVM lineal), reduciendo así el tiempo de detección (y aumentando el rendimiento de detección global).
  2. Cambiar el tamaño de nuestra imagen también mejora la precisión general de nuestra detección de peatones (es decir, menos falsos positivos).

 La detección de peatones en las imágenes se realiza haciendo una llamada al  método detectMultiScale del  descriptor HOG . El  método detectMultiScale construye una pirámide de imágenes con una escala = 1.05  y un tamaño de paso de ventana deslizante de (4 ,4) píxeles tanto en la dirección x como en la  dirección y , respectivamente.

La   función detectMultiScale genera 2 funciones,  rects – coordenadas (x, y) del cuadro delimitador  de cada persona en la imagen-, y weights – el valor de confianza devuelto por el SVM para cada detección-.

Figura 1: Valores de confianza para cada detección generados por el SVM.

Un tamaño de escala mayor  evaluará  menos capas en la pirámide de la imagen, lo que puede hacer que el algoritmo sea más rápido de ejecutar. Sin embargo, tener  una escala demasiado grande (es decir, menos capas en la pirámide de la imagen) puede hacer que los peatones no se detecten. De manera similar, tener  un  tamaño de escala demasiado pequeño aumenta drásticamente  el número de capas de pirámide de imágenes que se deben evaluar. Esto no solo puede ser un desperdicio computacional, sino que también puede aumentar drásticamente la cantidad de falsos positivos detectados por el detector de peatones. Dicho eso, la escala es uno de los parámetros más importantes para sintonizar al realizar la detección de peatones

RECUADROS DELIMITADORES SUPERPUESTOS Y SUPRESIÓN NO MÁXIMA.

Hay un problema ineludible que debe manejar al construir un sistema de detección de objetos:  cuadros de delimitación superpuestos . Va a suceder, no hay forma de evitarlo. De hecho, en realidad es una buena señal de que su detector de objetos está operando correctamente, así que ni siquiera lo llamaría un “problema” exactamente.

Para manejar la eliminación de recuadros delimitadores superpuestos (que se refieren al mismo objeto), podemos usar la supresión no máxima en el algoritmo Mean-Shift.

La esencia del algoritmo de supresión que no es máxima es tomar  múltiples recuadros delimitadores superpuestos y reducirlos a un solo cuadro delimitador, suprimir los  cuadros delimitadores que se superponen con un umbral significativo. Esto ayuda a reducir la cantidad de falsos positivos reportados por el detector de objetos. 

Figura 2: (Izquierda) Se han detectado falsamente varios cuadros delimitadores para la persona en la imagen. (Derecha) La aplicación de supresión no máxima nos permite suprimir cuadros de delimitación superpuestos, dejándonos con la detección final correcta.

La imagen de arriba sirve de ejemplo de por qué es importante aplicar la supresión de no máximos. La  función detectMultiScale detectó falsamente un cuadros delimitadores (junto con el cuadro delimitador correcto), ambos superponiéndose a la persona real en la imagen. Al aplicar la supresión no máxima pudimos suprimir el cuadro de delimitación extraño, dejándonos con la detección verdadera.

En la siguiente imagen nuestro método HOG es capaz de detectar a las personas y dos cuadros de delimitación falsos, pero  un valor grande del parámetro  overlapThresh en la  función non_maxima_suppression asegura que los cuadros delimitadores correctos no se supriman, aunque se solapen parcialmente.

Figura 3: Solapamiento parcial de recuadros delimitadores.

Con el objetivo de que podáis ver el resultado, del modelo en funcionamiento acorde a la metodología y la programación que he compartido en este articulo , adjunto , un render que he realizado en donde se muestra el funcionamiento real de la detección.

Como conclusión es importante siempre poder entender y analizar la aportación a nuestros diseños de estas nuevas capacidades que nos permiten las nuevas tecnologías de inteligencia artificial , si bien recomendaría en todo caso la realización de un estudio previo de cara analizar la mejor opción de control a través de la realización de un estudio de seguridad previo a la implantación y un plan de seguridad global adaptado a sus necesidades.

Dentro de los estudios de diseños de seguridad, será necesario realizar un plan de impacto y de viabilidad de cara encajar estas nuevas tecnologías siempre y cuando sean justificativas para minimizar un riesgo especifico conjuntamente con protocolos de actuación , formación especifica continuada a operadores y equipos de seguridad, servicios de mantenimiento, calculo del tramo temporal de obsolescencia tecnológica de cara evitar posibles incompatibilidades futuras.

Ante cualquier duda al respecto no dude en contactar conmigo para poder asesorarle en su caso particular.

FIN

“La SEGURIDAD es lo que distingue a una empresa líder de las demás”

Deja una respuesta

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