Browse Source

single object detection

git-svn-id: http://newslabx.csie.ntu.edu.tw/svn/Ginger@38 5747cdd2-2146-426f-b2b0-0570f90b98ed
master
Hobe 5 years ago
parent
commit
ff81808d63
3 changed files with 92 additions and 2 deletions
  1. +73
    -0
      trunk/code/detect_object.py
  2. BIN
      trunk/code/output.avi
  3. +19
    -2
      trunk/code/readGridEyeData.py

+ 73
- 0
trunk/code/detect_object.py View File

@ -0,0 +1,73 @@
import readGridEyeData
import sys
import numpy as np
import cv2
SIZE = 8
visible_size = 128
distanceBetweenSensors_w = 2.6 #cm
distanceBetweenSensors_h = 2.6 #cm
distance2Object = 60.0 #cm
OFFSET = ((0, 0), ())
TEMP_SCALE = 20
RED = (0, 0, 255)
GREEN = (0, 255, 0)
BLUE = (255, 0, 0)
background = readGridEyeData.GridEyeData(sys.argv[1])
background_frames = [np.zeros((SIZE,SIZE)), np.zeros((SIZE,SIZE)),
np.zeros((SIZE,SIZE)), np.zeros((SIZE,SIZE))]
cnt = 1
Horizon_array = np.array([[x for x in range(8)] for _ in range(8)])
Vertical_array = np.array([[x for _ in range(8)] for x in range(8)])
# Gets background of each pixel.
while background.readFrame():
frames = background.frames
for i in range(4):
background_frames[i] += np.array(frames[i].data)
cnt += 1
for i in range(4):
background_frames[i]/=cnt
# Reads data from object frames.
objects = readGridEyeData.GridEyeData(sys.argv[2])
while objects.readFrame():
frames = objects.frames
imgs = []
heat_points = []
# Subtracts background and scale the value.
for i in range(4):
frame = np.array(frames[i].data) - background_frames[i]
frame[frame < 0] = 0.0
frame *= TEMP_SCALE
frame[frame > 255] = 255
imgs.append(frame.astype(np.uint8))
x = int(sum(sum(frame * Horizon_array)) / sum(sum(frame)) / (SIZE - 1) *
(visible_size - 1))
y = int(sum(sum(frame * Vertical_array)) / sum(sum(frame)) / (SIZE - 1) *
(visible_size - 1))
heat_points.append((x,y))
print (x, y)
all_img = np.concatenate((np.concatenate((imgs[0], imgs[1]), axis = 1),
np.concatenate((imgs[2], imgs[3]), axis = 1)),
axis = 0)
all_img = cv2.cvtColor(all_img, cv2.COLOR_GRAY2RGB)
all_img = cv2.resize(all_img, (visible_size*2, visible_size*2),
interpolation = cv2.INTER_NEAREST)
cv2.circle(all_img, heat_points[0], 5, RED, -1)
cv2.circle(all_img, (heat_points[1][0]+visible_size, heat_points[1][1]), 5, RED, -1)
cv2.imshow('sample', all_img)
while cv2.getWindowProperty('sample', 0) >= 0:
key = cv2.waitKey(50)
if key >= 0:
break

BIN
trunk/code/output.avi View File


+ 19
- 2
trunk/code/readGridEyeData.py View File

@ -23,6 +23,7 @@ if __name__ == '__main__':
import cv2
import numpy as np
import sys
from functools import reduce
def exponential(img, value):
tmp = cv2.pow(img.astype(np.double), value)*(255.0/(255.0**value))
return tmp.astype(np.uint8)
@ -38,6 +39,9 @@ if __name__ == '__main__':
MIN_EXIST_TIME = 0.1
cnt = 0
avers = []
raw_aver = np.array([0]*64*4, np.float64)
raw_aver2 = np.array([0]*64*4, np.float64)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
videoWriter = cv2.VideoWriter('output.avi', fourcc, 10.0, (SIZE*2,SIZE*4))
@ -53,19 +57,32 @@ if __name__ == '__main__':
innerStartTime = 0
path = []
speed = 0
avers.append(np.zeros((SIZE,SIZE), np.uint16))
avers.append(np.zeros((SIZE,SIZE), np.uint16))
avers.append(np.zeros((SIZE,SIZE), np.uint16))
avers.append(np.zeros((SIZE,SIZE), np.uint16))
while gridEye.readFrame():
frames = gridEye.frames
imgs = []
raw = []
for frame in frames:
img = (np.array(frame.data)-15)*10
img = cv2.resize(img.astype(np.uint8), (SIZE,SIZE), interpolation = cv2.INTER_LINEAR) # INTER_LINEAR, INTER_CUBIC
imgs.append(img)
avers.append(np.zeros((SIZE,SIZE), np.uint16))
raw += reduce(lambda x,y: x+y, frame.data)
raw_aver += np.array(raw)
raw_aver2 += np.array(raw)**2
if cnt < AVERAGE_FRAME:
cnt += 1
for i in range(len(imgs)):
avers[i] += imgs[i]
if cnt == AVERAGE_FRAME:
b = (raw_aver/AVERAGE_FRAME)**2
a = raw_aver2/AVERAGE_FRAME
print ('aver', raw_aver/AVERAGE_FRAME)
print ((a-b)**0.5)
print (sum((a-b)**0.5)/64/4)
exit()
for i in range(len(avers)):
avers[i] = avers[i]/AVERAGE_FRAME
avers[i] = avers[i].astype(np.uint8)
@ -227,4 +244,4 @@ if __name__ == '__main__':
break
videoWriter.release()
cv2.destroyAllWindows()
cv2.destroyAllWindows()

Loading…
Cancel
Save