0

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() 
Community
  • 1
  • 1
Joe
  • 3
  • 2

1 Answers1

0
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() 
Joe
  • 3
  • 2