So this is my the portion of my code that I believe best describes my issue. I'm using OpenCV to capture 8*frames from 8*cameras. Then I want to take that set of 8 frames and put them into a larger array to store all the frames from the beginning of recording (so I can rewind and look at previous frames).
tmp_vis = [0]*8
frame_tracker = []
while True:
for i in xrange(8):
rets, frame = cap[i].read()
try:
tmp_vis[i] = cv2.resize(frame, (self.w, self.h))
except:
continue
print "\nbreak"
frame_tracker.append(tmp_vis)
print hashlib.sha1(frame_tracker[0][0].view(np.uint8)).hexdigest()
if len(frame_tracker) > 1:
print hashlib.sha1(frame_tracker[1][0].view(np.uint8)).hexdigest()
if len(frame_tracker) > 2:
print hashlib.sha1(frame_tracker[2][0].view(np.uint8)).hexdigest()
The problem is that when I go back to look at previous frames they appear to just be the last set of 8 frames that I appended. So what I expect to see is something like:
break
67bb20b6ad6c14bc99e9f27456d9ec898a1e0eeb
abb6c8046d877200ad85e6315ce4ec3c83ee5842
db27d915b189a89068dafb965f92ff3e4832473f
break
67bb20b6ad6c14bc99e9f27456d9ec898a1e0eeb
abb6c8046d877200ad85e6315ce4ec3c83ee5842
db27d915b189a89068dafb965f92ff3e4832473f
Instead what I see is:
break
bc55af0bb9901c55b7ca63480d93f3b2ef604b02
bc55af0bb9901c55b7ca63480d93f3b2ef604b02
bc55af0bb9901c55b7ca63480d93f3b2ef604b02
break
67bb20b6ad6c14bc99e9f27456d9ec898a1e0eeb
67bb20b6ad6c14bc99e9f27456d9ec898a1e0eeb
67bb20b6ad6c14bc99e9f27456d9ec898a1e0eeb
Now I assume this falls into a mutable default value issue and I've looked at “Least Astonishment” in Python: The Mutable Default Argument but was unable to figure out a solution. The help is greatly appreciated. I've tried to prune the code to the needed stuff, but let me know if I've pruned too much.
Thank You,
Joe
EDIT (Solution):
tmp_vis = []
frame_tracker = []
while True:
for i in xrange(8):
rets, frame = cap[i].read()
try:
tmp_vis.append(cv2.resize(frame, (self.w, self.h)))
except:
continue
print "\nbreak"
frame_tracker.append(tmp_vis)
print hashlib.sha1(frame_tracker[0][0].view(np.uint8)).hexdigest()
if len(frame_tracker) > 1:
print hashlib.sha1(frame_tracker[1][0].view(np.uint8)).hexdigest()
if len(frame_tracker) > 2:
print hashlib.sha1(frame_tracker[2][0].view(np.uint8)).hexdigest()