Menschen zählen im Einzelhandel

Inhalt

Dieser Artikel wurde im Rahmen der Data Science Blogathon

Punkt

In diesem Blog, Wir werden beliebte Methoden zum Zählen von Personen besprechen, zusammen mit einigen Aufgaben, die in der Videoverarbeitung für beste Ergebnisse ausgeführt werden. Es gibt einige Algorithmen wie Haar Cascade-Methoden, HOG und OpenCV werden bei der Erkennung von Menschen verwendet. Nachdem Sie diese Methoden mit ihren Vorteilen verstanden haben, wir können diese Methoden im Anwendungsfall der Personenzählung wie unten beschrieben anwenden.

Unser Ziel ist es, die Anzahl der Personen im Laden zu einer bestimmten Zeit zu ermitteln (Verweilzeit) und die Anzahl der Personen in verschiedenen Abschnitten (Lebensmittel, Getränke, etc.) im Ladengeschäft mit Hilfe von CCTV-Aufnahmen. Um diese Aufgabe auszuführen, CCTV-Videos sind am Eingang und in verschiedenen Bereichen des Geschäfts erforderlich.

Das folgende Video zeigt eine typische CCTV-Aufnahme eines Einzelhandelsgeschäfts, mit verschiedenen Ladenbereichen im Sichtfeld.

Algorithmen

Werfen wir einen Blick auf einige der Personenerkennungsalgorithmen zusammen mit dem in diesem Blog verwendeten Ansatz.:

1. Algorithmus zur Personenerkennung von Haar Cascade Es handelt sich um einen ML-basierten Ansatz, bei dem eine Kaskadenfunktion aus vielen positiven und negativen Bildern trainiert wird. Bei der Erkennung werden vortrainierte Kaskaden verwendet. Erfahren Sie hier mehr über diese Methode: Kaskade.

Unten ist der Code dafür:

numpy als np importieren

CV2 importieren # Erstellen Sie unseren Körperklassifikator

body_classifier = cv2.CascadeClassifier (‚haarcascade_fullbody.xml‘) # Videoaufnahme für Videodatei starten

cap = cv2.VideoCapture (‚/ moskva.mov‘) # Wiederholen Sie den Vorgang, sobald das Video erfolgreich geladen wurde

während cap.isOpened ():

# Lesen Sie den ersten Frame

rechts, Rahmen = cap.read ()

grau = cv2.cvtColor (Marco, cv2.COLOR_BGR2GRAY)

# Übergeben Sie den Rahmen an unseren Körperklassifikator

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

# Extrahieren Sie Begrenzungsrahmen für jeden identifizierten Körper

zu (x, Ja, w, h) in Körpern:

cv2.rechteck (Marco, (x, Ja), (x + w, Ja + h), (0, 255, 255), 2)

cv2.imshow (‚Peatones‘, Marco)

wenn cv2.waitKey (1) == 13: # 13 ist die Eingabetaste

brechen

cap.release ()

cv2.destroyAllWindows ()

2. Einfache HOG-Erkennung SCHWEIN (Gradienten-Histogramm) es ist eine Art „Merkmalsbeschreibung“. La técnica cuenta las apariciones de la orientación de Steigung en partes localizadas de una imagen y, Daher, in einem Video. Erfahren Sie hier mehr über diese Methode: Schweinefleisch.

Unten ist der Code dafür:

CV2 importieren
Imutils importieren
# Initialisierung des HOG-Personendetektors
Schwein = cv2.HOGDescriptor
hog.setSVMDetector (cv2.HOGDescriptor_getDefaultPeopleDetector)
# Bild lesen
image = cv2.imread (‚img.png‘)
# Bildgröße ändern
imagen = imutils.resize (Bild,
Breite = min (400, image.shape[1]))
# Erkennung aller Regionen im Bild, in denen sich Fußgänger befinden
(Regionen, _) = hog.detectMultiScale (Bild, winStride = (4, 4), Polsterung = (4, 4), Maßstab = 1.05)
# Zeichnen der Regionen im Bild
zu (x, Ja, w, h) in Regionen:
cv2.rechteck (Bild, (x, Ja), (x + w, Ja + h), (0, 0, 255), 2)
# Ausgabebild anzeigen
cv2.imshow („Bild“, Bild)
cv2.waitKey (0)
cv2.destroyAllWindows ()

3. OpenCV-Hintergrundsubtraktion Die Hintergrundsubtraktion ist ein wichtiger Vorverarbeitungsschritt in vielen Vision-basierten Anwendungen. Zum Beispiel, Betrachten Sie Fälle wie einen Besucherzähler, bei dem eine statische Kamera die Anzahl der Besucher erfasst, die den Raum betreten oder verlassen, oder eine Verkehrskamera, die Informationen über Fahrzeuge extrahiert, etc. In all diesen Fällen, Sie müssen zuerst die Person oder Fahrzeuge allein entfernen. Technisch, es ist notwendig, den bewegten Vordergrund aus dem statischen Hintergrund zu extrahieren. Es ist eine relativ schnellere Methode zur Erkennung von Personen in Echtzeit. OpenCV hat drei dieser Algorithmen implementiert:

  1. HintergrundSutractorMOG
  2. HintergrundSutractorMOG2
  3. HintergrundStractorGMG

Erfahren Sie hier mehr darüber: opencv

Unten ist die Implementierung der OpenCV-Hintergrundsubtraktion mit BackgroundSubtractorMOG2:

numpy als np importieren

CV2 importieren

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

fgbg = cv2.createBackgroundSubtractorMOG2 ()

während (1):

rechts, Rahmen = cap.read ()

fgmask = fgbg.apply (Marco)

cv2.imshow (‚Marco‘, fgmaske)

k = cv2.waitKey (30) und 0xff

si k == 27:

brechen

cap.release ()

cv2.destroyAllWindows ()

78865opencv2-5300586

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

Das zweite Bild zeigt die Ergebnisse der OpenCV-Hintergrundsubtraktion im ersten Bild.

Unser Ansatz verwendet diese Methode für beste Ergebnisse. Konturmethoden und morphologische Transformationen wurden verwendet, um Menschen genauer zu zählen.

4. HOG mit linearem SVM-Algorithmus Die Genauigkeit des HOG-Detektors (diskutiert in der einfachen HOG-Erkennungsmethode) kann weiter verbessert werden, indem ein SVM-Klassifikator verwendet wird, um positive und negative Eigenschaften von Probenbildern zu klassifizieren.

Die aus den gesammelten positiven und negativen Bildgebungsproben extrahierten positiven und negativen Merkmale werden verwendet, um das SVM-Modell mit HOG-Erkennung zu trainieren.. Diese Methode zählt den Verkehr mit höchster Präzision und der Algorithmus kann angepasst werden. Negativbilder können erzeugt werden (Hintergrundbilder für Einzelhandelsgeschäfte) für jedes neue Geschäft, um die Genauigkeit zu erhöhen.

Rückt näher

Vergleich der oben genannten Algorithmen:

18630Vergleich-7834250

Quelle: Autoprojektarbeit

Sehen wir uns den Ansatz an, der in diesem Blog verwendet wird, basierend auf der vorherigen Beobachtung, in Anbetracht der verschiedenen Arten von Videos, die wir aus dem Einzelhandel erhalten:

Videoabteilung

Die Aufteilung von Store-Layout-Videos erfolgt für eine effektive Verkehrszählung über mehrere Kategorien hinweg aus einer einzigen Kameraansicht. Ein Filmmaterial kann abdecken 2-3 Kategorien wie Getränke, Lebensmittelabteilungen. Um genaue Leute zu bekommen: zähle in verschiedenen Bereichen des Ladens, teilen ist nützlich.

spalten-7857618
Quelle: Autoprojektarbeit

Wie Sie im Bild oben sehen können, CCTV-Videos sind auf Buchtebene verfügbar, um den Verkehr auf Kategorieebene zu messen, Videoabdeckungsbereich ist nach Bereich in Kategorien unterteilt.

Ergebnisse

Im Anwendungsfall, Unsere Hauptaufgabe besteht darin, die Anzahl der Personen im Laden zu schätzen (und auch in verschiedenen Bereichen des Ladens) um die Verweilzeit zu analysieren. Nachdem wir die geeigneten Algorithmen und Ansätze für den gegebenen Fall diskutiert haben, lass uns die ergebnisse sehen:

Kameravideo eingeben / Ausgang

Der verwendete Algorithmus: – Opencv-Hintergrundempfänger

Grund: – Schnelle Erkennungen werden gemacht, weil Menschen dazu neigen, mit relativ hoher Geschwindigkeit einzusteigen (im Vergleich zu langsamer Bewegung im Laden). Personen werden erkannt, wenn sie das Sichtfeld der Kamera kreuzen.

Ergebnis:-

Kameravideos zu verschiedenen Bereichen des Shops

Der verwendete Algorithmus: – SCHWEIN (Linearer SVM-Klassifikator)

Grund: – Eine genaue Erkennung ist erforderlich, da Menschen oft mit Karren gehen / Kinder. Dieser Algorithmus ist der beste für diesen Fall.

Ergebnis:-

Personen in der Lebensmittelabteilung zählen in jedem Quadrat:

Personen in der Getränkeabteilung zählen auf jedem Quadrat:

Lassen Sie es uns in den Kommentaren wissen, wenn Sie einen Ansatz verfolgen, der die Ergebnisse weiter verbessern kann..

Die in diesem Artikel gezeigten Medien sind nicht Eigentum von DataPeaker und werden nach Ermessen des Autors verwendet.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.

Datenlautsprecher