Hey I'm trying to record whiteboard in a lecture. I tried to extract background to ignore lecturer but if the lecturer moves slowly or spends some time on the board it will blur the image and lecturer will block the notes on the board. Now I'm trying different approach. If a lecturer is looking at the camera I will not update background image. If the lecturer is writing on the board I will update board picture. My question is how can i get the image of the board only and not the lecturer?
Here's how i will decide if lecturer is writing or not: import numpy as np import cv2
multiple cascades: https://github.com/Itseez/opencv/tree/master/data/haarcascades
https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
body_cascade = cv2.CascadeClassifier('/home/kaan/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_default.xml')
https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_eye.xml
face_cascade = cv2.CascadeClassifier('/home/kaan/opencv-3.1.0/data/haarcascades/haarcascade_upperbody.xml')
cap = cv2.VideoCapture(0)
while 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
roi_gray = gray[y:y + h, x:x + w]
roi_color = img[y:y + h, x:x + w]
bodies = body_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in bodies:
cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
cv2.imshow('img', img)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release() cv2.destroyAllWindows()
If I can detect face he is not writing if not he is.
And here is the function i use to blur moving objects: import cv2 import numpy as np
Initalize webacam and store first frame
cap = cv2.VideoCapture(0) ret, frame = cap.read()
Create a flaot numpy array with frame values
average = np.float32(frame)
while True: # Get webcam frmae ret, frame = cap.read()
# 0.01 is the weight of image, play around to see how it changes
cv2.accumulateWeighted(frame, average, 0.01)
# Scales, calculates absolute values, and converts the result to 8-bit
background = cv2.convertScaleAbs(average)
canny = cv2.Canny(background, 100, 200)
cv2.imshow('Input', frame)
cv2.imshow('Disapearing Background', background)
cv2.imshow('Canny Disappearing', canny)
if cv2.waitKey(1) == 13: # 13 is the Enter Key
break
cv2.destroyAllWindows() cap.release()
But I couldn't find a way to update the rest of the board where the lecturer isn't blocking.