As pessoas contam no setor de varejo

Conteúdo

Este artigo foi publicado como parte do Data Science Blogathon

Apontar

Neste blog, discutiremos métodos populares de contagem de pessoas, junto com algumas tarefas que são realizadas no processamento de vídeo para melhores resultados. Existem alguns algoritmos como métodos Haar Cascade, HOG e OpenCV usados ​​na detecção humana. Depois de compreender esses métodos e suas vantagens, podemos empregar esses métodos no caso de uso de contagem de pessoas, conforme descrito abaixo.

Nosso objetivo é encontrar o número de pessoas na loja em um determinado momento (ficar o tempo) e o número de pessoas em várias seções (mercearias, bebidas, etc.) dentro da loja de varejo com a ajuda de filmagens CCTV. Para realizar esta tarefa, Os vídeos CCTV são necessários no ponto de entrada e em diferentes seções da loja.

O vídeo a seguir mostra uma gravação CCTV típica de uma loja de varejo, com várias seções de loja no campo de visão.

Algoritmos

Vamos dar uma olhada em alguns dos algoritmos de detecção de pessoas junto com a abordagem usada neste blog.:

1. Algoritmo de detecção de pessoas Haar Cascade É uma abordagem baseada em ML em que uma função em cascata é treinada a partir de muitas imagens positivas e negativas. Cascatas pré-treinadas são usadas na detecção. Saiba mais sobre este método aqui: cascada.

Abaixo está o código para isso:

importar numpy como np

import cv2 # Crie nosso classificador de corpo

body_classifier = cv2.CascadeClassifier (‘Haarcascade_fullbody.xml’) # Iniciar captura de vídeo para arquivo de vídeo

cap = cv2.VideoCapture (‘/ Moskva.mov’) # Repita assim que o vídeo for carregado com sucesso

enquanto cap.isOpened ():

# Leia o primeiro quadro

direito, frame = cap.read ()

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

# Passar quadro para nosso classificador de corpo

corpos = body_classifier.detectMultiScale (Cinza, 1.1, 3)

# Extraia caixas delimitadoras para qualquer corpo identificado

para (x, e, C, h) em corpos:

cv2.rectangle (marco, (x, e), (x + C, e + h), (0, 255, 255), 2)

cv2.imshow ('Pedestres', marco)

se cv2.waitKey (1) == 13: # 13 é a tecla Enter

pausa

cap.release ()

cv2.destroyAllWindows ()

2. Detecção de HOG simples PORCO (Histograma de gradientes) é um tipo de “descritor de recurso”. La técnica cuenta las apariciones de la orientación de gradiente en partes localizadas de una imagen y, portanto, em um vídeo. Saiba mais sobre este método aqui: carne de porco.

Abaixo está o código para isso:

import cv2
importar imutils
# Inicialização do detector de pessoa HOG
hog = cv2.HOGDescriptor
hog.setSVMDetector (cv2.HOGDescriptor_getDefaultPeopleDetector)
# Lendo a imagem
image = cv2.imread (‘Img.png’)
# Redimensione a imagem
imagen = imutils.resize (imagem,
largura = min (400, image.shape[1]))
# Detectando todas as regiões da imagem com pedestres dentro
(regiões, _) = hog.detectMultiScale (imagem, winStride = (4, 4), preenchimento = (4, 4), escala = 1.05)
# Desenhar as regiões na imagem
para (x, e, C, h) nas regiões:
cv2.rectangle (imagem, (x, e), (x + C, e + h), (0, 0, 255), 2)
# Mostrando a imagem de saída
cv2.imshow (“Imagem”, imagem)
cv2.waitKey (0)
cv2.destroyAllWindows ()

3. Subtração de fundo OpenCV A subtração do fundo é uma etapa de pré-processamento importante em muitos aplicativos baseados em visão. Por exemplo, considere casos como um contador de visitantes, em que uma câmera estática registra o número de visitantes que entram ou saem da sala, ou uma câmera de trânsito que extrai informações sobre os veículos, etc. Em todos esses casos, você deve primeiro remover a pessoa ou veículos sozinhos. Tecnicamente, é necessário extrair o primeiro plano em movimento do fundo estático. É um método relativamente mais rápido de detectar pessoas em tempo real. OpenCV implementou três desses algoritmos:

  1. BackgroundSustractorMOG
  2. BackgroundSustractorMOG2
  3. BackgroundStractorGMG

Saiba mais sobre isso aqui: opencv

Abaixo está a implementação da subtração de fundo OpenCV usando BackgroundSubtractorMOG2:

importar numpy como np

import cv2

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

fgbg = cv2.createBackgroundSubtractorMOG2 ()

enquanto que (1):

direito, frame = cap.read ()

fgmask = fgbg.apply (marco)

cv2.imshow (‘Marco’, fgmask)

k = cv2.waitKey (30) e 0xff

si k == 27:

pausa

cap.release ()

cv2.destroyAllWindows ()

78865opencv2-5300586

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

A segunda imagem mostra os resultados da subtração de fundo do OpenCV na primeira imagem.

Nossa abordagem usa esse método para obter melhores resultados. Métodos de contorno e transformações morfológicas têm sido usados ​​para contar pessoas com maior precisão.

4. HOG com algoritmo SVM linear A precisão do detector HOG (discutido no método de detecção de HOG simples) pode ser melhorado ainda mais usando um classificador SVM para classificar características positivas e negativas de imagens de amostra.

As características positivas e negativas extraídas das amostras de imagem positivas e negativas coletadas são usadas para treinar o modelo SVM com detecção de HOG.. Este método conta o tráfego com a maior precisão e o algoritmo pode ser personalizado. Imagens negativas podem ser geradas (imagens de fundo de loja de varejo) para qualquer nova loja para aumentar a precisão.

Chegando perto

Comparação dos algoritmos mencionados acima:

18630comparação-7834250

Fonte: trabalho de projeto automotivo

Vamos ver a abordagem usada neste blog, baseado na observação anterior, considerando os diferentes tipos de vídeos que obtemos na loja de varejo:

Divisão de Vídeo

A divisão do vídeo do layout da loja é feita para uma contagem eficaz do tráfego em várias categorias a partir de uma única visualização da câmera. Uma filmagem pode cobrir 2-3 categorias como bebidas, seções de mercearia. Para obter pessoas precisas: contar em diferentes seções da loja, dividir é útil.

divisão-7857618
Fonte: trabalho de projeto automotivo

Como você pode ver na imagem acima, Vídeos CCTV estão disponíveis no nível da baía, para medir o tráfego no nível da categoria, a área de cobertura de vídeo é dividida em categorias por área.

Resultados

No caso de uso, nossa principal tarefa é ter uma estimativa do número de pessoas dentro da loja (e também em várias seções da loja) para analisar o tempo de residência. Tendo discutido os algoritmos e abordagens apropriados para o caso dado, vamos ver os resultados:

Vídeo da câmera de entrada / Saída

O algoritmo usado: – Receptor de fundo Opencv

Razão: – As detecções rápidas são feitas porque as pessoas tendem a entrar em uma velocidade relativamente rápida (em comparação com o movimento lento dentro da loja). Pessoas são detectadas quando cruzam a visão da câmera.

Resultado:-

Vídeos de câmera sobre várias seções da loja

O algoritmo usado: – PORCO (Classificador linear SVM)

Razão: – A detecção precisa é necessária, pois as pessoas costumam andar com carrinhos / crianças. Este algoritmo é o melhor para este caso.

Resultado:-

As pessoas na seção de mercearia contam em cada quadrado:

As pessoas na seção de bebidas contam em cada quadrado:

Avise-nos nos comentários caso haja alguma abordagem que possa melhorar ainda mais os resultados..

A mídia mostrada neste artigo não é propriedade da DataPeaker e é usada a critério do autor.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.

Datapeaker