People Counting in Real-Time with an IP camera.
Go to file
2020-08-19 10:29:06 +02:00
mobilenet_ssd added main project files 2020-08-18 21:18:38 +02:00
mylib added main project files 2020-08-18 21:18:38 +02:00
videos added main project files 2020-08-18 21:18:38 +02:00
LICENSE Initial commit 2020-08-18 21:14:40 +02:00
Log.csv added main project files 2020-08-18 21:18:38 +02:00
README.md Update README.md 2020-08-19 10:29:06 +02:00
requirements.txt added main project files 2020-08-18 21:18:38 +02:00
Run.py Update Run.py 2020-08-19 10:21:02 +02:00

People-Counting-in-Real-Time

People Counting in Real-Time using live video stream/IP camera in OpenCV.

This repo is a simple improvement/modification to https://www.pyimagesearch.com/2018/08/13/opencv-people-counter/

Live demo

  • The primary aim is to use the project as a business perspective, ready to scale.
  • Use case: counting the number of people in the stores/buildings/shopping malls etc., in real-time.
  • Sending an alert to the staff if the people are way over the limit.
  • Acts as a measure towards footfall analysis and in a way to tackle COVID-19.

Table of Contents

Simple Theory

SSD detector:

  • We are using a SSD (Single Shot Detector) with a MobileNet architecture. In general, it only takes a single shot to detect whatever is in an image. That is, one for generating region proposals, one for detecting the object of each proposal.
  • Compared to other 2 shot detectors like R-CNN, SSD is quite fast.
  • MobileNet, as the name implies, is a DNN designed to run on resource constrained devices. For example, mobiles, ip cameras, scanners etc.
  • Thus, SSD seasoned with a MobileNet should theoretically result in a faster, more efficient object detector.

Centroid tracker:

  • Centroid tracker is one of the most reliable trackers out there.
  • To be straightforward, the centroid tracker computes the centroid of the bounding boxes.
  • That is, the bounding boxes are (x, y) co-ordinates of the objects in an image.
  • Once the co-ordinates are obtained by our SSD, the tracker computes the centroid (center) of the box. In other words, the center of an object.
  • Then an unique ID is assigned to every particular object deteced, for tracking over the sequence of frames.

Running Inference

  • Install all the required Python dependencies:
pip install -r requirements.txt
  • To run inference on a test video file, head into the directory/use the command:
python run.py --prototxt mobilenet_ssd/MobileNetSSD_deploy.prototxt --model mobilenet_ssd/MobileNetSSD_deploy.caffemodel --input videos/example_01.mp4

To run inference on an IP camera:

  • Setup your camera url in 'run.py':
# the following is an ip camera url example
# just enter your camera url and it should work
url = 'http://191.138.0.100:8040/video'
vs = VideoStream(url).start()
  • Then run with the command:
python run.py --prototxt mobilenet_ssd/MobileNetSSD_deploy.prototxt --model mobilenet_ssd/MobileNetSSD_deploy.caffemodel

Features

The following are some of the added features. Note: You can easily on/off them in the config options at the start of 'run.py':

1. Real-Time alert:

  • If selected, we send an email alert in real-time. Use case: If the total number of people (say 30) exceeded in a store/building, we simply alert the staff.

  • This is pretty useful considering the COVID-19 scenario.

  • Note: To setup the sender email, please refer the instructions inside 'mylib/mailer.py'

2. Scheduler & Timer:

  • Automatic scheduler to start the software. This is extremely useful in a business scenario, for instance, run it only at your desired time (9-5?).
  • Stop running after a certain time, e.g., 30 min or 9 hours from now.
##Runs at every day (9:00 am). You can change it.
schedule.every().day.at("9:00").do(run)
if Timer:
	# Automatic timer to stop the live stream. Set to 8 hours (28800s).
	t1 = time.time()
	num_seconds=(t1-t0)
	if num_seconds > 28800:
		break

3. Simple log:

  • Logs all data at end of the day.
  • Useful for footfall analysis.

References

Main:

Optional:

Next steps

  • Train the SSD on human data (with a top-down view).
  • Experiment with other detectors and benchmark the results on computationally less expensive embedded hardware.
  • Evaluate the performance on multiple IP cameras.

 


Thanks for the read & have fun!

To get started/contribute quickly (optional) ...

  • Option 1

    • 🍴 Fork this repo and pull request!
  • Option 2

    • 👯 Clone this repo:
    $ git clone https://github.com/saimj7/People-Counting-in-Real-Time.git
    
  • Roll it!


saimj7/ 19-08-2020 © Sai_Mj.