def collect_real_set_info(self): database=[] projector=Projector() modeldb=LineModModelDB() transformer=PoseTransformer(class_type=self.cls_name) img_num=len(os.listdir(os.path.join(self.linemod_dir,self.rgb_dir))) print(img_num) for k in range(img_num): data={} data['rgb_pth']=os.path.join(self.rgb_dir,'color_{:05}.png'.format(k)) data['dpt_pth']=os.path.join(self.mask_dir,'{}.png'.format(k)) pose=self.read_pose(os.path.join(self.rt_dir,'info_{:05}.txt'.format(k))) if len(pose)==0: # os.system('cp {} ./{:05}.png'.format(os.path.join(cfg.OCCLUSION_LINEMOD,data['rgb_pth']),k)) continue data['RT']=transformer.occlusion_pose_to_blender_pose(pose) data['cls_typ']=self.cls_name data['rnd_typ']='real' data['corners']=projector.project(modeldb.get_corners_3d(self.cls_name),data['RT'],'linemod') data['farthest']=projector.project(modeldb.get_farthest_3d(self.cls_name),data['RT'],'linemod') for num in [4,12,16,20]: data['farthest{}'.format(num)]=projector.project(modeldb.get_farthest_3d(self.cls_name,num),data['RT'],'linemod') data['center']=projector.project(modeldb.get_centers_3d(self.cls_name)[None,:],data['RT'],'linemod') data['small_bbox'] = projector.project(modeldb.get_small_bbox(self.cls_name), data['RT'], 'linemod') axis_direct=np.concatenate([np.identity(3), np.zeros([3, 1])], 1).astype(np.float32) data['van_pts']=projector.project_h(axis_direct, data['RT'], 'blender') database.append(data) save_pickle(database,self.real_pkl) return database
def collect_ms_info(self): database=[] projector=Projector() model_db=LineModModelDB() for k in range(self.ms_num): data=dict() data['rgb_pth']=os.path.join(self.ms_dir, '{}.jpg'.format(k)) data['dpt_pth']=os.path.join(self.ms_dir, '{}_{}_mask.png'.format(k,self.cls_name)) # if too few foreground pts then continue mask=imread(os.path.join(self.linemod_dir,data['dpt_pth'])) if np.sum(mask)<5: continue data['RT'] = read_pickle(os.path.join(self.linemod_dir, self.ms_dir, '{}_{}_RT.pkl'.format(self.cls_name,k)))['RT'] data['cls_typ']=self.cls_name data['rnd_typ']='render_multi' data['corners']=projector.project(model_db.get_corners_3d(self.cls_name),data['RT'],'blender') data['farthest']=projector.project(model_db.get_farthest_3d(self.cls_name),data['RT'],'blender') for num in [4,12,16,20]: data['farthest{}'.format(num)]=projector.project(modeldb.get_farthest_3d(self.cls_name,num),data['RT'],'blender') data['center']=projector.project(model_db.get_centers_3d(self.cls_name)[None,:],data['RT'],'blender') data['small_bbox'] = projector.project(modeldb.get_small_bbox(self.cls_name), data['RT'], 'blender') axis_direct=np.concatenate([np.identity(3), np.zeros([3, 1])], 1).astype(np.float32) data['van_pts']=projector.project_h(axis_direct, data['RT'], 'blender') database.append(data) save_pickle(database,self.ms_pkl) return database
def collect_real_set_info(self): # linemod standard database=[] projector=Projector() modeldb=LineModModelDB() img_num=len(os.listdir(os.path.join(self.linemod_dir,self.rgb_dir))) for k in range(img_num): data={} data['rgb_pth']=os.path.join(self.rgb_dir, '{:06}.jpg'.format(k)) data['dpt_pth']=os.path.join(self.mask_dir, '{:04}.png'.format(k)) pose=read_pose(os.path.join(self.rt_dir, 'rot{}.rot'.format(k)), os.path.join(self.rt_dir, 'tra{}.tra'.format(k))) pose_transformer = PoseTransformer(class_type=self.cls_name) data['RT'] = pose_transformer.orig_pose_to_blender_pose(pose).astype(np.float32) data['cls_typ']=self.cls_name data['rnd_typ']='real' data['corners']=projector.project(modeldb.get_corners_3d(self.cls_name),data['RT'],'linemod') data['farthest']=projector.project(modeldb.get_farthest_3d(self.cls_name),data['RT'],'linemod') for num in [4,12,16,20]: data['farthest{}'.format(num)]=projector.project(modeldb.get_farthest_3d(self.cls_name,num),data['RT'],'linemod') data['center']=projector.project(modeldb.get_centers_3d(self.cls_name)[None, :],data['RT'],'linemod') data['small_bbox'] = projector.project(modeldb.get_small_bbox(self.cls_name), data['RT'], 'linemod') axis_direct=np.concatenate([np.identity(3), np.zeros([3, 1])], 1).astype(np.float32) data['van_pts']=projector.project_h(axis_direct, data['RT'], 'linemod') database.append(data) save_pickle(database,self.set_pkl) return database
def collect_real_set_info(self): ''' pvnet 的数据集linemod有做更改, cat.ply 与原始的linemod中的cat.ply,有模型偏移和旋转, 所以 原始数据集中的pose真值,需要 简单变换,就是这边数据集的 pose 会这样问了,既然图片数据集 这是没有改变的,怎么RT改变呢 因为 这边提的3d特征是 新的model上取的,所以计算RT的时候, RT要变的 pose_real.pkl ''' database = [] projector = Projector() modeldb = LineModModelDB() img_num = len(os.listdir(os.path.join(self.linemod_dir, self.rgb_dir))) for k in range(img_num): data = {} data['rgb_pth'] = os.path.join(self.rgb_dir, '{:06}.jpg'.format(k)) data['dpt_pth'] = os.path.join(self.mask_dir, '{:04}.png'.format(k)) pose = read_pose(os.path.join(self.rt_dir, 'rot{}.rot'.format(k)), os.path.join(self.rt_dir, 'tra{}.tra'.format(k))) pose_transformer = PoseTransformer(class_type=self.cls_name) data['RT'] = pose_transformer.orig_pose_to_blender_pose( pose).astype(np.float32) data['cls_typ'] = self.cls_name data['rnd_typ'] = 'real' data['corners'] = projector.project( modeldb.get_corners_3d(self.cls_name), data['RT'], 'linemod') data['farthest'] = projector.project( modeldb.get_farthest_3d(self.cls_name), data['RT'], 'linemod') for num in [4, 12, 16, 20]: data['farthest{}'.format(num)] = projector.project( modeldb.get_farthest_3d(self.cls_name, num), data['RT'], 'linemod') data['center'] = projector.project( modeldb.get_centers_3d(self.cls_name)[None, :], data['RT'], 'linemod') data['small_bbox'] = projector.project( modeldb.get_small_bbox(self.cls_name), data['RT'], 'linemod') axis_direct = np.concatenate( [np.identity(3), np.zeros([3, 1])], 1).astype(np.float32) data['van_pts'] = projector.project_h(axis_direct, data['RT'], 'linemod') database.append(data) save_pickle(database, self.real_pkl) return database
def collect_render_set_info(self,pkl_file,render_dir,format='jpg'): database=[] # blender standard projector=Projector() modeldb=LineModModelDB() for k in range(self.render_num): data={} data['rgb_pth']=os.path.join(render_dir,'{}.{}'.format(k,format)) data['RT']=read_pickle(os.path.join(self.linemod_dir,render_dir,'{}_RT.pkl'.format(k)))['RT'] data['cls_typ']=self.cls_name data['rnd_typ']='render' data['corners']=projector.project(modeldb.get_corners_3d(self.cls_name),data['RT'],'blender') data['farthest']=projector.project(modeldb.get_farthest_3d(self.cls_name),data['RT'],'blender') data['center']=projector.project(modeldb.get_centers_3d(self.cls_name)[None,:],data['RT'],'blender') for num in [4,12,16,20]: data['farthest{}'.format(num)]=projector.project(modeldb.get_farthest_3d(self.cls_name,num),data['RT'],'blender') data['small_bbox'] = projector.project(modeldb.get_small_bbox(self.cls_name), data['RT'], 'blender') axis_direct=np.concatenate([np.identity(3), np.zeros([3, 1])], 1).astype(np.float32) data['van_pts']=projector.project_h(axis_direct, data['RT'], 'blender') database.append(data) save_pickle(database,pkl_file) return database
def collect_val_render(self, pkl_file, render_dir, format='jpg'): database = [] projector = Projector() modeldb = HomemadeModelDB() for k in range(3482, 3499): data = {} print(os.path.join(self.render_val_dir, '{}.{}'.format(k, format))) data['rgb_pth'] = os.path.join(self.render_val_dir, '{}.{}'.format(k, format)) data['dpt_pth'] = os.path.join(self.render_val_dir, '{}_depth.png'.format(k)) data['RT'] = read_pickle( os.path.join(self.homemade_dir, self.render_val_dir, '{}_RT.pkl'.format(k)))['RT'] data['cls_typ'] = self.cls_name data['rnd_typ'] = 'render' data['corners'] = projector.project( modeldb.get_corners_3d(self.cls_name), data['RT'], 'blender') data['farthest'] = projector.project( modeldb.get_farthest_3d(self.cls_name), data['RT'], 'blender') data['center'] = projector.project( modeldb.get_centers_3d(self.cls_name)[None, :], data['RT'], 'blender') for num in [4, 12, 16, 20]: data['farthest{}'.format(num)] = projector.project( modeldb.get_farthest_3d(self.cls_name, num), data['RT'], 'blender') data['small_bbox'] = projector.project( modeldb.get_small_bbox(self.cls_name), data['RT'], 'blender') axis_direct = np.concatenate( [np.identity(3), np.zeros([3, 1])], 1).astype(np.float32) data['van_pts'] = projector.project_h(axis_direct, data['RT'], 'blender') database.append(data) print("collectval successful?: length = ", len(database)) save_pickle(database, pkl_file) return database