Here is the code for the video motion tracking:
import cv2 import pandas import time from datetime import datetime first_frame = Nonestatus_list = [None, None] times = [] df = pandas.DataFrame(columns=["Start", "End"]) video = cv2.VideoCapture(0) while True: check, frame = video.read() status = 0 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray, (21, 21), 0) if first_frame is None: first_frame = gray continue delta_frame = cv2.absdiff(first_frame, gray) thresh_frame = cv2.threshold(delta_frame, 30, 255, cv2.THRESH_BINARY)[1] thresh_frame = cv2.dilate(thresh_frame, None, iterations=2) (cnts, _) = cv2.findContours(thresh_frame.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for contour in cnts: if cv2.contourArea(contour) < 10000: continue status = 1 (x, y, w, h) = cv2.boundingRect(contour) cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 3) status_list.append(status) status_list=status_list[-2:] if status_list[-1] == 1 and status_list[-2] == 0: times.append(datetime.now()) if status_list[-1] == 0 and status_list[-2] == 1: times.append(datetime.now()) cv2.imshow("Gray Frame", gray) cv2.imshow("Delta Frame", delta_frame) cv2.imshow("Threshold Frame", thresh_frame) cv2.imshow("Color frame", frame) key = cv2.waitKey(1) print(gray) print(delta_frame) if key == ord('q'): if status == 1: times.append(datetime.now()) break print(status_list) print(times) for i in range(0, len(times), 2): df = df.append({"Start": times[i], "End": times[i+1]}, ignore_index=True) df.to_csv("Times.csv") video.release() cv2.destroyAllWindows()
Here is the code for generating the graph:
from motiontracker import df from bokeh.plotting import figure, show, output_file from bokeh.models import HoverTool, ColumnDataSource df["Start_string"] = df["Start"].dt.strftime("%Y-%m-%d %H:%M:%S") df["End_string"] = df["End"].dt.strftime("%Y-%m-%d %H:%M:%S") cds = ColumnDataSource(df) p = figure(x_axis_type='datetime', height=100, width=500, responsive=True, title="Motion Graph") p.yaxis.minor_tick_color = Nonep.ygrid[0].ticker.desired_num_ticks = 1 hover = HoverTool(tooltips=[("Start", "@Start_string"), ("End", "@End_string")]) q = p.quad(left="Start", right="End", bottom=0, top=1, color="blue", source=cds) output_file("Graph.html") show(p)
No comments:
Post a Comment