def collect_printer_info(self): pdb = PrinterModelDB(self.cls_name) database = [] modeldb = LineModModelDB() for k in range(pdb.image_num): data = {} data['rgb_pth'] = pdb.image_pattern.format(k + 1) data['dpt_pth'] = pdb.mask_pattern.format(k + 1) data['RT'] = pdb.aligned_poses[k] data['K'] = pdb.K[self.cls_name] data['cls_typ'] = self.cls_name data['rnd_typ'] = 'printer' data['corners'] = Projector.project_K( modeldb.get_corners_3d(self.cls_name), data['RT'], pdb.K[self.cls_name]) data['farthest'] = Projector.project_K( modeldb.get_farthest_3d(self.cls_name), data['RT'], pdb.K[self.cls_name]) for num in [4, 12, 16, 20]: data['farthest{}'.format(num)] = Projector.project_K( modeldb.get_farthest_3d(self.cls_name, num), data['RT'], pdb.K[self.cls_name]) data['center'] = Projector.project_K( modeldb.get_centers_3d(self.cls_name)[None, :], data['RT'], pdb.K[self.cls_name]) database.append(data) save_pickle(database, self.printer_pkl) return database
def collect_truncated_set_info(self): database=[] projector=Projector() modeldb=LineModModelDB() img_num=len(os.listdir(os.path.join(self.linemod_dir,self.cls_name,'JPEGImages'))) for k in range(img_num): data={} data['rgb_pth']=os.path.join('truncated',self.cls_name,'{:06}_rgb.jpg'.format(k)) data['dpt_pth']=os.path.join('truncated',self.cls_name,'{:04}_msk.png'.format(k)) pose,K=read_pickle(os.path.join(self.linemod_dir,'truncated',self.cls_name,'{:06}_info.pkl'.format(k))) data['RT']=pose data['cls_typ']=self.cls_name data['rnd_typ']='truncated' data['corners']=projector.project_K(modeldb.get_corners_3d(self.cls_name),data['RT'],K) data['farthest']=projector.project_K(modeldb.get_farthest_3d(self.cls_name),data['RT'],K) for num in [4,12,16,20]: data['farthest{}'.format(num)]=projector.project_K(modeldb.get_farthest_3d(self.cls_name,num),data['RT'],K) data['small_bbox'] = projector.project_K(modeldb.get_small_bbox(self.cls_name), data['RT'], K) data['center']=projector.project_K(modeldb.get_centers_3d(self.cls_name)[None,:],data['RT'],K) # 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'], K) data['K']=K database.append(data) save_pickle(database,self.pkl) return database
def collect_fuse_info(self): database=[] modeldb=LineModModelDB() projector=Projector() for k in range(self.fuse_num): data=dict() data['rgb_pth']=os.path.join(self.fuse_dir, '{}_rgb.jpg'.format(k)) data['dpt_pth']=os.path.join(self.fuse_dir, '{}_mask.png'.format(k)) # if too few foreground pts then continue mask=imread(os.path.join(self.linemod_dir,data['dpt_pth'])) if np.sum(mask==(cfg.linemod_cls_names.index(self.cls_name)+1))<400: continue data['cls_typ']=self.cls_name data['rnd_typ']='fuse' begins,poses=read_pickle(os.path.join(self.linemod_dir,self.fuse_dir,'{}_info.pkl'.format(k))) data['RT'] = poses[self.cls_idx] K=projector.intrinsic_matrix['linemod'].copy() K[0,2]+=begins[self.cls_idx,1] K[1,2]+=begins[self.cls_idx,0] data['K']=K data['corners']=projector.project_K(modeldb.get_corners_3d(self.cls_name),data['RT'],K) data['center']=projector.project_K(modeldb.get_centers_3d(self.cls_name),data['RT'],K) data['farthest']=projector.project_K(modeldb.get_farthest_3d(self.cls_name),data['RT'],K) for num in [4,12,16,20]: data['farthest{}'.format(num)]=projector.project_K(modeldb.get_farthest_3d(self.cls_name,num),data['RT'],K) data['small_bbox'] = projector.project_K(modeldb.get_small_bbox(self.cls_name), data['RT'], K) database.append(data) save_pickle(database,self.fuse_pkl) return database
def generate_mask_image(self): from lib.utils.draw_utils import img_pts_to_pts_img for k in range(0, self.image_num): img_pts = Projector.project_K(self.printer_model_pts.copy(), self.poses[k], self.K['cat']) pts_img = img_pts_to_pts_img(img_pts, 484, 648) imsave(self.mask_pattern.format(k + 1), pts_img.astype(np.uint8))
def validate_original_poses(self): for k in range(0,self.image_num,20): rgb=imread(self.image_pattern.format(k+1)) img_pts=Projector.project_K(self.printer_model_pts.copy(), self.poses[k], self.K['cat']) pts_img=img_pts_to_pts_img(img_pts,484,648) print(self.poses[k]) rgb[pts_img>0]//=2 rgb[pts_img>0]+=np.asarray([127,0,0],np.uint8) plt.imshow(rgb) plt.show()
def validate_aligned_poses(self): aligner=ModelAligner() for k in range(0,self.image_num,20): rgb=imread(self.image_pattern.format(k+1)) pose_aligned=aligner.pose_p2w(self.poses[k]) img_pts=Projector.project_K(self.model_pts.copy(), pose_aligned, self.K['cat']) pts_img=img_pts_to_pts_img(img_pts,484,648) rgb[pts_img>0]//=2 rgb[pts_img>0]+=np.asarray([127,0,0],np.uint8) plt.imshow(rgb) plt.show()