Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #5
0
    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
Exemple #6
0
    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