Le persone contano nel settore della vendita al dettaglio

Contenuti

Questo articolo è stato pubblicato nell'ambito del Blogathon sulla scienza dei dati

Punto

In questo blog, discuteremo dei metodi di conteggio delle persone popolari, insieme ad alcune attività che vengono eseguite nell'elaborazione video per risultati migliori. Ci sono alcuni algoritmi come i metodi Haar Cascade, HOG e OpenCV utilizzati nel rilevamento umano. Dopo aver compreso questi metodi insieme ai loro vantaggi, possiamo utilizzare questi metodi nel caso d'uso del conteggio delle persone come descritto di seguito.

Il nostro obiettivo è trovare il numero di persone in negozio in un determinato momento (resta tempo) e il numero di persone nelle varie sezioni (drogheria, bevande, eccetera.) all'interno del negozio al dettaglio con l'aiuto di filmati CCTV. Per eseguire questo compito, I video CCTV sono richiesti al punto di ingresso e in diverse sezioni all'interno del negozio.

Il seguente video mostra una tipica registrazione CCTV di un negozio al dettaglio, con varie sezioni del negozio nel campo visivo.

Algoritmi

Diamo un'occhiata ad alcuni degli algoritmi di rilevamento delle persone insieme all'approccio utilizzato in questo blog.:

1. Algoritmo di rilevamento delle persone Haar Cascade È un approccio basato sul machine learning in cui una funzione a cascata viene addestrata da molte immagini positive e negative. Nel rilevamento vengono utilizzate cascate pre-addestrate. Scopri di più su questo metodo qui: cascata.

Di seguito è riportato il codice per esso:

importa numpy come np

importa cv2 # Crea il nostro classificatore del corpo

body_classifier = cv2.CascadeClassifier ('Haarcascade_fullbody.xml') # Avvia l'acquisizione video per il file video

cap = cv2.VideoCapture ('/ moskva.mov') # Ripeti una volta che il video è stato caricato con successo

mentre cap.isOpened ():

# Leggi il primo frame

Giusto, frame = cap.read ()

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

# Passa il frame al nostro classificatore del corpo

body = body_classifier.detectMultiScale (Grigio, 1.1, 3)

# Estrai riquadri di delimitazione per qualsiasi corpo identificato

per (X, e, w, h) nei corpi:

cv2.rettangolo (marco, (X, e), (X + w, e + h), (0, 255, 255), 2)

cv2.imshow ('Pedoni', marco)

se cv2.waitKey (1) == 13: # 13 è il tasto Invio

rottura

cap.release ()

cv2.destroyAllWindows ()

2. Rilevamento HOG semplice MAIALE (Istogramma gradienti) è una specie di “descrittore di funzionalità”. La técnica cuenta las apariciones de la orientación de gradiente en partes localizadas de una imagen y, così, in un video. Scopri di più su questo metodo qui: Maiale.

Di seguito è riportato il codice per esso:

importa cv2
importare imutils
# Inizializzazione del rilevatore di persone HOG
hog = cv2.HOGDescriptor
hog.setSVMDetector (cv2.HOGDescriptor_getDefaultPeopleDetector)
# Leggere l'immagine
immagine = cv2.imread ('img.png')
# Ridimensiona l'immagine
imagen = imutils.resize (Immagine,
larghezza = min (400, immagine.forma[1]))
# Rilevamento di tutte le regioni nell'immagine che contengono pedoni
(regioni, _) = hog.detectMultiScale (Immagine, winStride = (4, 4), imbottitura = (4, 4), scala = 1.05)
# Disegnare le regioni nell'immagine
per (X, e, w, h) nelle regioni:
cv2.rettangolo (Immagine, (X, e), (X + w, e + h), (0, 0, 255), 2)
# Mostrando l'immagine di output
cv2.imshow (“Immagine”, Immagine)
cv2.waitKey (0)
cv2.destroyAllWindows ()

3. Sottrazione dello sfondo OpenCV La sottrazione dello sfondo è un'importante fase di pre-elaborazione in molte applicazioni basate sulla visione. Ad esempio, considera casi come un contatore visitatori in cui una telecamera statica rileva il numero di visitatori che entrano o escono dalla stanza, o una telecamera del traffico che estrae informazioni sui veicoli, eccetera. In tutti questi casi, devi prima rimuovere la persona o i veicoli da solo. tecnicamente, è necessario estrarre il primo piano in movimento dallo sfondo statico. È un metodo relativamente più veloce per rilevare le persone in tempo reale. OpenCV ha implementato tre di questi algoritmi:

  1. SfondoSustractorMOG
  2. SfondoSustractorMOG2
  3. SfondoStractorGMG

Scopri di più su questi qui: opencv

Di seguito è riportata l'implementazione della sottrazione di sfondo OpenCV utilizzando BackgroundSubtractorMOG2:

importa numpy come np

importa cv2

cap = cv2.VideoCapture ('vtest.avi')

fgbg = cv2.createBackgroundSubtractorMOG2 ()

mentre (1):

Giusto, frame = cap.read ()

fgmask = fgbg.apply (marco)

cv2.imshow ('marco', fgmask)

k = cv2.waitKey (30) e 0xff

si k == 27:

rottura

cap.release ()

cv2.destroyAllWindows ()

78865opencv2-5300586

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

La seconda immagine mostra i risultati della sottrazione dello sfondo OpenCV nella prima immagine.

Il nostro approccio utilizza questo metodo per ottenere i migliori risultati. Sono stati utilizzati metodi di contorno e trasformazioni morfologiche per contare le persone con maggiore precisione.

4. HOG con algoritmo SVM lineare La precisione del rilevatore HOG (discusso nel metodo di rilevamento Simple HOG) può essere ulteriormente migliorato utilizzando un classificatore SVM per classificare le caratteristiche positive e negative delle immagini campione.

Le caratteristiche positive e negative estratte dai campioni di imaging positivi e negativi raccolti vengono utilizzate per addestrare il modello SVM con rilevamento HOG.. Questo metodo conta il traffico con la massima precisione e l'algoritmo può essere personalizzato. È possibile generare immagini negative (immagini di sfondo del negozio al dettaglio) per ogni nuovo negozio per aumentare la precisione.

Avvicinarsi

Confronto degli algoritmi sopra menzionati:

18630confronto-7834250

Fonte: lavoro di progetto automatico

Vediamo l'approccio utilizzato in questo blog, sulla base dell'osservazione precedente, considerando i diversi tipi di video che riceviamo dal negozio al dettaglio:

Divisione video

La suddivisione del video del layout del negozio viene eseguita per un conteggio efficace del traffico su più categorie da una singola visualizzazione della telecamera. Un filmato può coprire 2-3 categorie come le bevande, sezioni di generi alimentari. Per avere persone precise: contare in diverse sezioni del negozio, dividere è utile.

scissione-7857618
Fonte: lavoro di progetto automatico

Come puoi vedere nell'immagine sopra, I video CCTV sono disponibili a livello della baia, quindi per misurare il traffico a livello di categoria, l'area di copertura video è suddivisa in categorie per area.

Risultati

Nel caso d'uso, il nostro compito principale è avere una stima del numero di persone all'interno del negozio (e anche in varie sezioni del negozio) analizzare il tempo di permanenza. Dopo aver discusso gli algoritmi e gli approcci appropriati per il caso dato, vediamo i risultati:

Ingresso video della telecamera / Uscita

L'algoritmo utilizzato: – Ricevitore in background Opencv

Motivo: – I rilevamenti rapidi vengono effettuati perché le persone tendono ad entrare a una velocità relativamente elevata (rispetto al movimento lento all'interno del negozio). Le persone vengono rilevate quando attraversano la visuale della telecamera.

Risultato:-

Video delle telecamere su varie sezioni all'interno del negozio

L'algoritmo utilizzato: – MAIALE (Classificatore lineare SVM)

Motivo: – È necessario un rilevamento accurato poiché le persone spesso camminano con i carrelli / bambini. Questo algoritmo è il migliore per questo caso.

Risultato:-

Le persone nel reparto drogheria contano in ogni piazza:

Le persone nella sezione bevande contano in ogni quadrato:

Fatecelo sapere nei commenti in caso di qualsiasi approccio che possa migliorare ulteriormente i risultati..

Il supporto mostrato in questo articolo non è di proprietà di DataPeaker e viene utilizzato a discrezione dell'autore.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.