1.json文件 (多行字典形式)
2.python转化脚本
import json # 引入json模块
txt_file = 'txt/pose1.txt' # 换成自己转换出txt文件名
with open('json/3d.json') as json_file: # 打开json 文件,将文件对象赋值给变量 json_file
# 使用 json_file 变量来读取或写入文件的内容
with open(txt_file, 'w') as text_file: # 打开txt文件 赋值给变量text_file
# txt文件头部字段(可换成自己想要的字段)
text_file.write(
"frame cameraID trackID alpha width height length lidar_space_X lidar_space_Y lidar_space_Z rotation_lidar_space_y rotation_lidar_space_x rotation_lidar_space_z camera_space_X camera_space_Y camera_space_Z rotation_camera_space_y rotation_camera_space_x rotation_camera_space_z\n")
for line in json_file: # 一行一行读取
line_data = "" # 需要存入的行数据赋值为空
data = json.loads(line) # 加载每行字典值
# print(data)
frame = data.get('name') # 获得name键的值
cameraID = '1' # 将cameraID手动设置为1
rotation_lidar_space_y = '0' # 以下皆为手动设置值
rotation_lidar_space_x = '0'
rotation_lidar_space_z = '0'
camera_space_X = '0'
camera_space_Y = '0'
camera_space_Z = '0'
rotation_camera_space_y = '0'
rotation_camera_space_x = '0'
rotation_camera_space_z = '0'
# 此部分在提取labels列表中id值 并改变id值
length_labels = len(data.get('labels')) # 获得labels键的列表长度
trackId_list = [] # 定义一个空列表
for i in range(0, length_labels): # 在labels列表中循环
line_tmp = ""
trackId = data.get('labels')[i]['id'] # 提取id值
if trackId in trackId_list:
trackId = 3 # 如果再次出现0值 就将此id改为3
trackId_list.append(trackId) # 首次出现的id值加入trackId_list中
trackId_list.sort() # 列表里的id值排序
alpha = '0' # 手动赋值
# 提取labels列表中对应的值
width = data.get('labels')[i]['box3d']['dimension']['width']
height = data.get('labels')[i]['box3d']['dimension']['height']
length = data.get('labels')[i]['box3d']['dimension']['length']
lidar_space_X = data.get('labels')[i]['box3d']['location']['x']
lidar_space_Y = data.get('labels')[i]['box3d']['location']['y']
lidar_space_Z = data.get('labels')[i]['box3d']['location']['z']
line_tmp = frame + " " + cameraID + " " + str(trackId) + " " + alpha + " " + str(width)[:8] + " " + str(
height)[:8] + " " + str(length)[:8] + " " + str(lidar_space_X)[:8] + " " + str(lidar_space_Y)[:8] + " " + str(
lidar_space_Z)[:8] + " " + str(rotation_lidar_space_y) + " " + str(rotation_lidar_space_x) + " " + str(
rotation_lidar_space_z) + " " + str(camera_space_X) + " " + str(camera_space_Y) + " " + str(
camera_space_Z) + " " + str(rotation_camera_space_y) + " " + str(
rotation_camera_space_x) + " " + str(rotation_camera_space_z) + "\n"
line_data += line_tmp # 先加后等(可以理解为自加)
# =+操作符可以理解为“反转相加”,x =+ y相当于将y和x连接起来,然后将结果赋给x。
# x = 'hello'
# y = 'world'
# x =+ y
# print(x)
# 上述代码输出'worldhello',说明x和y被成功连接起来。
text_file.write(line_data)
print(trackId_list)
3.txt文件