Python cvat的kitti raw data格式里的3D点云单个tracklet_labels.xml文件和打开对应frame_list.txt文件对应点云列表解析为paddle3D训练格式多个txt的脚本
时间: 2024-05-06 19:15:49 浏览: 153
以下是一个可以将CVAT KITTI Raw Data格式中的单个tracklet_labels.xml文件和对应的frame_list.txt文件解析为Paddle3D训练格式多个txt的Python脚本:
``` python
import os
import xml.etree.ElementTree as ET
# 读取frame_list.txt文件,获取所有的点云文件名
def read_frame_list_txt(frame_list_txt_path):
with open(frame_list_txt_path, 'r') as f:
lines = f.readlines()
point_cloud_files = [line.strip() for line in lines]
return point_cloud_files
# 解析单个tracklet_labels.xml文件,获取所有的bounding box信息
def parse_tracklet_labels_xml(tracklet_labels_xml_path):
tree = ET.parse(tracklet_labels_xml_path)
root = tree.getroot()
bboxes = []
for bbox_node in root.findall('object/bndbox'):
bbox = {
'xmin': int(bbox_node.find('xmin').text),
'ymin': int(bbox_node.find('ymin').text),
'xmax': int(bbox_node.find('xmax').text),
'ymax': int(bbox_node.find('ymax').text),
'label': bbox_node.find('name').text
}
bboxes.append(bbox)
return bboxes
# 将bounding box信息写入对应的txt文件中
def write_bboxes_to_txt(point_cloud_file, bboxes, output_dir):
basename = os.path.splitext(os.path.basename(point_cloud_file))[0]
output_file_path = os.path.join(output_dir, basename+'.txt')
with open(output_file_path, 'w') as f:
for bbox in bboxes:
label = bbox['label']
xmin = bbox['xmin']
ymin = bbox['ymin']
xmax = bbox['xmax']
ymax = bbox['ymax']
f.write(f'{label} {xmin} {ymin} {xmax} {ymax}\n')
# 主函数
def main(tracklet_labels_xml_path, frame_list_txt_path, point_cloud_dir, output_dir):
# 读取frame_list.txt文件,获取所有的点云文件名
point_cloud_files = read_frame_list_txt(frame_list_txt_path)
# 解析单个tracklet_labels.xml文件,获取所有的bounding box信息
bboxes = parse_tracklet_labels_xml(tracklet_labels_xml_path)
# 遍历所有的点云文件,将bounding box信息写入对应的txt文件中
for point_cloud_file in point_cloud_files:
point_cloud_file_path = os.path.join(point_cloud_dir, point_cloud_file)
write_bboxes_to_txt(point_cloud_file_path, bboxes, output_dir)
if __name__ == '__main__':
tracklet_labels_xml_path = '/path/to/tracklet_labels.xml'
frame_list_txt_path = '/path/to/frame_list.txt'
point_cloud_dir = '/path/to/point_cloud_dir'
output_dir = '/path/to/output_dir'
main(tracklet_labels_xml_path, frame_list_txt_path, point_cloud_dir, output_dir)
```
使用时,需要将上面的代码保存为一个Python脚本,然后设置好以下几个参数:
- tracklet_labels_xml_path:单个tracklet_labels.xml文件的路径。
- frame_list_txt_path:对应的frame_list.txt文件的路径。
- point_cloud_dir:包含所有点云文件的文件夹路径。
- output_dir:保存Paddle3D训练格式多个txt文件的文件夹路径。
然后运行脚本即可。脚本会将单个tracklet_labels.xml文件中的所有bounding box信息写入对应的txt文件中,每个txt文件对应一个点云文件。
阅读全文