Exemplo n.º 1
0
 def __init__(self,
              img_dir,
              anno_path,
              batch_size,
              pl=10,
              ps=4,
              l1=368,
              l2=46):
     self.img_dir = img_dir
     with open(anno_path, 'rb') as f:
         self.data = pickle.load(f)
     self.batch_size = batch_size
     self.index = 0
     self.volumn = len(self.data)
     self.length = l1
     self.short = l2
     self.patch_l = pl
     self.patch_s = ps
     random.shuffle(self.data)
     self.patch = util.get_patch(self.patch_l, self.patch_s)
     self.ones = np.ones((self.patch_l, self.patch_l, 2))
     self.limbs = util.get_limbs()
     self.mean = np.array([122.35131039, 115.17054545, 107.60200075])
     self.var = np.array([35.77071304, 35.39201422, 37.7260754])
     # np.random.seed(822)
     print('DirReader initialized. Data volumn %d, batch size %d.' \
       % (self.volumn, self.batch_size))
Exemplo n.º 2
0
 def __init__(self,
              img_dir,
              anno_path,
              batch_size,
              pl=10,
              ps=4,
              h=480,
              w=272):
     self.img_dir = img_dir
     with open(anno_path, 'rb') as f:
         self.data = pickle.load(f)
     self.batch_size = batch_size
     self.index = 0
     self.volumn = len(self.data)
     self.height = h
     self.width = w
     self.patch_l = pl
     self.patch_s = ps
     random.shuffle(self.data)
     self.patch = util.get_patch(pl, ps)
     self.limbs = util.get_limbs()
     self.mean = np.array([122.35131039, 115.17054545, 107.60200075])
     self.var = np.array([35.77071304, 35.39201422, 37.7260754])
     # np.random.seed(822)
     print('Reader initialized. Data volumn %d, batch size %d.' \
       % (self.volumn, self.batch_size))
Exemplo n.º 3
0
def reconstruct(dmap, kmap, mask_r, pl=10, ps=4):
  h, w, _ = dmap.shape
  grid_h, grid_w = util.get_grid(h, w)
  connections = util.get_connections()
  limbs = util.get_limbs()
  patch = util.get_patch(pl, ps)

  humans = [] # store the annotation for each human
  q = queue.Queue() # store the layers to be extended from
  used = [False] * 14 # store wether the layer has been explored
  starters, layer = find_outstander(kmap, mask_r, patch)

  # print(layer)
  # print(starters)
  # print(dmap[8,41,0])
  # print(dmap[8,41,1])
  # print(dmap[8,41,26])
  # print(dmap[8,41,27])


  for p in starters:
    dic = {}
    dic[layer] = p
    humans.append(dic)

  q.put(layer)
  used[layer] = True

  debug_cnt = 0

  while True:
    if q.empty():
      # print('empty')
      break
    layer1 = q.get()
    # print('from', layer1)
    starters = []
    for i,h in enumerate(humans):
      if layer1 in h.keys():
        starters.append((h[layer1], i))
    for piece in connections[layer1]:
      debug_cnt += 1
      # if debug_cnt == 2:
      #   return humans
      layer2, sign, d_layer = piece
      if used[layer2]:
        continue
      used[layer2] = True
      q.put(layer2)
      # print('finding', layer2)
      # print('sign', sign)
      # print('dmap layer', d_layer)
      k_slice = kmap[:,:,layer2]

      # in limbs, the vector is from START to END
      # in connections, sign = -1 means layer2 is START
      # forward is from layer1's view to layer2
      # backward is from layer2's view to layer1
      # d_layer is the layer stores vector from START to END

      # so, if sign = 1, layer1 is START, layer2 is END
      # and, dx_forward is from layer1 to layer2
      # so
      dx_forward = dmap[:,:,d_layer*2]
      dy_forward = dmap[:,:,d_layer*2+1]
      dx_backward = dmap[:,:,d_layer*2+26]
      dy_backward = dmap[:,:,d_layer*2+26+1]

      # else, if sign = -1, layer1 is END, layer2 is START
      # and, dx_forward is from layer1 to layer2
      # so
      if sign == -1:
        dx_forward, dx_backward = dx_backward, dx_forward
        dy_forward, dy_backward = dy_backward, dy_forward

      mask_log = group_match(starters, dx_forward, dy_forward, dx_backward, dy_backward, grid_h, grid_w, k_slice, mask_r, patch)
      trans_mask_log(mask_log, layer2, humans)
      # for h in humans:
      #   print(h)
      # print('\n')
      # print(humans)
      # print('mask_log')
      # print(mask_log)

  return humans
Exemplo n.º 4
0
names = os.listdir(test_path)

inflow, dmaps = network.v10()

sess = tf.Session()
saver = tf.train.Saver()

ckpt = tf.train.get_checkpoint_state(model_path)
if ckpt:
  saver.restore(sess, ckpt.model_checkpoint_path)
  print(ckpt.model_checkpoint_path)
else:
  print('No available ckpt.')

limbs = util.get_limbs()
connections = util.get_connections()
patch = util.get_patch(10, 4)
result = []
mean = np.array([122.35131039, 115.17054545, 107.60200075])
var = np.array([35.77071304, 35.39201422, 37.7260754])
for name in names:
  tic = time.time()
  src = misc.imread(test_path+name)
  imgs, lefts, tops, rate = util.multi_resize(src, 368, 24)

  imgs -= mean
  imgs /= var

  rate /= 8 # due to pooling
  batch_dmaps = sess.run(dmaps, feed_dict={inflow:imgs})[-1]
Exemplo n.º 5
0
    tmp = []
    for k in range(14):
      if k in h.keys():
        tmp.append(int(round(h[k][0] / rate)))
        tmp.append(int(round(h[k][1] / rate)))
        tmp.append(1)
      else:
        tmp.append(0)
        tmp.append(0)
        tmp.append(0)
    ret['keypoint_annotations']['human%d'%(cnt+1)] = tmp
  return ret

if __name__ == '__main__':
  dmap = np.load('dmap.npy')
  kmap = util.get_kmap_from_dmap(dmap, util.get_limbs())
  humans = reconstruct(dmap, kmap, 5)
  annos = format(humans, 'sample', 0.05958549222797927461139896373057)
  # print(annos)

  for i in range(len(annos['keypoint_annotations'])):
    k_rev = util.get_key_hmap((772, 950), [annos['keypoint_annotations']['human%d'%(i+1)]], util.get_patch(40,32), r=20)
    src = misc.imread('ffa97d027dfc2f2fc62692a035535579c5be74e0.jpg')
    util.cover_key_map(src, k_rev)
    misc.imsave('vis_anno_%d.jpg'%i, src)
  
  # outstander, layer = find_outstander(kmap, 10)
  # print(layer)
  # print(outstander)