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 gradienteGradiente es un término utilizado en diversos campos, como la matemática y la informática, para describir una variación continua de valores. En matemáticas, se refiere a la tasa de cambio de una función, mientras que en diseño gráfico, se aplica a la transición de colores. Este concepto es esencial para entender fenómenos como la optimización en algoritmos y la representación visual de datos, permitiendo una mejor interpretación y análisis en... 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:
- FondoSustractorMOG
- FondoSustractorMOG2
- 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 ()
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:
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.
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.
Relacionado
Posts Relacionados:
- Optimización de la cadena de suministro minorista a través de datos
- Cómo detectar personas anónimas en ThisCrush
- Ciencia de datos en el sector sanitario | ¿Cómo se utiliza la ciencia de datos en la industria de la salud?
- 4 proyectos musicales de ciencia de datos que tienen como objetivo transformar la industria musical