Assignment_2
This commit is contained in:
parent
5c231bad3d
commit
d99d74d557
|
@ -0,0 +1,32 @@
|
|||
import cv2
|
||||
|
||||
# read webcam
|
||||
webcam = cv2.VideoCapture(0)
|
||||
|
||||
# visualize webcam
|
||||
|
||||
while True:
|
||||
ret, frame = webcam.read()
|
||||
|
||||
# Three vertices(tuples) of the triangle
|
||||
p1 = (0, 20)
|
||||
p2 = (640, 20)
|
||||
p3 = (320, 480)
|
||||
|
||||
# Drawing the triangle with the help of lines
|
||||
# on the black window With given points
|
||||
# cv2.line is the inbuilt function in opencv library
|
||||
cv2.line(frame, p1, p2, (255, 0, 0), 3)
|
||||
cv2.line(frame, p2, p3, (255, 0, 0), 3)
|
||||
cv2.line(frame, p1, p3, (255, 0, 0), 3)
|
||||
|
||||
cv2.putText(frame, 'Hello World', (240, 240), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 0), 4)
|
||||
|
||||
cv2.imshow('frame', frame)
|
||||
if cv2.waitKey(40) & 0xFF == ord('q'):
|
||||
break
|
||||
|
||||
|
||||
|
||||
webcam.release()
|
||||
cv2.destroyAllWindows()
|
|
@ -0,0 +1,42 @@
|
|||
import cv2
|
||||
import numpy as np
|
||||
|
||||
# read webcam
|
||||
webcam = cv2.VideoCapture(0)
|
||||
|
||||
# visualize webcam
|
||||
|
||||
while True:
|
||||
ret, frame = webcam.read()
|
||||
|
||||
Blur = cv2.medianBlur(frame,3)
|
||||
dimensions = frame.shape
|
||||
|
||||
grayimg = cv2.cvtColor(Blur, cv2.COLOR_BGR2GRAY)
|
||||
circles = cv2.HoughCircles(grayimg, cv2.HOUGH_GRADIENT,1.2,dimensions[0]/50)
|
||||
|
||||
thickness = 2
|
||||
#Draw detected circles
|
||||
if circles is not None:
|
||||
print("Found circle")
|
||||
circles = np.uint16(circles[0,:])
|
||||
#print(circles)
|
||||
print(type(circles.shape))
|
||||
for (x, y, diameter) in circles:
|
||||
#draw the outer circle
|
||||
cv2.circle(frame, (x,y), diameter, (0,0,255), thickness, cv2.LINE_AA)
|
||||
#draw the outer circle
|
||||
cv2.circle(frame, (x,y), 2, (0,0,255), thickness, cv2.LINE_AA)
|
||||
cv2.putText(frame, 'Total Circles: ' + str(circles.shape[0]), (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 0), 4)
|
||||
|
||||
else:
|
||||
print("Cannot detect circle.")
|
||||
|
||||
cv2.imshow('frame', frame)
|
||||
if cv2.waitKey(40) & 0xFF == ord('q'):
|
||||
break
|
||||
|
||||
|
||||
|
||||
webcam.release()
|
||||
cv2.destroyAllWindows()
|
|
@ -0,0 +1,194 @@
|
|||
import numpy as np
|
||||
import pandas as pd
|
||||
import cv2
|
||||
#from google.colab.patches import cv2_imshow
|
||||
#Import everything needed to edit/save/watch video clips
|
||||
from moviepy import editor
|
||||
import moviepy
|
||||
|
||||
def region_selection(image):
|
||||
"""
|
||||
Determine and cut the region of interest in the input image.
|
||||
Parameters:
|
||||
image: we pass here the output from canny where we have
|
||||
identified edges in the frame
|
||||
"""
|
||||
# create an array of the same size as of the input image
|
||||
mask = np.zeros_like(image)
|
||||
# if you pass an image with more then one channel
|
||||
if len(image.shape) > 2:
|
||||
channel_count = image.shape[2]
|
||||
ignore_mask_color = (255,) * channel_count
|
||||
# our image only has one channel so it will go under "else"
|
||||
else:
|
||||
# color of the mask polygon (white)
|
||||
ignore_mask_color = 255
|
||||
# creating a polygon to focus only on the road in the picture
|
||||
# we have created this polygon in accordance to how the camera was placed
|
||||
rows, cols = image.shape[:2]
|
||||
bottom_left = [cols * 0.1, rows * 0.95]
|
||||
top_left = [cols * 0.4, rows * 0.6]
|
||||
bottom_right = [cols * 0.9, rows * 0.95]
|
||||
top_right = [cols * 0.6, rows * 0.6]
|
||||
vertices = np.array([[bottom_left, top_left, top_right, bottom_right]], dtype=np.int32)
|
||||
# filling the polygon with white color and generating the final mask
|
||||
cv2.fillPoly(mask, vertices, ignore_mask_color)
|
||||
# performing Bitwise AND on the input image and mask to get only the edges on the road
|
||||
masked_image = cv2.bitwise_and(image, mask)
|
||||
return masked_image
|
||||
|
||||
def hough_transform(image):
|
||||
"""
|
||||
Determine and cut the region of interest in the input image.
|
||||
Parameter:
|
||||
image: grayscale image which should be an output from the edge detector
|
||||
"""
|
||||
# Distance resolution of the accumulator in pixels.
|
||||
rho = 1
|
||||
# Angle resolution of the accumulator in radians.
|
||||
theta = np.pi/180
|
||||
# Only lines that are greater than threshold will be returned.
|
||||
threshold = 20
|
||||
# Line segments shorter than that are rejected.
|
||||
minLineLength = 20
|
||||
# Maximum allowed gap between points on the same line to link them
|
||||
maxLineGap = 500
|
||||
# function returns an array containing dimensions of straight lines
|
||||
# appearing in the input image
|
||||
return cv2.HoughLinesP(image, rho = rho, theta = theta, threshold = threshold,
|
||||
minLineLength = minLineLength, maxLineGap = maxLineGap)
|
||||
|
||||
def average_slope_intercept(lines):
|
||||
"""
|
||||
Find the slope and intercept of the left and right lanes of each image.
|
||||
Parameters:
|
||||
lines: output from Hough Transform
|
||||
"""
|
||||
left_lines = [] #(slope, intercept)
|
||||
left_weights = [] #(length,)
|
||||
right_lines = [] #(slope, intercept)
|
||||
right_weights = [] #(length,)
|
||||
|
||||
for line in lines:
|
||||
for x1, y1, x2, y2 in line:
|
||||
if x1 == x2:
|
||||
continue
|
||||
# calculating slope of a line
|
||||
slope = (y2 - y1) / (x2 - x1)
|
||||
# calculating intercept of a line
|
||||
intercept = y1 - (slope * x1)
|
||||
# calculating length of a line
|
||||
length = np.sqrt(((y2 - y1) ** 2) + ((x2 - x1) ** 2))
|
||||
# slope of left lane is negative and for right lane slope is positive
|
||||
if slope < 0:
|
||||
left_lines.append((slope, intercept))
|
||||
left_weights.append((length))
|
||||
else:
|
||||
right_lines.append((slope, intercept))
|
||||
right_weights.append((length))
|
||||
#
|
||||
left_lane = np.dot(left_weights, left_lines) / np.sum(left_weights) if len(left_weights) > 0 else None
|
||||
right_lane = np.dot(right_weights, right_lines) / np.sum(right_weights) if len(right_weights) > 0 else None
|
||||
return left_lane, right_lane
|
||||
|
||||
def pixel_points(y1, y2, line):
|
||||
"""
|
||||
Converts the slope and intercept of each line into pixel points.
|
||||
Parameters:
|
||||
y1: y-value of the line's starting point.
|
||||
y2: y-value of the line's end point.
|
||||
line: The slope and intercept of the line.
|
||||
"""
|
||||
if line is None:
|
||||
return None
|
||||
slope, intercept = line
|
||||
x1 = int((y1 - intercept)/slope)
|
||||
x2 = int((y2 - intercept)/slope)
|
||||
y1 = int(y1)
|
||||
y2 = int(y2)
|
||||
return ((x1, y1), (x2, y2))
|
||||
|
||||
def lane_lines(image, lines):
|
||||
"""
|
||||
Create full lenght lines from pixel points.
|
||||
Parameters:
|
||||
image: The input test image.
|
||||
lines: The output lines from Hough Transform.
|
||||
"""
|
||||
left_lane, right_lane = average_slope_intercept(lines)
|
||||
y1 = image.shape[0]
|
||||
y2 = y1 * 0.6
|
||||
left_line = pixel_points(y1, y2, left_lane)
|
||||
right_line = pixel_points(y1, y2, right_lane)
|
||||
return left_line, right_line
|
||||
|
||||
|
||||
def draw_lane_lines(image, lines, color=[255, 0, 0], thickness=12):
|
||||
"""
|
||||
Draw lines onto the input image.
|
||||
Parameters:
|
||||
image: The input test image (video frame in our case).
|
||||
lines: The output lines from Hough Transform.
|
||||
color (Default = red): Line color.
|
||||
thickness (Default = 12): Line thickness.
|
||||
"""
|
||||
line_image = np.zeros_like(image)
|
||||
for line in lines:
|
||||
if line is not None:
|
||||
cv2.line(line_image, *line, color, thickness)
|
||||
return cv2.addWeighted(image, 1.0, line_image, 1.0, 0.0)
|
||||
|
||||
def frame_processor(image):
|
||||
"""
|
||||
Process the input frame to detect lane lines.
|
||||
Parameters:
|
||||
image: image of a road where one wants to detect lane lines
|
||||
(we will be passing frames of video to this function)
|
||||
"""
|
||||
# convert the RGB image to Gray scale
|
||||
grayscale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
||||
# applying gaussian Blur which removes noise from the image
|
||||
# and focuses on our region of interest
|
||||
# size of gaussian kernel
|
||||
kernel_size = 5
|
||||
# Applying gaussian blur to remove noise from the frames
|
||||
blur = cv2.GaussianBlur(grayscale, (kernel_size, kernel_size), 0)
|
||||
# first threshold for the hysteresis procedure
|
||||
low_t = 50
|
||||
# second threshold for the hysteresis procedure
|
||||
high_t = 150
|
||||
# applying canny edge detection and save edges in a variable
|
||||
edges = cv2.Canny(blur, low_t, high_t)
|
||||
# since we are getting too many edges from our image, we apply
|
||||
# a mask polygon to only focus on the road
|
||||
# Will explain Region selection in detail in further steps
|
||||
region = region_selection(edges)
|
||||
# Applying hough transform to get straight lines from our image
|
||||
# and find the lane lines
|
||||
# Will explain Hough Transform in detail in further steps
|
||||
hough = hough_transform(region)
|
||||
#lastly we draw the lines on our resulting frame and return it as output
|
||||
result = draw_lane_lines(image, lane_lines(image, hough))
|
||||
return result
|
||||
|
||||
# driver function
|
||||
def process_video(test_video, output_video):
|
||||
"""
|
||||
Read input video stream and produce a video file with detected lane lines.
|
||||
Parameters:
|
||||
test_video: location of input video file
|
||||
output_video: location where output video file is to be saved
|
||||
"""
|
||||
# read the video file using VideoFileClip without audio
|
||||
input_video = editor.VideoFileClip(test_video, audio=False)
|
||||
# apply the function "frame_processor" to each frame of the video
|
||||
# will give more detail about "frame_processor" in further steps
|
||||
# "processed" stores the output video
|
||||
processed = input_video.fl_image(frame_processor)
|
||||
# save the output video stream to an mp4 file
|
||||
processed.write_videofile(output_video, audio=False)
|
||||
|
||||
# calling driver function
|
||||
#process_video('input.mp4','output.mp4')
|
||||
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
import numpy as np
|
||||
import cv2
|
||||
|
||||
names = ['input.mp4', 'output.mp4']
|
||||
window_titles = ['input', 'output']
|
||||
|
||||
|
||||
cap = [cv2.VideoCapture(i) for i in names]
|
||||
|
||||
frames = [None] * len(names);
|
||||
gray = [None] * len(names);
|
||||
ret = [None] * len(names);
|
||||
|
||||
while True:
|
||||
|
||||
for i,c in enumerate(cap):
|
||||
if c is not None:
|
||||
ret[i], frames[i] = c.read();
|
||||
|
||||
|
||||
for i,f in enumerate(frames):
|
||||
if ret[i] is True:
|
||||
#gray[i] = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
|
||||
#cv2.imshow(window_titles[i], gray[i]);
|
||||
cv2.imshow(window_titles[i], frames[i]);
|
||||
|
||||
if cv2.waitKey(1) & 0xFF == ord('q'):
|
||||
break
|
||||
|
||||
|
||||
for c in cap:
|
||||
if c is not None:
|
||||
c.release();
|
||||
|
||||
cv2.destroyAllWindows()
|
|
@ -0,0 +1,34 @@
|
|||
import face_recognition
|
||||
import cv2
|
||||
|
||||
# read webcam
|
||||
video_capture = cv2.VideoCapture(0)
|
||||
|
||||
# visualize webcam
|
||||
winname = "Test"
|
||||
|
||||
while True:
|
||||
ret, frame = video_capture.read()
|
||||
|
||||
face_location = face_recognition.face_locations(frame)
|
||||
print(face_location)
|
||||
#print("There are " + str(len(face_location)) + " people in this image.")
|
||||
|
||||
if(len(face_location) > 0):
|
||||
for index in range(0, len(face_location)):
|
||||
x0 = face_location[index][3] #left
|
||||
y0 = face_location[index][0] #Top
|
||||
x1 = face_location[index][1] #Bottom
|
||||
y1 = face_location[index][2] #Right
|
||||
cv2.rectangle(frame, (x0, y0), (x1,y1), (255,0,0),3)
|
||||
|
||||
cv2.putText(frame, 'Total People: ' + str(len(face_location)), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 0), 4)
|
||||
|
||||
cv2.namedWindow(winname)
|
||||
cv2.moveWindow(winname, 40,30) # Move it to (40,30)
|
||||
cv2.imshow('frame', frame)
|
||||
if cv2.waitKey(1) & 0xFF == ord('q'):
|
||||
break
|
||||
|
||||
webcam.release()
|
||||
cv2.destroyAllWindows()
|
|
@ -0,0 +1,31 @@
|
|||
import cv2
|
||||
|
||||
vcap = cv2.VideoCapture(0) # built-in webcamera
|
||||
|
||||
#vcap = cv2.VideoCapture('video.avi')
|
||||
|
||||
if vcap.isOpened():
|
||||
width = vcap.get(cv2.CAP_PROP_FRAME_WIDTH) # float `width`
|
||||
height = vcap.get(cv2.CAP_PROP_FRAME_HEIGHT) # float `height`
|
||||
# or
|
||||
width = vcap.get(3) # float `width`
|
||||
height = vcap.get(4) # float `height`
|
||||
|
||||
print('width, height:', width, height)
|
||||
|
||||
fps = vcap.get(cv2.CAP_PROP_FPS)
|
||||
# or
|
||||
fps = vcap.get(5)
|
||||
|
||||
print('fps:', fps) # float `fps`
|
||||
|
||||
frame_count = vcap.get(cv2.CAP_PROP_FRAME_COUNT)
|
||||
# or
|
||||
frame_count = vcap.get(7)
|
||||
|
||||
print('frames count:', frame_count) # float `frame_count`
|
||||
|
||||
#print('cv2.CAP_PROP_FRAME_WIDTH :', cv2.CAP_PROP_FRAME_WIDTH) # 3
|
||||
#print('cv2.CAP_PROP_FRAME_HEIGHT:', cv2.CAP_PROP_FRAME_HEIGHT) # 4
|
||||
#print('cv2.CAP_PROP_FPS :', cv2.CAP_PROP_FPS) # 5
|
||||
#print('cv2.CAP_PROP_FRAME_COUNT :', cv2.CAP_PROP_FRAME_COUNT) # 7
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue