diff --git a/computer_vision/motion_detection.py b/computer_vision/motion_detection.py new file mode 100644 index 000000000000..0af8e0ca02eb --- /dev/null +++ b/computer_vision/motion_detection.py @@ -0,0 +1,31 @@ +import cv2 + + +def detect_motion(video_source=0): + cap = cv2.VideoCapture(video_source) + ret, frame1 = cap.read() + ret, frame2 = cap.read() + + while cap.isOpened(): + diff = cv2.absdiff(frame1, frame2) + gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY) + blur = cv2.GaussianBlur(gray, (5, 5), 0) + _, thresh = cv2.threshold(blur, 20, 255, cv2.THRESH_BINARY) + dilated = cv2.dilate(thresh, None, iterations=3) + contours, _ = cv2.findContours(dilated, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + + for contour in contours: + if cv2.contourArea(contour) < 1000: + continue + (x, y, w, h) = cv2.boundingRect(contour) + cv2.rectangle(frame1, (x, y), (x + w, y + h), (0, 255, 0), 2) + + cv2.imshow("Motion Detection", frame1) + frame1 = frame2 + ret, frame2 = cap.read() + + if not ret or cv2.waitKey(40) == 27: + break + + cap.release() + cv2.destroyAllWindows()