Please complete steps in the Setup section before building your application.

Before Start

There are some steps that is required before start the detection:

  1. Make sure to accquire camera permission before staring detection.
  2. Call GestureInterface.UseExternalTransform function if needed.

Start Detection

Call GestureInterface.Start function to start hand detection. This function is non-blocking, detection will be started in a background thread.

The function accepts a GestureOption parameter, which can be used to change GestureBackend and GestureMode. Since modes are not supported on all devices, the option is modified to return what mode is selected in current detection.

The return value of the function indicates if any error occured during the start.

Calling this function when detection is already started is an no-op. The return value is always GestureFailure.None, option is modified to return current running mode.

Polling Detection Result

Since detection is running in a background thread, the caller need to poll detection result periodically. We suggest to poll results in higher frequency than detection speed based on platform and modes.

Polling detection can be done with the GestureInterface.UpdateResult function. The function is blocking until latest results is copied to GestureInterface class. The results can be read using the functions described in the next section.

GestureInterface.GetFrameIndex function can be used to check hand detection status or as a hint on polling the results:

  • If the index value is 0, this means detection is starting, no results are ready yet.
  • If the index value has increased, new hand results are updated.
  • If the index value does not change, this means new hand results are not ready yet, results remains same as the ones before you poll.
  • If the index is negative, this means detection has stopped due to error occurs. You should stop polling and restart detection.


Detection results do not change until you poll latest detection result again.

Using Detection Result

Use GestureInterface.GetLeft and GestureInterface.GetRight function for left/right hand detection result. The returned hand results are GestureResult class which contains gesture type and position information.

Before using gesture type and position, you should first check if left/right hand is visible in the camera. This can be doen use GestureResult.valid field. Gesture type and position are only meaningful when the hand is valid.


The points are returned in Unity3D coordinate system, i.e. +x is right, +y is up, +z is forward, unit is meter. You may need to convert your coordinate system before use.

Stop detection

Call GestureInterface.Stop function to stop hand detection. This function is blocking, it returns after the detection is stopped. Calling this function when detection is not started is an no-op.