3D手部角度绘图

一个用于从动作捕捉打字数据中提取右手食指3D关节角度和角速度的生物力学管道,并可视化不同击键是否在关节角度空间中形成可分离的簇。

  • by mehrtam
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 mehrtam/3D_hand_angles_plotting

使用说明

三维手部角度绘制——右手食指运动学

一个矢量化的生物力学管道,从运动捕捉打字数据中提取右手食指的3D关节角度和角速度,然后可视化不同的击键是否在关节角度空间中形成可分离的簇。

为什么存在

每个按键都是由一个手指轨迹执行的,原则上,这个轨迹应该留下一个不同的生物力学特征——不同的MCP外展 y vs。 n,不同的PIP/DIP屈曲 u vs。 m,不同的角速度分布取决于钥匙所在的行。该管道要求 单峰问题:

在没有注视和语言模型的情况下,右手食指的运动学能否将击键分为不同的簇?

回答这个问题是更丰富的多模式文本输入系统的先决条件。如果单手运动学聚类清晰,注视和语言先验是强化;如果他们不这样做,这些模式必须完成大部分工作。

此存储库是对 improved-gaze-typing-prediction,它在手部运动学的基础上添加了凝视和语言先验,用于端到端的角色预测。

管道

flowchart TD
    CSV["Qualisys/QTM CSVs<br/>3D markers · keypress flag · timestamps"] --> Markers["Marker extraction<br/>4 fingers × 4 joints + 2 palm refs"]
    Markers --> Angles["Joint-angle computation<br/>signed MCP abduction · MCP/PIP/DIP flexion"]
    Angles --> Vel["Angular velocity<br/>unwrapped, NaN-safe gradient w.r.t. timestamps"]
    Vel --> Events["Keypress sampling<br/>frames where KeyPressFlag = 1"]
    Events --> Plots["3D cluster visualization<br/>colored by pressed character"]

几何方法

运动学计算是实质性的部分——它不仅仅是绘图:

MCP绑架(签名)。 手掌法线由指数MCP、小MCP和手掌中点形成的三角形计算得出。每个手指的MCP到尖端矢量被投影到手掌平面上。该投影与指数之间的角度——小MCP“条”是幅度;这个标志来自交叉产品与手掌法线的一致性。这产生了一个 签署 区分左栏和右栏偏移的外展——分离按键所必需的,如 y 对比 u.

MCP屈曲。 计算为 π/2 − angle(proximal_phalanx, palm_normal)π/2偏移将“与手掌法线的角度”转换为直观的屈曲(中性时为0°,随着手指向手掌卷曲而增加)。

PIP和DIP屈曲。 连续指骨向量之间的节间角度(MCP→PIP, PIP→DIP, DIP→tip).

角速度。 角度的时间梯度,有两个安全步骤:在微分之前展开角度,以防止±180°的环绕膨胀速度,跳过每列有效样本少于3个的行,以避免虚假梯度。

目标密钥

QWERTY右侧索引区域: y、 h,n,u,j,m.

存储库结构

3D_hand_angles_plotting/
├── kinematics_analysis.py    # main pipeline (extraction + plotting)
├── requirements.txt
├── LICENSE                    # MIT
└── README.md

安装

git clone https://github.com/mehrtam/3D_hand_angles_plotting.git
cd 3D_hand_angles_plotting
pip install -r requirements.txt

数据格式

Qualisys运动捕捉会话中的CSV,3D标记列遵循QTM命名约定。必填栏:

  • 食指标记: QTMdc_R_Index_Prox_GLOBAL_X/Y/Z, QTMdc_R_Index_Inter_GLOBAL_X/Y/Z, QTMdc_R_Index_Distal_GLOBAL_X/Y/Z, QTMdc_R_Index_End_GLOBAL_X/Y/Z
  • 其他右手手指 (中、环、小)——相同的命名模式,用于手掌法线计算
  • 手掌参考标记: QTMdc_R_Cin, QTMdc_R_Cout (每个与 _X/Y/Z)
  • 事件列: Pressed_Letter, KeyPressFlag, TimeStamp

用法

# Extract kinematics and render the default 3D MCP-Abd × MCP-Flex × PIP-Flex plot
python kinematics_analysis.py --data /path/to/csvs

# Choose a different plot
python kinematics_analysis.py --data /path/to/csvs --plot flexion_clusters
python kinematics_analysis.py --data /path/to/csvs --plot mcp_kinematics
python kinematics_analysis.py --data /path/to/csvs --plot flex_vel_grid

# Render every plot
python kinematics_analysis.py --data /path/to/csvs --plot all

# Just extract, no plotting (e.g. for downstream ML)
python kinematics_analysis.py --data /path/to/csvs --plot none --save-csv kinematics.csv

可用可视化

绘图键 轴 使用
mcp_kinematics MCP外展×MCP屈曲×MCP外展速度 混合角/速度空间
flexion_clusters MCP屈曲×PIP屈曲×DIP屈曲 纯屈曲空间
mcp_pip_flex MCP外展×MCP屈曲×PIP屈曲 默认——外展与屈曲相结合
flex_vel_grid 屈曲角度与屈曲速度,每个关节一个面板(MCP/PIP/DIP) 2D相位图

样本集群数字将添加到 figures/ 在未来的承诺中。

技术栈

Python·NumPy(矢量化3D几何)·pandas(每个文件处理)·matplotlib+seaborn(3D散点/面网格)· concurrent.futures (跨工作者的并行CSV处理)

应用程序

基于运动的AR/VR预测分型、可访问性和辅助输入、神经和运动运动解码、运动意图的生物力学和人机交互研究。

引用

如果你在这项工作的基础上,请参考:

伊斯兰教,F.(2025)。 三维手部角度绘制——用于击键分析的右手食指运动学 [计算机软件]。https://github.com/mehrtam/3D_hand_angles_plotting

联系

法蒂玛(Mehrta)伊斯兰教 --伯明翰大学 GitHub · 领英

许可证

麻省理工学院——见 许可证.