A post-deeplabcut module for kinematic analysis
This repo will continue to grow, but here are some helper functions to get you started. Note, the API is subject to change. You can run the functions on data files obtained from running inference with DeepLabCut. Currently, this code requires python 3.8 onwards. We recommend using the DEEPLABCUT conda file, and then simply run pip install dlc2kinematics
within your environment.
Quick start
pip install dlc2kinematics
Useage
import dlc2kinematics
Load data:
df, bodyparts, scorer = dlc2kinematics.load_data(<path of the h5 file>)
Basic Operations
Compute velocity:
- For all bodyparts:
df_vel = dlc2kinematics.compute_velocity(df,bodyparts=['all'])
- For only few bodyparts:
df_vel = dlc2kinematics.compute_velocity(df,bodyparts=['nose','joystick'])
Compute acceleration:
- For all bodyparts:
df_acc = dlc2kinematics.compute_acceleration(df,bodyparts=['all'])
- For only few bodyparts:
df_vel = dlc2kinematics.compute_acceleration(df,bodyparts=['nose','joystick'])
Compute speed:
df_speed = dlc2kinematics.compute_speed(df,bodyparts=['nose','joystick'])
Computations in joint coordinates
To compute joint angles, we first create a dictionary where keys are the joint angles and the corresponding values are the set of bodyparts:
joints_dict= {}
joints_dict['R-Elbow'] = ['R_shoulder', 'Right_elbow', 'Right_wrist']
and compute the joint angles with
joint_angles = dlc2kinematics.compute_joint_angles(df,joints_dict)
Compute joint angular velocity with
joint_vel = dlc2kinematics.compute_joint_velocity(joint_angles)
Compute joint angular acceleration with
joint_acc = dlc2kinematics.compute_joint_acceleration(joint_angles)
Compute correlation of angular velocity
corr = dlc2kinematics.compute_correlation(joint_vel, plot=True)
Compute PCA of angular velocity with
pca = dlc2kinematics.compute_pca(joint_vel, plot=True)
PCA-based reconstruction of postures
Compute and plot PCA based on posture reconstruction with:
dlc2kinematics.plot_3d_pca_reconstruction(df_vel, n_components=10, framenumber=500,
bodyparts2plot=bodyparts2plot, bp_to_connect=bp_to_connect)
UMAP Embeddings
embedding, transformed_data = dlc2kinematics.compute_umap(df, key=['LeftForelimb', 'RightForelimb'], chunk_length=30, fit_transform=True, n_neighbors=30, n_components=3,metric="euclidean")
dlc2kinematics.plot_umap(transformed_data, size=5, alpha=1, color="indigo", figsize=(10, 6))
Contributing
- If you spot an issue or have a question, please open an issue with a suitable tag.
- For code contributions:
- please see the contributing guide.
- Please reference all issues this PR addresses in the description text.
- Before submitting your PR, ensure all code is formatted properly by running
in the root directory.
black .
- Assign a reviewer, typically MMathisLab.
- sign CLA.
Acknowledgements
This code is a collect of contributions from members of the Mathis Laboratory over the years. In particular (alphabetical): Michael Beauzile, Sebastien Hausmann, Jessy Lauer, Alexander Mathis, Mackenzie Mathis, Tanmay Nath, Steffen Schneider.