Person
Counting System Using Opencv and Python:
In this Person Counting System using Opencv and Python
project, we are using one raspberry pi and one usb camera for this project.
Project
Description:
People counting system can be implemented in various
domains such as libraries, schools, airports, malls. People observation and
counting is of interest in many commercial and non-commercial scenarios. The
number of people entering and leaving shops, the occupancy of office buildings
or the passenger count of commuter trains provide useful information to shop
merchants and marketers, security officials or train operators. People counter
is a device used to count the number of pedestrians walking through a door or
corridor. Most of the time, this system is used at the entrance of a building
so that the total number of visitors can be recorded.
Hardware Used:
You only need two hardware here:
1) Raspberry Pi:
This is the latest version of raspberry pi. In
this we have inbuilt Bluetooth and wi-fi, unlike previously we have to use
Wi-Fi dongle in one of its usb port. There are total 40 pins in RPI3. Of the 40
pins, 26 are GPIO pins and the others are power or ground pins (plus two ID
EEPROM pins.) There are 4 USB Port and 1 Ethernet slot, one HDMI port, 1 audio
output port and 1 micro usb port and also many other things you can see the
diagram on right side. And also we have one micro sd card slot wherein we have
to installed the recommended Operating system on micro sd card. There are two
ways to interact with your raspberry pi. Either you can interact directly
through HDMI port by connecting HDMI to VGA cable, and keyboard and mouse or
else you can interact from any system through SSH (Secure Shell). (For example
in windows you can interact from putty ssh.) Figure is given below.
2)
USB Cameras
USB Cameras are imaging cameras that use USB 2.0 or USB
3.0 technology to transfer image data. USB Cameras are designed to easily
interface with dedicated computer systems by using the same USB technology that
is found on most computers. The accessibility of USB technology in computer
systems as well as the 480 Mb/s transfer rate of USB 2.0 makes USB Cameras
ideal for many imaging applications. An increasing selection of USB 3.0 Cameras
is also available with data transfer rates of up to 5 Gb/s.
Installation
steps for Python OpenCv on Raspberry Pi:
1) sudo apt-get update
2) sudo apt-get upgrade
3) sudo apt-get install build-essential
4) sudo apt-get install cmake git libgtk2.0-dev
pkg-config libavcodec-dev libavformat-dev libswscale-dev
5)sudo apt-get install python-dev python-numpy libtbb2
libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
6) sudo apt-get install python-opencv
7) sudo apt-get install python-matplotlib
Code
of Project:
import argparse
import datetime
import imutils
import math
import cv2
import numpy as np
width = 800
textIn = 0
textOut = 0
def testIntersectionIn(x, y):
res = -450 *
x + 400 * y + 157500
if((res >=
-550) and (res < 550)):
print
(str(res))
return
True
return False
def testIntersectionOut(x, y):
res = -450 *
x + 400 * y + 180000
if ((res
>= -550) and (res <= 550)):
print
(str(res))
return
True
return False
camera = cv2.VideoCapture(0)
firstFrame = None
while True:
(grabbed,
frame) = camera.read()
text =
"Unoccupied"
if not
grabbed:
break
frame =
imutils.resize(frame, width=width)
gray =
cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray =
cv2.GaussianBlur(gray, (21, 21), 0)
if firstFrame
is None:
firstFrame = gray
continue
frameDelta =
cv2.absdiff(firstFrame, gray)
thresh =
cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1]
thresh =
cv2.dilate(thresh, None, iterations=2)
_, cnts, _ =
cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in
cnts:
if
cv2.contourArea(c) < 12000:
continue
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.line(frame, (width / 2, 0), (width, 450), (250, 0, 1), 2) #blue line
cv2.line(frame, (width / 2 - 50, 0), (width - 50, 450), (0, 0, 255),
2)#red line
rectagleCenterPont = ((x + x + w) /2, (y + y + h) /2)
cv2.circle(frame, rectagleCenterPont, 1, (0, 0, 255), 5)
if(testIntersectionIn((x + x + w) / 2, (y + y + h) / 2)):
textIn += 1
if(testIntersectionOut((x
+ x + w) / 2, (y + y + h) / 2)):
textOut += 1
if
cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.putText(frame, "In: {}".format(str(textIn)), (10, 50),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
cv2.putText(frame, "Out: {}".format(str(textOut)), (10, 70),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
cv2.putText(frame, datetime.datetime.now().strftime("%A %d %B %Y
%I:%M:%S%p"),
(10, frame.shape[0] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.35, (0, 0, 255),
1)
cv2.imshow("Security Feed", frame)
camera.release()
cv2.destroyAllWindows()
can you explain what is meant by
ReplyDeletedef testIntersectionIn(x, y):
res = -450 * x + 400 * y + 157500
if((res >= -550) and (res < 550)):
print (str(res))
return True
return False
def testIntersectionOut(x, y):
res = -450 * x + 400 * y + 180000
if ((res >= -550) and (res <= 550)):
print (str(res))
return True
return False