2025-05-27 15:46:31 +08:00

112 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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())