PointNet_sem_seg制作npy数据集文件

代码中利用collect_indoor3d_data.py制作npy数据集

collect_indoor3d_data.py

在这里插入图片描述
anno_path包含了272个训练数据的相对路径

import os
import sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
ROOT_DIR = os.path.dirname(BASE_DIR)
sys.path.append(BASE_DIR)
import indoor3d_util

anno_paths = [line.rstrip() for line in open(os.path.join(BASE_DIR, 'meta/anno_paths.txt'))]
"""
读取出每个房间点云文件的相对路径,Annotatations中包含了桌子椅子等类别的点云文件,
包括xyz和RGB
"""
anno_paths = [os.path.join(indoor3d_util.DATA_PATH, p) for p in anno_paths]
""" 
读取绝对路径
"""

#anno_paths = os.path.join(indoor3d_util.DATA_PATH,'Area_5/hallway_6/Annotations')
output_folder = os.path.join(ROOT_DIR, 'data/npy')
"""我创建了一个npy文件夹用于存放npy文件"""
if not os.path.exists(output_folder):
    os.mkdir(output_folder)

# Note: there is an extra character in the v1.2 data in Area_5/hallway_6. It's fixed manually.
for anno_path in anno_paths:
"""
将每一个Annotation文件夹中的文件读取出
"""
    print(anno_path)
    try:
        elements = anno_path.split('/')
        out_filename = elements[-3][-6:]+'_'+elements[-2]+'.npy' # Area_1_hallway_1.npy
        """获取npy文件名称"""
        indoor3d_util.collect_point_label(anno_path, os.path.join(output_folder, out_filename), 'numpy')
        """对应npy文件写入数据"""
    except:
        print(anno_path, 'ERROR!!'

indoor3d_util.py

 points_list = []

    for f in glob.glob(os.path.join(anno_path, '*.txt')):
        """查找符合特定规则的文件路径名,返回所有匹配的文件路径列表"""
        cls = os.path.basename(f).split('_')[0]  
        """将物品类名取出,例如:beam,board,board..."""
        """os.path.basename() 返回path最后的文件名"""
        if cls not in g_classes: # note: in some room there is 'staris' class..
            # #g_classes = [x.strip() for x in open(os.path.join(...,"class_names.txt"))]
            cls = 'clutter'
        points = np.loadtxt(f)   
        """np.loadtxt()读取txt文件,读入数据文件,要求每一行数据的格式相同,XYZRGV"""
        labels = np.ones((points.shape[0],1)) * g_class2label[cls]   
        """比如one生成(点云数量,1) * 该类别的索引编号,即为该类别所有点云打上了标签"""
        #g_class2label = {cls: i for i,cls in enumerate(g_classes)} 将class_names中的类名分索引
        points_list.append(np.concatenate([points, labels], 1)) # Nx7 XYZRGBlabel
    """
    np.concatenate()将列表变为numpy数组,列表进行拼接,xyz相对位置 + label 
    """
    data_label = np.concatenate(points_list, 0)
    xyz_min = np.amin(data_label, axis=0)[0:3] #取出所有坐标中的最小值
    """
    np.amin(a,axis),返回数组中的最小值
    """
    data_label[:, 0:3] -= xyz_min  
    """坐标全部减去最小坐标,全部移动至原点处"""
    
    if file_format=='txt':
        fout = open(out_filename, 'w')
        for i in range(data_label.shape[0]):
            fout.write('%f %f %f %d %d %d %d\n' % \
                          (data_label[i,0], data_label[i,1], data_label[i,2],
                           data_label[i,3], data_label[i,4], data_label[i,5],
                           data_label[i,6]))
        fout.close()
     """
     将房间中包含的所有类别的点云数据全部写入一个npy文本中,
     """
    elif file_format=='numpy':
        np.save(out_filename, data_label)
    else:
        print('ERROR!! Unknown file format: %s, please use txt or numpy.' % \
            (file_format))
        exit()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值