Ask Your Question

Revision history [back]

Trying to record whiteboard in lecture

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.

click to hide/show revision 2
None

updated 2018-04-30 04:00:11 -0600

berak gravatar image

Trying to record whiteboard in lecture

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: not:

import numpy as np
import cv2

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

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

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')

cv2.CascadeClassifier('/home/kaan/opencv-3.1.0/data/haarcascades/haarcascade_upperbody.xml') cap = cv2.VideoCapture(0)

cv2.VideoCapture(0) while 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5)

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()

cv2.destroyAllWindows() If I can detect face he is not writing if not he is.

is. And here is the function i use to blur moving objects: import cv2 import numpy as np

np # Initalize webacam and store first frame

frame cap = cv2.VideoCapture(0) ret, frame = cap.read()

cap.read() # Create a flaot numpy array with frame values

values average = np.float32(frame)

np.float32(frame) while True: # Get webcam frmae ret, frame = cap.read()

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()

cv2.destroyAllWindows() cap.release()

But I couldn't find a way to update the rest of the board where the lecturer isn't blocking.