Init
This commit is contained in:
86
process.py
Normal file
86
process.py
Normal file
@@ -0,0 +1,86 @@
|
||||
import numpy as np
|
||||
import cv2
|
||||
import math
|
||||
import sys
|
||||
|
||||
# Init
|
||||
target = sys.argv[1]
|
||||
cap = cv2.VideoCapture("data/{}.mp4".format(target))
|
||||
cap.set(cv2.CAP_PROP_FPS,240)
|
||||
out = open("{}.tsv".format(target),"w+")
|
||||
out.write("Time\tX\tY\tCount\tVelocity\n")
|
||||
|
||||
# Image Processing
|
||||
scale = 16.0
|
||||
diff_thresh = 50
|
||||
blur_kernel = (7,7)
|
||||
|
||||
# Background
|
||||
bg_alpha = 0.99
|
||||
bg = None
|
||||
bg_float = None
|
||||
|
||||
# Position
|
||||
pos_alpha = 0.99
|
||||
posx = 0.0
|
||||
posy = 0.0
|
||||
|
||||
# Count
|
||||
running_count = 0.0
|
||||
|
||||
# Main Loop
|
||||
frame_number = 0
|
||||
|
||||
while True:
|
||||
# Grab Frame
|
||||
ret, src = cap.read()
|
||||
if not ret:
|
||||
break
|
||||
|
||||
# Ensmallen and grayen
|
||||
blur = cv2.GaussianBlur(src, blur_kernel,0)
|
||||
smol = cv2.resize(blur, (int(src.shape[1]/scale), int(src.shape[0]/scale)))
|
||||
gray = cv2.cvtColor(smol, cv2.COLOR_BGR2GRAY)
|
||||
if bg is None:
|
||||
bg = gray
|
||||
bg_float = np.zeros(gray.shape,dtype=np.float32)
|
||||
|
||||
# Get Difference
|
||||
diff = cv2.absdiff(gray, bg)
|
||||
retval, thresh = cv2.threshold(diff, diff_thresh, 255, cv2.THRESH_TOZERO)
|
||||
|
||||
# Normalize Count
|
||||
count = np.sum(thresh)/(smol.shape[0]*smol.shape[1]*255)
|
||||
|
||||
# Process Count
|
||||
if count > 0.0:
|
||||
moments = cv2.moments(thresh)
|
||||
cX = (moments["m10"] / moments["m00"])/smol.shape[1]
|
||||
cY = (moments["m01"] / moments["m00"])/smol.shape[0]
|
||||
prevx = posx
|
||||
prevy = posy
|
||||
posx = posx * pos_alpha + cX * (1.0-pos_alpha)
|
||||
posy = posy * pos_alpha + cY * (1.0-pos_alpha)
|
||||
velocity = math.sqrt((prevx-posx) * (prevx-posx) + (prevy - posy) * (prevy - posy))
|
||||
running_count = running_count * pos_alpha + count * (1.0 - pos_alpha)
|
||||
out.write("{}\t{}\t{}\t{}\t{}\n".format(frame_number/30.0,posx,posy,running_count,velocity))
|
||||
|
||||
# Calculate new BG
|
||||
bg_float = bg_float * bg_alpha + gray * (1.0 - bg_alpha)
|
||||
bg = bg_float.astype(np.uint8)
|
||||
|
||||
# Draw
|
||||
#cv2.circle(smol, (int(posx*smol.shape[1]), int(posy*smol.shape[0])), 3, (255,0,0),6)
|
||||
|
||||
# Show Results
|
||||
# cv2.imshow("thresh", cv2.resize(thresh, (int(src.shape[1]/2.0), int(src.shape[0]/2.0))))
|
||||
# cv2.imshow("smol", cv2.resize(smol, (int(src.shape[1]/2.0), int(src.shape[0]/2.0))))
|
||||
# key = cv2.waitKey(1)
|
||||
# if key == 27:
|
||||
# break
|
||||
|
||||
frame_number += 1
|
||||
print(frame_number)
|
||||
|
||||
cap.release()
|
||||
cv2.destroyAllWindows()
|
||||
Reference in New Issue
Block a user