7.2 KiB
7.2 KiB
数据采集规则说明
概述
本文档详细说明了身体平衡评估系统的数据采集规则,包括从各种传感器设备采集数据、生成图片并存储到指定路径的完整流程。
数据库表结构
detection_data 表结构
CREATE TABLE IF NOT EXISTS detection_data (
id TEXT PRIMARY KEY, -- 记录唯一标识(YYYYMMDDHHMMSS)年月日时分秒
session_id TEXT NOT NULL, -- 检测会话ID(外键)
head_pose TEXT, -- 头部姿态数据(JSON格式)
body_pose TEXT, -- 身体姿态数据(JSON格式)
body_image TEXT, -- 身体视频截图存储路径
foot_data TEXT, -- 足部姿态数据(JSON格式)
foot_image TEXT, -- 足部监测视频截图存储路径
foot_data_image TEXT, -- 足底压力数据图存储路径
screen_image TEXT, -- 屏幕录制视频截图存储路径
timestamp TIMESTAMP, -- 数据记录时间戳
FOREIGN KEY (session_id) REFERENCES detection_sessions (id) -- 检测会话表外键约束
)
数据采集方法
方法签名
def collect_data(self, session_id: str, patient_id: str, screen_image_base64: str = None) -> Dict[str, Any]
参数说明
session_id
: 检测会话ID,用于关联检测会话patient_id
: 患者ID,用于构建存储路径screen_image_base64
: 前端界面截图的base64编码数据(可选)
数据采集详细规则
1. 头部姿态数据 (head_pose)
数据源: IMU传感器设备 存储格式: JSON字符串 数据内容:
roll
: 翻滚角度 (-30° 到 30°)pitch
: 俯仰角度 (-30° 到 30°)yaw
: 偏航角度 (-180° 到 180°)acceleration
: 三轴加速度数据 (x, y, z)gyroscope
: 三轴陀螺仪数据 (x, y, z)timestamp
: 数据采集时间戳
示例数据:
{
"roll": 15.2,
"pitch": -8.7,
"yaw": 45.3,
"acceleration": {
"x": 0.5,
"y": -0.2,
"z": 9.8
},
"gyroscope": {
"x": 1.2,
"y": -0.8,
"z": 2.1
},
"timestamp": "2024-01-15T10:30:45.123"
}
2. 身体姿态数据 (body_pose)
数据源: FemtoBolt深度相机 存储格式: JSON字符串 数据内容:
keypoints
: 身体关键点坐标和置信度- 头部、颈部、肩膀、肘部、手腕
- 脊柱、髋部、膝盖、脚踝
balance_score
: 平衡评分 (0.0-1.0)center_of_mass
: 重心坐标timestamp
: 数据采集时间戳
示例数据:
{
"keypoints": {
"head": {"x": 320, "y": 100, "confidence": 0.95},
"neck": {"x": 320, "y": 150, "confidence": 0.92},
"left_shoulder": {"x": 280, "y": 180, "confidence": 0.88},
"right_shoulder": {"x": 360, "y": 180, "confidence": 0.90}
},
"balance_score": 0.85,
"center_of_mass": {"x": 320, "y": 350},
"timestamp": "2024-01-15T10:30:45.123"
}
3. 身体视频截图 (body_image)
数据源: FemtoBolt深度相机
存储路径: data/patients/{患者ID}/{sessionID}/{采集时间}/body_image.jpg
文件格式: JPG图片
图片尺寸: 640x480像素
4. 足部压力数据 (foot_data)
数据源: 压力传感器 (pressure_sensor) 存储格式: JSON字符串 数据内容:
left_foot
: 左脚各区域压力值heel
: 脚跟压力arch
: 足弓压力ball
: 前脚掌压力toes
: 脚趾压力total_pressure
: 总压力
right_foot
: 右脚各区域压力值balance_ratio
: 左右脚压力平衡比例timestamp
: 数据采集时间戳
示例数据:
{
"left_foot": {
"heel": 45.2,
"arch": 12.8,
"ball": 38.5,
"toes": 22.1,
"total_pressure": 118.6
},
"right_foot": {
"heel": 42.8,
"arch": 15.2,
"ball": 35.9,
"toes": 19.7,
"total_pressure": 113.6
},
"balance_ratio": 0.51,
"timestamp": "2024-01-15T10:30:45.123"
}
5. 足部监测视频截图 (foot_image)
数据源: 摄像头 (camera)
存储路径: data/patients/{患者ID}/{sessionID}/{采集时间}/foot_image.jpg
文件格式: JPG图片
图片尺寸: 640x480像素
6. 足底压力数据图 (foot_data_image)
数据源: 基于压力传感器数据生成的可视化图片
存储路径: data/patients/{患者ID}/{sessionID}/{采集时间}/foot_data_image.jpg
文件格式: JPG图片
图片内容: 足底压力分布热力图
图片尺寸: 400x600像素
7. 屏幕录制截图 (screen_image)
数据源: 前端界面截图(base64编码数据)
存储路径: data/patients/{患者ID}/{sessionID}/{采集时间}/screen_image.jpg
文件格式: JPG图片
数据传输: 通过参数 screen_image_base64
传入
目录结构规则
数据存储目录结构
data/
└── patients/
└── {患者ID}/
└── {sessionID}/
└── {采集时间}/
├── body_image.jpg # 身体视频截图
├── foot_image.jpg # 足部监测视频截图
├── foot_data_image.jpg # 足底压力数据图
└── screen_image.jpg # 屏幕录制截图
采集时间格式
- 格式:
YYYYMMDD_HHMMSS_mmm
- 说明: 年月日_时分秒_毫秒
- 示例:
20240115_103045_123
数据采集流程
- 初始化: 接收
session_id
、patient_id
和可选的screen_image_base64
参数 - 生成时间戳: 创建精确到毫秒的时间戳作为采集标识
- 创建目录: 根据患者ID、会话ID和时间戳创建存储目录
- 设备状态检查: 检查各设备连接状态
- 数据采集: 按顺序采集各设备数据
- IMU传感器 → 头部姿态数据
- FemtoBolt深度相机 → 身体姿态数据和身体截图
- 压力传感器 → 足部压力数据和压力分布图
- 摄像头 → 足部监测截图
- 前端界面 → 屏幕截图
- 数据存储: 将采集的数据保存到数据库和文件系统
- 日志记录: 记录采集过程和结果
错误处理
- 设备连接失败时,对应数据字段设为
None
- 文件保存失败时,记录错误日志并继续其他数据采集
- 采集过程中的异常不会中断整个流程
- 所有错误信息都会记录到系统日志中
数据质量保证
- 所有时间戳使用统一格式
- 图片文件使用相对路径存储
- JSON数据格式验证
- 文件完整性检查
- 设备状态实时监控
性能优化
- 并发数据采集(在设备支持的情况下)
- 图片压缩优化
- 内存使用监控
- 磁盘空间管理
- 数据采集超时控制
注意事项
- 确保所有设备在采集前已正确初始化
- 定期检查存储空间,避免磁盘满载
- 采集频率应根据实际需求调整
- 敏感数据需要加密存储
- 定期备份重要数据
- 遵循数据隐私保护规定
本文档版本: 1.0
最后更新: 2025年8月
维护人员: 系统开发团队