1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| from omni.isaac.sim import SimulationApp from omni.syntheticdata import SyntheticDataConverter
class CabinDataGenerator: """座舱合成数据生成器""" def __init__(self, config): self.sim_app = SimulationApp(config) self.scene_builder = SceneBuilder() self.character_loader = MetahumanLoader() def generate_scene(self, params): """ 生成一个座舱场景 Args: params: 场景参数 - lighting: 光照条件 - character_type: 角色类型 - pose: 坐姿 - action: 行为 """ cabin = self.scene_builder.load_cabin("vehicle_interior.usd") self.scene_builder.set_lighting( type=params.get('lighting', 'daylight'), intensity=params.get('intensity', 500), color_temp=params.get('color_temp', 5500) ) character = self.character_loader.load( gender=params.get('gender', 'male'), age=params.get('age', 35), ethnicity=params.get('ethnicity', 'asian') ) character.set_pose(params.get('pose', 'normal_sitting')) character.play_animation(params.get('action', 'looking_forward')) camera_data = self.render_camera() depth_data = self.render_depth() radar_data = self.render_radar() annotations = self.auto_annotate( camera_data, character, params ) return { 'camera': camera_data, 'depth': depth_data, 'radar': radar_data, 'annotations': annotations } def render_camera(self): """渲染摄像头图像""" return { 'resolution': (1600, 1200), 'fov': 60, 'fps': 30, 'format': 'RGB-IR' } def auto_annotate(self, image, character, params): """自动标注(从3D场景直接生成)""" return { 'face_bbox': character.get_face_bbox(), 'eye_landmarks': character.get_eye_landmarks(), 'body_keypoints': character.get_body_keypoints_3d(), 'gaze_direction': character.get_gaze_direction(), 'pose_label': params.get('pose'), 'action_label': params.get('action'), }
|