You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

258 lines
8.0 KiB
Python

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import os
import json
from crud.service.scene_service import SceneService
this_dir = os.path.dirname(os.path.abspath(__file__))
root_dir = os.path.join(this_dir, "data")
def get_scene_names():
scenes = SceneService.get_scene_names()
scenes = list(scenes)
scenes.sort()
return scenes
def get_one_scene(s):
# 获取s目录下的所有文件信息
result = SceneService.get_scene_info(s)
return result[0] if result else None
# todo 旧的
def get_one_scene_(s):
# 获取s目录下的所有文件信息
"""{
"scene": "example", # 第一层的目录名
"frames": [ # label下的文件名即标注结果文件
"000950",
"000965",
"000970",
"000975"
],
"lidar_ext": ".pcd", # lidar目录下的文件类型
"camera_ext": ".jpg", # 图片的文件类型
"radar_ext": ".pcd", # lidar目录下的文件类型
"aux_lidar_ext": ".pcd", # lidar目录下的文件类型
"boxtype": "psr",
"camera": [ # 目录下的文件夹
"right",
"left",
"front"
],
"calib": { # 目录
"camera": { # 目录
"front": "json文件的内容", # 文件
"left": "json文件的内容",
"right": "json文件的内容"
}
}
}"""
###
scene = {
"scene": s,
"frames": []
}
scene_dir = os.path.join(root_dir, s)
frames = os.listdir(os.path.join(scene_dir, "lidar"))
#print(s, frames)
frames.sort()
scene["lidar_ext"]="pcd"
for f in frames:
#if os.path.isfile("./data/"+s+"/lidar/"+f):
filename, fileext = os.path.splitext(f)
scene["frames"].append(filename)
scene["lidar_ext"] = fileext
# point_transform_matrix=[]
# if os.path.isfile(os.path.join(scene_dir, "point_transform.txt")):
# with open(os.path.join(scene_dir, "point_transform.txt")) as f:
# point_transform_matrix=f.read()
# point_transform_matrix = point_transform_matrix.split(",")
if os.path.exists(os.path.join(scene_dir, "desc.json")):
with open(os.path.join(scene_dir, "desc.json")) as f:
desc = json.load(f)
scene["desc"] = desc
calib = {}
calib_camera={}
calib_radar={}
calib_aux_lidar = {}
if os.path.exists(os.path.join(scene_dir, "calib")):
if os.path.exists(os.path.join(scene_dir, "calib","camera")):
calibs = os.listdir(os.path.join(scene_dir, "calib", "camera"))
for c in calibs:
calib_file = os.path.join(scene_dir, "calib", "camera", c)
calib_name, ext = os.path.splitext(c)
if os.path.isfile(calib_file) and ext==".json":
#print(calib_file)
with open(calib_file) as f:
cal = json.load(f)
calib_camera[calib_name] = cal
if os.path.exists(os.path.join(scene_dir, "calib", "radar")):
calibs = os.listdir(os.path.join(scene_dir, "calib", "radar"))
for c in calibs:
calib_file = os.path.join(scene_dir, "calib", "radar", c)
calib_name, _ = os.path.splitext(c)
if os.path.isfile(calib_file):
#print(calib_file)
with open(calib_file) as f:
cal = json.load(f)
calib_radar[calib_name] = cal
if os.path.exists(os.path.join(scene_dir, "calib", "aux_lidar")):
calibs = os.listdir(os.path.join(scene_dir, "calib", "aux_lidar"))
for c in calibs:
calib_file = os.path.join(scene_dir, "calib", "aux_lidar", c)
calib_name, _ = os.path.splitext(c)
if os.path.isfile(calib_file):
#print(calib_file)
with open(calib_file) as f:
cal = json.load(f)
calib_aux_lidar[calib_name] = cal
# camera names
camera = []
camera_ext = ""
cam_path = os.path.join(scene_dir, "camera")
if os.path.exists(cam_path):
cams = os.listdir(cam_path)
for c in cams:
cam_file = os.path.join(scene_dir, "camera", c)
if os.path.isdir(cam_file):
camera.append(c)
if camera_ext == "":
#detect camera file ext
files = os.listdir(cam_file)
if len(files)>=2:
_,camera_ext = os.path.splitext(files[0])
if camera_ext == "":
camera_ext = ".jpg"
scene["camera_ext"] = camera_ext
# radar names
radar = []
radar_ext = ""
radar_path = os.path.join(scene_dir, "radar")
if os.path.exists(radar_path):
radars = os.listdir(radar_path)
for r in radars:
radar_file = os.path.join(scene_dir, "radar", r)
if os.path.isdir(radar_file):
radar.append(r)
if radar_ext == "":
#detect camera file ext
files = os.listdir(radar_file)
if len(files)>=2:
_,radar_ext = os.path.splitext(files[0])
if radar_ext == "":
radar_ext = ".pcd"
scene["radar_ext"] = radar_ext
# aux lidar names
aux_lidar = []
aux_lidar_ext = ""
aux_lidar_path = os.path.join(scene_dir, "aux_lidar")
if os.path.exists(aux_lidar_path):
lidars = os.listdir(aux_lidar_path)
for r in lidars:
lidar_file = os.path.join(scene_dir, "aux_lidar", r)
if os.path.isdir(lidar_file):
aux_lidar.append(r)
if radar_ext == "":
#detect camera file ext
files = os.listdir(radar_file)
if len(files)>=2:
_,aux_lidar_ext = os.path.splitext(files[0])
if aux_lidar_ext == "":
aux_lidar_ext = ".pcd"
scene["aux_lidar_ext"] = aux_lidar_ext
# # ego_pose
# ego_pose= {}
# ego_pose_path = os.path.join(scene_dir, "ego_pose")
# if os.path.exists(ego_pose_path):
# poses = os.listdir(ego_pose_path)
# for p in poses:
# p_file = os.path.join(ego_pose_path, p)
# with open(p_file) as f:
# pose = json.load(f)
# ego_pose[os.path.splitext(p)[0]] = pose
if True: #not os.path.isdir(os.path.join(scene_dir, "bbox.xyz")):
scene["boxtype"] = "psr"
# if point_transform_matrix:
# scene["point_transform_matrix"] = point_transform_matrix
if camera:
scene["camera"] = camera
if radar:
scene["radar"] = radar
if aux_lidar:
scene["aux_lidar"] = aux_lidar
if calib_camera:
calib["camera"] = calib_camera
if calib_radar:
calib["radar"] = calib_radar
if calib_aux_lidar:
calib["aux_lidar"] = calib_aux_lidar
# if ego_pose:
# scene["ego_pose"] = ego_pose
# else:
# scene["boxtype"] = "xyz"
# if point_transform_matrix:
# scene["point_transform_matrix"] = point_transform_matrix
# if camera:
# scene["camera"] = camera
# if radar:
# scene["radar"] = radar
# if calib_camera:
# calib["camera"] = calib_camera
# if calib_radar:
# calib["radar"] = calib_radar
# if calib_aux_lidar:
# calib["aux_lidar"] = calib_aux_lidar
scene["calib"] = calib
return scene
def read_annotations(scene, frame):
return SceneService.get_label_json(scene, frame)
# filename = os.path.join(root_dir, scene, "label", frame+".json")
# if (os.path.isfile(filename)):
# with open(filename,"r") as f:
# ann=json.load(f)
# #print(ann)
# return ann
# else:
# return []
# def save_annotations(scene, frame, anno):
# filename = os.path.join(root_dir, scene, "label", frame+".json")
# with open(filename, 'w') as outfile:
# json.dump(anno, outfile)