Las personas cuentan en la industria minorista

Contenidos

Este artículo fue publicado como parte del Blogatón de ciencia de datos

Apuntar

En este blog, discutiremos los métodos de conteo de personas populares, junto con algunas tareas que se realizan en el procesamiento de videos para obtener mejores resultados. Hay algunos algoritmos como los métodos Haar Cascade, HOG y OpenCV que se utilizan en la detección de personas. Después de comprender estos métodos junto con sus ventajas, podemos emplear estos métodos en el caso de uso de conteo de personas como se describe a continuación.

Nuestro objetivo es encontrar la cantidad de personas dentro de la tienda a una hora en particular (tiempo de permanencia) y la cantidad de personas en varias secciones (comestibles, bebidas, etc.) dentro de la tienda minorista con la ayuda de filmaciones de CCTV. Para realizar esta tarea, se requieren videos de CCTV en el punto de entrada y en diferentes secciones dentro de la tienda.

El siguiente video muestra una grabación de CCTV típica de una tienda minorista, con varias secciones de la tienda en el campo de visión.

Algoritmos

Analicemos algunos de los algoritmos de detección de personas junto con el enfoque utilizado en este blog:

1. Algoritmo de detección de personas Haar Cascade Es un enfoque basado en ML en el que se entrena una función en cascada a partir de muchas imágenes positivas y negativas. En la detección se utilizan cascadas previamente entrenadas. Obtenga más información sobre este método aquí: cascada.

A continuación se muestra el código para ello:

importar numpy como np

import cv2 # Crea nuestro clasificador corporal

body_classifier = cv2.CascadeClassifier (‘haarcascade_fullbody.xml’) # Iniciar captura de video para archivo de video

cap = cv2.VideoCapture (‘/ moskva.mov’) # Repetir una vez que el video se haya cargado correctamente

while cap.isOpened ():

# Leer el primer fotograma

ret, frame = cap.read ()

gris = cv2.cvtColor (marco, cv2.COLOR_BGR2GRAY)

# Pasar marco a nuestro clasificador corporal

cuerpos = clasificador_cuerpo.detectMultiScale (gris, 1.1, 3)

# Extraer cuadros delimitadores para cualquier cuerpo identificado

para (x, y, w, h) en cuerpos:

cv2.rectangle (marco, (x, y), (x + w, y + h), (0, 255, 255), 2)

cv2.imshow (‘Peatones’, marco)

si cv2.waitKey (1) == 13: # 13 es la tecla Enter

rotura

cap.release ()

cv2.destroyAllWindows ()

2. Detección simple de HOG HOG (Histograma de degradados) es un tipo de «descriptor de características». La técnica cuenta las apariciones de la orientación de gradiente en partes localizadas de una imagen y, por lo tanto, en un video. Obtenga más información sobre este método aquí: cerdo.

A continuación se muestra el código para ello:

importar cv2
importar imutils
# Inicialización del detector de personas HOG
hog = cv2.HOGDescriptor
hog.setSVMDetector (cv2.HOGDescriptor_getDefaultPeopleDetector)
# Leyendo la imagen
imagen = cv2.imread (‘img.png’)
# Cambiar el tamaño de la imagen
imagen = imutils.resize (imagen,
width = min (400, image.shape[1]))
# Detectando todas las regiones en la imagen que tienen peatones en su interior
(regiones, _) = hog.detectMultiScale (imagen, winStride = (4, 4), padding = (4, 4), scale = 1.05)
# Dibujando las regiones en la imagen
para (x, y, w, h) en regiones:
cv2.rectangle (imagen, (x, y), (x + w, y + h), (0, 0, 255), 2)
# Mostrando la imagen de salida
cv2.imshow («Imagen», imagen)
cv2.waitKey (0)
cv2.destroyAllWindows ()

3. Resta de fondo de OpenCV La sustracción de fondo es un paso de preprocesamiento importante en muchas aplicaciones basadas en la visión. Por ejemplo, considere los casos como un contador de visitantes donde una cámara estática toma el número de visitantes que entran o salen de la habitación, o una cámara de tráfico que extrae información sobre los vehículos, etc. En todos estos casos, primero debe extraer a la persona o vehículos solos. Técnicamente, es necesario extraer el primer plano en movimiento del fondo estático. Es un método relativamente más rápido para la detección de personas en tiempo real. OpenCV ha implementado tres de estos algoritmos:

  1. FondoSustractorMOG
  2. FondoSustractorMOG2
  3. De FondoSustractorGMG

Obtenga más información sobre estos aquí: opencv

A continuación se muestra la implementación de la resta de fondo de OpenCV usando BackgroundSubtractorMOG2:

importar numpy como np

importar cv2

cap = cv2.VideoCapture (‘vtest.avi’)

fgbg = cv2.createBackgroundSubtractorMOG2 ()

mientras que (1):

ret, frame = cap.read ()

fgmask = fgbg.apply (marco)

cv2.imshow (‘marco’, fgmask)

k = cv2.waitKey (30) y 0xff

si k == 27:

rotura

cap.release ()

cv2.destroyAllWindows ()

78865opencv2-5300586

Fuente: https://docs.opencv.org/3.4/d1/dc5/tutorial_background_subtraction.html

La segunda imagen muestra los resultados de la resta de fondo de OpenCV en la primera imagen.

Nuestro enfoque utiliza este método para obtener mejores resultados. Se han utilizado métodos de contorno y transformaciones morfológicas para contar personas con mayor precisión.

4. HOG con algoritmo SVM lineal La precisión del detector HOG (discutido en el método de detección Simple HOG) se puede mejorar aún más usando un clasificador SVM para clasificar características positivas y negativas de imágenes de muestra.

Las características positivas y negativas extraídas de las muestras de imágenes positivas y negativas recolectadas se utilizan para entrenar el modelo SVM con detección de HOG. Este método cuenta el tráfico con la máxima precisión y el algoritmo se puede personalizar. Se pueden generar imágenes negativas (imágenes de fondo de las tiendas minoristas) para cualquier tienda nueva para aumentar la precisión.

Acercarse

Comparación de los algoritmos mencionados anteriormente:

18630comparison-7834250

Fuente: trabajo de autoproyecto

Veamos el enfoque utilizado en este blog, basado en la observación anterior, teniendo en cuenta los diferentes tipos de videos que obtenemos de la tienda minorista:

División de videos

La división del video del diseño de la tienda se realiza para un recuento de tráfico efectivo en varias categorías desde una sola vista de cámara. Un metraje puede cubrir 2-3 categorías como bebidas, secciones de comestibles. Para obtener personas precisas: cuente en diferentes secciones de la tienda, dividir es útil.

splitting-7857618
Fuente: trabajo de autoproyecto

Como se puede ver en la imagen de arriba, los videos de CCTV están disponibles a nivel de bahía, por lo que para medir el tráfico a nivel de categoría, el área de cobertura de video se divide en categorías por área.

Resultados

En el caso de uso, nuestra tarea principal es tener una estimación del recuento de personas dentro de la tienda (y también en varias secciones de la tienda) para analizar el tiempo de permanencia. Habiendo discutido los algoritmos y enfoques adecuados para el caso dado, veamos los resultados:

Vídeo de la cámara de entrada / salida

El algoritmo utilizado: – restador de fondo Opencv

Motivo: – Se realizan detecciones rápidas porque la gente suele entrar a una velocidad relativamente rápida (en comparación con el movimiento lento dentro de la tienda). Las personas se detectan cuando cruzan la vista de la cámara.

Resultado:-

Videos de la cámara sobre varias secciones dentro de la tienda

El algoritmo utilizado: – HOG (clasificador lineal SVM)

Motivo: – Se necesita una detección precisa ya que las personas suelen caminar con carritos / niños. Este algoritmo es el mejor para este caso.

Resultado:-

Las personas de la sección de comestibles cuentan en cada cuadro:

Las personas de la sección de bebidas cuentan en cada cuadro:

Háganos saber en los comentarios en caso de cualquier enfoque que pueda mejorar aún más los resultados.

Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.