Skip to content

Exporting CSV

Recorded data can be exported as CSV (Comma Separated Values) file.

The CSV file contains a header describing the content on its first line and uses a delimiter to separate values in each row beneath it.

Use Case

By exporting finger data as CSV you get a simple and light-weight text file containing finger data.

Motion Capture

Create your own finger data motion capture pipeline, with easy to transfer and manipulate finger data. Extract the fingertip locations and drive your own IK system, extract the joint angles and determine the range-of-motion of fingers, process data based on joint acceleration and many more applications are possible.

Research & Development

Create your own finger data pipeline for machine learning, robotics or life sciences research with software such as Matlab, Excel, Python, Scilab and Octave. Any application capable of processing CSV data could be used to interpret, transform and visualize the finger data.

Finger Data

The CSV exporter offers the following data:

  • ‍joint positions
  • joint rotations
  • positional joint velocity
  • positional joint acceleration
  • pinch distances
  • joint angles
  • joint angular velocity
  • joint angular acceleration‍

The available data offers a lot of possibilities and even offers the ability to calculate new data. For example jerk (the velocity of acceleration) or jounce (the acceleration of acceleration) can be calculated, as well as the lengths of bones (based on the distances between joints).

The CSV data is intended as a stepping stone for further processing and allows for very powerful transformations for automation, research and so on.

CSV Header

The CSV file contains a description of the data it contains on its first line.

Example CSV Header
Frame,Elapsed_Time_In_Milliseconds,Time,Hand_X,Hand_Y,Hand_Z,Thumb_CMC_X,Thumb_CMC_Y,Thumb_CMC_Z,Thumb_MCP_X,Thumb_MCP_Y,Thumb_MCP_Z,Thumb_DIP_X,Thumb_DIP_Y,Thumb_DIP_Z,Thumb_TIP_X,Thumb_TIP_Y,Thumb_TIP_Z,Index_CMC_X,Index_CMC_Y,Index_CMC_Z,Index_MCP_X,Index_MCP_Y,Index_MCP_Z,Index_PIP_X,Index_PIP_Y,Index_PIP_Z,Index_DIP_X,Index_DIP_Y,Index_DIP_Z,Index_TIP_X,Index_TIP_Y,Index_TIP_Z,Middle_CMC_X,Middle_CMC_Y,Middle_CMC_Z,Middle_MCP_X,Middle_MCP_Y,Middle_MCP_Z,Middle_PIP_X,Middle_PIP_Y,Middle_PIP_Z,Middle_DIP_X,Middle_DIP_Y,Middle_DIP_Z,Middle_TIP_X,Middle_TIP_Y,Middle_TIP_Z,Ring_CMC_X,Ring_CMC_Y,Ring_CMC_Z,Ring_MCP_X,Ring_MCP_Y,Ring_MCP_Z,Ring_PIP_X,Ring_PIP_Y,Ring_PIP_Z,Ring_DIP_X,Ring_DIP_Y,Ring_DIP_Z,Ring_TIP_X,Ring_TIP_Y,Ring_TIP_Z,Pinky_CMC_X,Pinky_CMC_Y,Pinky_CMC_Z,Pinky_MCP_X,Pinky_MCP_Y,Pinky_MCP_Z,Pinky_PIP_X,Pinky_PIP_Y,Pinky_PIP_Z,Pinky_DIP_X,Pinky_DIP_Y,Pinky_DIP_Z,Pinky_TIP_X,Pinky_TIP_Y,Pinky_TIP_Z,Hand_X,Hand_Y,Hand_Z,Thumb_CMC_X,Thumb_CMC_Y,Thumb_CMC_Z,Thumb_MCP_X,Thumb_MCP_Y,Thumb_MCP_Z,Thumb_DIP_X,Thumb_DIP_Y,Thumb_DIP_Z,Thumb_TIP_X,Thumb_TIP_Y,Thumb_TIP_Z,Index_CMC_X,Index_CMC_Y,Index_CMC_Z,Index_MCP_X,Index_MCP_Y,Index_MCP_Z,Index_PIP_X,Index_PIP_Y,Index_PIP_Z,Index_DIP_X,Index_DIP_Y,Index_DIP_Z,Index_TIP_X,Index_TIP_Y,Index_TIP_Z,Middle_CMC_X,Middle_CMC_Y,Middle_CMC_Z,Middle_MCP_X,Middle_MCP_Y,Middle_MCP_Z,Middle_PIP_X,Middle_PIP_Y,Middle_PIP_Z,Middle_DIP_X,Middle_DIP_Y,Middle_DIP_Z,Middle_TIP_X,Middle_TIP_Y,Middle_TIP_Z,Ring_CMC_X,Ring_CMC_Y,Ring_CMC_Z,Ring_MCP_X,Ring_MCP_Y,Ring_MCP_Z,Ring_PIP_X,Ring_PIP_Y,Ring_PIP_Z,Ring_DIP_X,Ring_DIP_Y,Ring_DIP_Z,Ring_TIP_X,Ring_TIP_Y,Ring_TIP_Z,Pinky_CMC_X,Pinky_CMC_Y,Pinky_CMC_Z,Pinky_MCP_X,Pinky_MCP_Y,Pinky_MCP_Z,Pinky_PIP_X,Pinky_PIP_Y,Pinky_PIP_Z,Pinky_DIP_X,Pinky_DIP_Y,Pinky_DIP_Z,Pinky_TIP_X,Pinky_TIP_Y,Pinky_TIP_Z,Hand_Velocity_X,Hand_Velocity_Y,Hand_Velocity_Z,Thumb_CMC_Velocity_X,Thumb_CMC_Velocity_Y,Thumb_CMC_Velocity_Z,Thumb_MCP_Velocity_X,Thumb_MCP_Velocity_Y,Thumb_MCP_Velocity_Z,Thumb_DIP_Velocity_X,Thumb_DIP_Velocity_Y,Thumb_DIP_Velocity_Z,Thumb_TIP_Velocity_X,Thumb_TIP_Velocity_Y,Thumb_TIP_Velocity_Z,Index_CMC_Velocity_X,Index_CMC_Velocity_Y,Index_CMC_Velocity_Z,Index_MCP_Velocity_X,Index_MCP_Velocity_Y,Index_MCP_Velocity_Z,Index_PIP_Velocity_X,Index_PIP_Velocity_Y,Index_PIP_Velocity_Z,Index_DIP_Velocity_X,Index_DIP_Velocity_Y,Index_DIP_Velocity_Z,Index_TIP_Velocity_X,Index_TIP_Velocity_Y,Index_TIP_Velocity_Z,Middle_CMC_Velocity_X,Middle_CMC_Velocity_Y,Middle_CMC_Velocity_Z,Middle_MCP_Velocity_X,Middle_MCP_Velocity_Y,Middle_MCP_Velocity_Z,Middle_PIP_Velocity_X,Middle_PIP_Velocity_Y,Middle_PIP_Velocity_Z,Middle_DIP_Velocity_X,Middle_DIP_Velocity_Y,Middle_DIP_Velocity_Z,Middle_TIP_Velocity_X,Middle_TIP_Velocity_Y,Middle_TIP_Velocity_Z,Ring_CMC_Velocity_X,Ring_CMC_Velocity_Y,Ring_CMC_Velocity_Z,Ring_MCP_Velocity_X,Ring_MCP_Velocity_Y,Ring_MCP_Velocity_Z,Ring_PIP_Velocity_X,Ring_PIP_Velocity_Y,Ring_PIP_Velocity_Z,Ring_DIP_Velocity_X,Ring_DIP_Velocity_Y,Ring_DIP_Velocity_Z,Ring_TIP_Velocity_X,Ring_TIP_Velocity_Y,Ring_TIP_Velocity_Z,Pinky_CMC_Velocity_X,Pinky_CMC_Velocity_Y,Pinky_CMC_Velocity_Z,Pinky_MCP_Velocity_X,Pinky_MCP_Velocity_Y,Pinky_MCP_Velocity_Z,Pinky_PIP_Velocity_X,Pinky_PIP_Velocity_Y,Pinky_PIP_Velocity_Z,Pinky_DIP_Velocity_X,Pinky_DIP_Velocity_Y,Pinky_DIP_Velocity_Z,Pinky_TIP_Velocity_X,Pinky_TIP_Velocity_Y,Pinky_TIP_Velocity_Z,Hand_Acceleration_X,Hand_Acceleration_Y,Hand_Acceleration_Z,Thumb_CMC_Acceleration_X,Thumb_CMC_Acceleration_Y,Thumb_CMC_Acceleration_Z,Thumb_MCP_Acceleration_X,Thumb_MCP_Acceleration_Y,Thumb_MCP_Acceleration_Z,Thumb_DIP_Acceleration_X,Thumb_DIP_Acceleration_Y,Thumb_DIP_Acceleration_Z,Thumb_TIP_Acceleration_X,Thumb_TIP_Acceleration_Y,Thumb_TIP_Acceleration_Z,Index_CMC_Acceleration_X,Index_CMC_Acceleration_Y,Index_CMC_Acceleration_Z,Index_MCP_Acceleration_X,Index_MCP_Acceleration_Y,Index_MCP_Acceleration_Z,Index_PIP_Acceleration_X,Index_PIP_Acceleration_Y,Index_PIP_Acceleration_Z,Index_DIP_Acceleration_X,Index_DIP_Acceleration_Y,Index_DIP_Acceleration_Z,Index_TIP_Acceleration_X,Index_TIP_Acceleration_Y,Index_TIP_Acceleration_Z,Middle_CMC_Acceleration_X,Middle_CMC_Acceleration_Y,Middle_CMC_Acceleration_Z,Middle_MCP_Acceleration_X,Middle_MCP_Acceleration_Y,Middle_MCP_Acceleration_Z,Middle_PIP_Acceleration_X,Middle_PIP_Acceleration_Y,Middle_PIP_Acceleration_Z,Middle_DIP_Acceleration_X,Middle_DIP_Acceleration_Y,Middle_DIP_Acceleration_Z,Middle_TIP_Acceleration_X,Middle_TIP_Acceleration_Y,Middle_TIP_Acceleration_Z,Ring_CMC_Acceleration_X,Ring_CMC_Acceleration_Y,Ring_CMC_Acceleration_Z,Ring_MCP_Acceleration_X,Ring_MCP_Acceleration_Y,Ring_MCP_Acceleration_Z,Ring_PIP_Acceleration_X,Ring_PIP_Acceleration_Y,Ring_PIP_Acceleration_Z,Ring_DIP_Acceleration_X,Ring_DIP_Acceleration_Y,Ring_DIP_Acceleration_Z,Ring_TIP_Acceleration_X,Ring_TIP_Acceleration_Y,Ring_TIP_Acceleration_Z,Pinky_CMC_Acceleration_X,Pinky_CMC_Acceleration_Y,Pinky_CMC_Acceleration_Z,Pinky_MCP_Acceleration_X,Pinky_MCP_Acceleration_Y,Pinky_MCP_Acceleration_Z,Pinky_PIP_Acceleration_X,Pinky_PIP_Acceleration_Y,Pinky_PIP_Acceleration_Z,Pinky_DIP_Acceleration_X,Pinky_DIP_Acceleration_Y,Pinky_DIP_Acceleration_Z,Pinky_TIP_Acceleration_X,Pinky_TIP_Acceleration_Y,Pinky_TIP_Acceleration_Z,Pinch_ThumbToIndex,Pinch_ThumbToMiddle,Pinch_ThumbToRing,Pinch_ThumbToPinky,Thumb_CMC_Spread,Thumb_CMC_Flex,Thumb_PIP_Flex,Thumb_DIP_Flex,Index_MCP_Spread,Index_MCP_Flex,Index_PIP_Flex,Index_DIP_Flex,Middle_MCP_Spread,Middle_MCP_Flex,Middle_PIP_Flex,Middle_DIP_Flex,Ring_MCP_Spread,Ring_MCP_Flex,Ring_PIP_Flex,Ring_DIP_Flex,Pinky_MCP_Spread,Pinky_MCP_Flex,Pinky_PIP_Flex,Pinky_DIP_Flex,Thumb_CMC_Spread_AngularVelocity,Thumb_CMC_Flex_AngularVelocity,Thumb_PIP_Flex_AngularVelocity,Thumb_DIP_Flex_AngularVelocity,Index_MCP_Spread_AngularVelocity,Index_MCP_Flex_AngularVelocity,Index_PIP_Flex_AngularVelocity,Index_DIP_Flex_AngularVelocity,Middle_MCP_Spread_AngularVelocity,Middle_MCP_Flex_AngularVelocity,Middle_PIP_Flex_AngularVelocity,Middle_DIP_Flex_AngularVelocity,Ring_MCP_Spread_AngularVelocity,Ring_MCP_Flex_AngularVelocity,Ring_PIP_Flex_AngularVelocity,Ring_DIP_Flex_AngularVelocity,Pinky_MCP_Spread_AngularVelocity,Pinky_MCP_Flex_AngularVelocity,Pinky_PIP_Flex_AngularVelocity,Pinky_DIP_Flex_AngularVelocity,Thumb_CMC_Spread_AngularAcceleration,Thumb_CMC_Flex_AngularAcceleration,Thumb_PIP_Flex_AngularAcceleration,Thumb_DIP_Flex_AngularAcceleration,Index_MCP_Spread_AngularAcceleration,Index_MCP_Flex_AngularAcceleration,Index_PIP_Flex_AngularAcceleration,Index_DIP_Flex_AngularAcceleration,Middle_MCP_Spread_AngularAcceleration,Middle_MCP_Flex_AngularAcceleration,Middle_PIP_Flex_AngularAcceleration,Middle_DIP_Flex_AngularAcceleration,Ring_MCP_Spread_AngularAcceleration,Ring_MCP_Flex_AngularAcceleration,Ring_PIP_Flex_AngularAcceleration,Ring_DIP_Flex_AngularAcceleration,Pinky_MCP_Spread_AngularAcceleration,Pinky_MCP_Flex_AngularAcceleration,Pinky_PIP_Flex_AngularAcceleration,Pinky_DIP_Flex_AngularAcceleration

Keep in mind the header in an exported CSV file is not static, but is based on the data that is selected when exporting.

You can read the CSV Header Reference for more information about the available data.

Certain information, such as the unit system, can not directly be derived from the header.

Exporting

The CSV Export Dialog offers a lot of customization regarding which data is exported and in what format. Since not all selected options can be derived from the header, it is important to keep track of which settings you use.

Overview of Data Settings:

alt text

Finger Selection

You can select for which fingers you want to export data.

  • Hands
  • Thumb
  • Index
  • Middle
  • Ring
  • Pinky

Data Selection

You can select which data you want to export for the selected fingers.

Hand joints

  • Positions (Joint Positions)
    World space (absolute) positions of the joints on the X, Y and Z axis.
  • Rotations (Joint Rotations)
    World space (absolute) rotations of the joints on the X, Y, Z (and W) axis.
    The rotation order and rotation type can be configured in the export settings.
  • Velocity (Positional Joint Velocity)
    Positional velocity in unit / second of the wrist joint on the X, Y and Z axis.
    The unit system can be configured in the export settings.
  • Acceleration (Positional Joint Acceleration)
    Positional acceleration in unit / second^2 of the wrist joint on the X, Y and Z axis.
    The unit system can be configured in the export settings.
  • Pinch distances
    Distance in units between the thumb fingertip and other fingertips.
    The unit system can be configured in the export settings.

Ergonomics data

  • Joint Angles
    Joint angle (flexion or (hyper)extension, i.e. bending; abduction or adduction, i.e. splaying) of the joint in degrees.
  • Angular Velocity (Angular Joint Velocity)
    Angular velocity (abduction or adduction, i.e. splaying; flexion or (hyper)extension, i.e. bending) in degrees / second of the joint.
  • Angular Acceleration (Angular Joint Acceleration)
    Angular acceleration (abduction or adduction, i.e. splaying; flexion or (hyper)extension, i.e. bending) in degrees / second^2 of the joint.

Hand motion

  • ‍None
    No hand position and rotation is exported.
  • IMU
    Hand rotation based on glove orientation sensor.
  • Tracker
    Hand position and rotation based on a connected external tracker (i.e. SteamVR tracker).
  • Tracker Rotation
    Hand rotation based on a connected external tracker (i.e. SteamVR tracker).

The exported hand position and rotation (i.e. wrist) is affected by which option is chosen.

Coordinate System

Presets

The CSV exporter comes with presets for the coordinate system for many 3D animation applications, game engines and other commonly used real-time applications:

  • Blender
  • Cinema4D
  • CryEngine
  • GLM
  • Godot
  • Houdini
  • Marmoset Toolbag
  • ‍Maya
  • Modo
  • MotionBuilder
  • OpenCV
  • OpenGL
  • Source Engine
  • Unity
  • Unreal

Custom Configuration

The CSV exporter also offers the ability for custom settings for the coordinate system. Using this setting you can determine which axis is used for what data.

Overview of the Coordinate System settings:

alt text

  • Up Axis sets the up axis of the coordinate system.
  • View Axis sets the forward axis of the coordinate system.
  • Handedness sets the handedness of the coordinate system.

Please use the presets if you're not sure about specifying your own coordinate system.

Settings

Using the export setting you can define how data is exported.

Overview of the Export Settings:

alt text

  • Framerate sets the amount of frames per second.
  • ‍Value separator sets which symbol is used for separating values.
  • Decimal point sets the decimal separator to support different language locales.
  • Units sets the unit system.
  • Items to export selects which user data will be exported.
  • Include SMPTE timecode signal uses timecoded time when recorded with timecode.
  • Rotation type sets the rotation system (Euler Angles or Quaternion).
  • Rotation order sets in which order rotations are saved. When reconstructing rotations, the order has to be inversed.

Hand Motion

None / IMU / Tracker Rotation

When exporting with no hand position data, the hands (i.e. wrists) will be placed at the center of the digital scene (i.e. 0,0,0). This means all positional data will be based on this hand position.

Example of no Hand Position data: alt text

Tracker

When exporting with hand position data, the tracker data will be used to position the hands. This means all positional data will be based on the tracker location.

Example of Tracker Data driving the Hand Position:

alt text

Example of Visualizing CSV Data

The CSV data can easily be visualized to better understand it.

This example shows the index fingertip to thumb fingertip pinch distance.

Digital hand animation in FBX Review with CSV data in Excel with pinch distance graph:

alt text

  1. ‍Hand pose on frame 684 displayed in FBX Review and CSV data is selected in Excel.
  2. Line graph displaying the pinch distance in millimeters at frame 684.
  3. Distance to Thumb of 0.486646cm, i.e. ~5mm.
  4. Distance between the thumb fingertip and index fingertip visualized in red.
  5. Contact point of the thumb fingertip and index fingertip visualized in red.