import numpy as np import json class LegData: def __init__(self, json_data): """ 初始化腿部数据处理器 Args: json_data: 包含腿部标注信息的JSON数据字典 """ self.json_data = json_data self.left_points = [] # 左腿的点列表 self.right_points = [] # 右腿的点列表 self.left_curvatures = {} # 左腿曲率数据 self.right_curvatures = {} # 右腿曲率数据 # 处理数据 self._process_data() def _process_data(self): """处理JSON数据,提取腿部曲线和曲率信息""" for shape in self.json_data.get('shapes', []): if shape['shape_type'] == 'linestrip': points = [tuple(map(float, point)) for point in shape['points']] curvatures = shape.get('curvatures', {}) if shape['label'] == 'C1': self.left_points = points self.left_curvatures = curvatures elif shape['label'] == 'C2': self.right_points = points self.right_curvatures = curvatures # 左腿点获取方法 def get_left_point1(self): """获取左腿第一个点(承扶左)""" return self.left_points[0] if len(self.left_points) > 0 else None def get_left_point2(self): """获取左腿第二个点(委中左)""" return self.left_points[1] if len(self.left_points) > 1 else None def get_left_point3(self): """获取左腿第三个点(昆仑左)""" return self.left_points[2] if len(self.left_points) > 2 else None # 右腿点获取方法 def get_right_point1(self): """获取右腿第一个点(承扶右)""" return self.right_points[0] if len(self.right_points) > 0 else None def get_right_point2(self): """获取右腿第二个点(委中右)""" return self.right_points[1] if len(self.right_points) > 1 else None def get_right_point3(self): """获取右腿第三个点(昆仑右)""" return self.right_points[2] if len(self.right_points) > 2 else None # 曲率获取方法 def get_left_curvatures(self): """获取左腿曲率数据""" return self.left_curvatures def get_right_curvatures(self): """获取右腿曲率数据""" return self.right_curvatures # 使用示例 if __name__ == "__main__": # 示例JSON数据 sample_json = { "shapes": [ { "label": "C1", "points": [ [237.33333333333331, 2.0], [265.3333333333333, 130.88888888888889], [281.77777777777777, 315.77777777777777] ], "curvatures": { "thigh": 10, "calf": -10 }, "shape_type": "linestrip" }, { "label": "C2", "points": [ [350.22222222222223, 1.5555555555555554], [362.66666666666663, 110.88888888888889], [401.3333333333333, 302.44444444444446] ], "curvatures": { "thigh": -10, "calf": 20 }, "shape_type": "linestrip" } ] } # 创建腿部数据处理器实例 leg_processor = LegData(sample_json) # 直接使用类方法获取数据 print("左腿第一个点(承扶左):", leg_processor.get_left_point1()) print("右腿曲率数据:", leg_processor.get_right_curvatures())