112 lines
3.7 KiB
Python
112 lines
3.7 KiB
Python
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())
|
||
|