EET207
Week 4 – Assignment
(Alternate)
Introduction:
This lab is in lieu of Week 4 Lab 2
in the event you do not have access to the Raspberry Pi and/or the Pi web
camera. This lab will use Python on a PC with an attached web camera.
You will install opencv-python from
a terminal prompt and then import cv2 in your Python script.
# You will learn how to connect to
the camera using the web and remotely control the PI camera.
# You will practice how to activate
motion detection such the camera turns on automatically if a motion is
detected.
#You will practice taking a picture
using the web camera.
Lab Materials:
•
The
following components will be needed to complete this LAB:
1.
PC
with Python and PyCharm installed
2.
A
web camera
Instructions:
Step 1:
Install
opencv-python using pip at the terminal
Step 2:
Ensure your PC’s
webcam is enabled.
Step 3:
Display live video
by running the following script
Step 4:
Comment on the
results of step 3 in your submission document.
Step 5:
Take a series of photos
using the following script
Step 6:
Insert at least 3
of the images captured in the previous step. The images should be in the folder
containing your Python project.
Step 7:
Take a screen
capture of the file names captured.
Step 8:
Comment on the
operation of the above program
Step 9:
Write a python
program, based on the program in step 5,
that will take (and save) 3, 4, or 5 photos at 1 second intervals
depending on whether the ‘3’, ‘4’, or ‘5’ key was pressed and then terminate.
No action should occur if any other key is pressed. The photos should be
consecutively numbered. Use loops wherever practical.
Hint:
Consider importing
the time module.
Step 10. Use the following
python script
to detect motion and test
it.
#
Python program to implement
#
Webcam Motion Detector
#
importing OpenCV, time and Pandas library
import
cv2, time, pandas
#
importing datetime class from datetime library
from
datetime
import
datetime
#
Assigning our static_back to None
static_back
=
None
#
List when any moving object appear
motion_list
=
[
None
,
None
]
#
Time of movement
time
=
[]
#
Initializing DataFrame, one column is start
#
time and other column is end time
df
=
pandas.DataFrame(columns
=
[
"Start"
,
"End"
])
#
Capturing video
video
=
cv2.VideoCapture(
0
)
#
Infinite while loop to treat stack of image as video
while
True
:
#
Reading frame(image) from video
check, frame
=
video.read()
# Initializing
motion = 0(no motion)
motion
=
0
#
Converting color image to gray_scale image
gray
=
cv2.cvtColor(frame,
cv2.COLOR_BGR2GRAY)
#
Converting gray scale image to GaussianBlur
#
so that change can be find easily
gray
=
cv2.GaussianBlur(gray, (
21
,
21
),
0
)
#
In first iteration we assign the value
#
of static_back to our first frame
if
static_back
is
None
:
static_back
=
gray
continue
#
Difference between static background
#
and current frame(which is GaussianBlur)
diff_frame
=
cv2.absdiff(static_back, gray)
#
If change in between static background and
#
current frame is greater than 30 it will show white color(255)
thresh_frame
=
cv2.threshold(diff_frame,
30
,
255
, cv2.THRESH_BINARY)[
1
]
thresh_frame
=
cv2.dilate(thresh_frame,
None
, iterations
=
2
)
#
Finding contour of moving object
cnts,_
=
cv2.findContours(thresh_frame.copy(),
cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
for
contour
in
cnts:
if
cv2.contourArea(contour)
10000
:
continue
motion
=
1
(x, y, w, h)
=
cv2.boundingRect(contour)
#
making green rectangle around the moving object
cv2.rectangle(frame, (x, y), (x
+
w, y
+
h), (
0
,
255
,
0
),
3
)
#
Appending status of motion
motion_list.append(motion)
motion_list
=
motion_list[
-
2
:]
#
Appending Start time of motion
if
motion_list[
-
1
]
==
1
and
motion_list[
-
2
]
==
0
:
time.append(datetime.now())
#
Appending End time of motion
if
motion_list[
-
1
]
==
0
and
motion_list[
-
2
]
==
1
:
time.append(datetime.now())
#
Displaying image in gray_scale
cv2.imshow(
"Gray Frame"
, gray)
#
Displaying the difference in currentframe to
#
the staticframe(very first_frame)
cv2.imshow(
"Difference Frame"
, diff_frame)
#
Displaying the black and white image in which if
#
intensity difference greater than 30 it will appear white
cv2.imshow(
"Threshold Frame"
, thresh_frame)
#
Displaying color frame with contour of motion of object
cv2.imshow(
"Color Frame"
, frame)
key
=
cv2.waitKey(
1
)
#
if q entered whole process will stop
if
key
==
ord
(
'q'
):
#
if something is movingthen it append the end time of movement
if
motion
==
1
:
time.append(datetime.now())
break
#
Appending time of motion in DataFrame
for
i
in
range
(
0
,
len
(time),
2
):
df
=
df.append({
"Start"
:time[i],
"End"
:time[i
+
1
]}, ignore_index
=
True
)
#
Creating a CSV file in which time of movements will be saved
df.to_csv(
"Time_of_movements.csv"
)
video.release()
#
Destroying all the windows
cv2.destroyAllWindows()
Step 11. After testing the
script in step 10, provide an analysis of the script. Report any bugs found and
what you would do to correct them.
Step 12.
Submit the
document with required comments and photos along with the python script for
step 9.