1.7 SDK and Developer Toolkit Known Issues
Kinect for Windows 1.7
Here is a list of known issues with this release. As the 1.7 new features are released as a part of the toolkit, not the SDK, please pay careful attention to the Toolkit Known Issues.
Software Development Kit (SDK)
SkeletonFrame.TrackingMode property is reserved for future use
The value returned by the SkeletonFrame.TrackingMode property may change in future releases. An application should not use this property. The SkeletonFrame.TrackingMode property of the SkeletonFrame class always returns SkeletonTrackingMode.Default, even when the skeletal tracking (ST) engine is in Seated mode.
To determine that ST is in Seated mode, check the SkeletonStream.TrackingMode property or confirm that the TrackingStatus property of one of the lower 10 joints of a tracked skeleton, such as the HipCenter joint, returns NotTracked.
Do Not Use INuiSensor::NuiUniqueId or KinectSensor.UniqueKinectId
Do not use the KinectSensor.UniqueKinectId property (or the corresponding INuiSensor.NuiUniqueId method) because of inconsistent behavior between Xbox and Kinect for Windows sensors. Instead, use the KinectSensor.DeviceConnectionId property to identify the sensor based on the USB port it is plugged into.
Call KinectSensor.Start and KinectSensor.Stop after sensor transitions in KinectSensorCollection.StatusChanged events
When KinectSensorCollection.StatusChanged events occur, ensure that you call the KinectSensor.Start method on the transition to KinectStatus.Connected. Call KinectSensor.Stop on all transitions away from KinectStatus.Connected. (Test using unplug, unpower, and machine sleep/hibernate.)
Calls to KinectSensor.Map and DepthImageFrame.Map may fail if you called KinectSensor.Stop already or removed the sensor while the application is running
Calls to KinectSensor.Map methods and DepthImageFrame.Map methods may fail throwing an UnauthorizedAccessException if you have already called KinectSensor.Stop or the sensor has been removed while the application is running. Use a try/catch around Map API calls to catch this exception.
Call SetDeviceStatusCallback before calling NuiInitialize or NuiShutdown.
Call NuiSetDeviceStatusCallback before invoking multiple calls to either NuiInitialize or NuiShutdown.
USB host controller compatibility
The Kinect for Windows drivers have encountered compatibility problems with certain USB host controllers when tested in specific computer configurations. Some examples of these controllers are the AMD Fusion A75 USB2.0 controller, certain NEC USB 2.0 controllers, the Etron USB 3.0 Extensible Host Controller, and the Renesas Electronics USB 3.0 Controller. On those controllers, you may encounter a problem, such as a low RGB frame rate, or a Not Ready status when plugging/unplugging a Kinect. If this happens to you, you may have to restart your application or reboot your computer. You can also try updating your USB controller drivers, or plugging your device into another USB 2.0 controller.
Number and date normalization in Kinect for Windows Speech Grammars
Kinect for Windows is integrated with Microsoft Speech Platform Version 11, an upgrade from the Version 10.2 included in previous Beta versions. This version, in conjunction with the Kinect for Windows Speech Language Pack, provides superior speech recognition capabilities to Kinect for Windows.
Note that this version comes without the support for standard TN/ITN (numbers and dates normalization), requiring some changes to grammars built on top of previous Beta versions. Now you need to expand numbers and dates on your grammars. For example use “Play song number five” instead of “Play song number 5”.
Microphone Array default gain setting is sub-optimal
The default gain applied to the sound recorded by the Kinect sensor’s Microphone array is higher than optimal and can affect speech recognition quality when users are speaking close to the Kinect sensor.
If you notice the Kinect audio signal clipping in your application, or experience the Speech Platform SDK reporting AudioSignalProblemOccurred events use TooLoud audio input, set the microphone gain level to 3 on a scale of 100.
To set the correct gain value:
- Open the Windows Control Panel, select Sound, then the Recording tab.
- Select Kinect Microphone Array and then press the Properties button. Select the Levels tab.
- Set the Microphone Array gain level to 3. (The default is 100.) Press OK and then OK.
Audio is not processed if skeleton stream is enabled after starting audio capture
Due to a bug, enabling or disabling the SkeletonStream will stop the AudioSource stream returned by the Kinect sensor. The following sequence of instructions will stop the audio stream:
kinectSensor.Start(); kinectSensor.AudioSource.Start(); // --> this will create an audio stream kinectSensor.SkeletonStream.Enable(); // --> this will stop the audio stream as an undesired side effect
The workaround is to invert the order of the calls or to restart the AudioSource after changing SkeletonStream status.
Workaround #1 (start audio after skeleton): kinectSensor.Start(); kinectSensor.SkeletonStream.Enable(); kinectSensor.AudioSource.Start(); Workaround #2 (restart audio after skeleton): kinectSensor.Start(); kinectSensor.AudioSource.Start(); // --> this will create an audio stream kinectSensor.SkeletonStream.Enable(); // --> this will stop the audio stream as an undesired side effect kinectSensor.AudioSource.Start(); // --> this will create another audio stream
Resetting the SkeletonStream engine status is an expensive call. It should be made at application startup only, unless the app has specific needs that require turning Skeleton on and off.
Developer Toolkit
KinectFusion issues:
Performance in the samples in Win7 is significantly lower if the Desktop Window Manager is not running. Please ensure you have a theme such as Aero turned on for maximum sample performance.
The KinectFusionExplorer-WPF sample runs at lower framerates than the KinectFusionExplorer-D2D sample. This is due to different threading models between the applications, not a performance difference in the managed and native API sets.
KinectFusionBasics-WPF may crash on Win8 and the other KinectFusion samples may give unclear failure messages when no DirectX11 device is present in the system. KinectFusionBasics-D2D may say "Device -1 not able to run Kinect Fusion, or error initializing.", KinectFusionExplorer-D2D may say "Kinect Fusion reconstruction volume not initialized. Please try reducing volume size or restarting" and KinectFusionExplorer-WPF may say "Volume resolution should be greater than 0 and multiple of 32" or "Failed to initialize GPU". In your own production code it is recommended that you first check to make sure a suitable device is present using the NuiFusionGetDeviceInfo function and falling back to CPU reconstruction if your scenario supports non-real-time reconstruction.
Visual Studio Express versions do not support ATL. To compile the KinectFusionExplorer-D2D sample in VS Express, you should be able to work around this by commenting out the mesh saving code in CKinectFusionExplorerD3D::SaveMeshFile and the WriteBinarySTLMeshFile and WriteAsciiObjMeshFile functions in KinectFusionHelper.h and .cpp, and the ATL include files in stdafx.h, together with any libraries no longer required.
In the managed C# Microsoft.Kinect.Toolkit.Fusion component in FusionPointCloudImageFrame.cs the CopyPixelDataFrom and CopyPixelDataTo functions copy an incorrect number of pixels. Each point cloud pixel is actually 6 sequential floating point numbers (x,y,z position, x,y,z normal).
To correct, change line 70 from:
"Marshal.Copy(sourcePixelData, 0, dest, this.PixelDataLength);"
to:
"Marshal.Copy(sourcePixelData, 0, dest, this.PixelDataLength * this.BytesPerPixel / sizeof(float));"
and change line 96 from:
"Marshal.Copy(src, destinationPixelData, 0, this.PixelDataLength);"
to
"Marshal.Copy(src, destinationPixelData, 0, this.PixelDataLength * this.BytesPerPixel / sizeof(float));"
The NuiFusionAlignPointClouds API parameter pObservedToReferenceTransform is incorrectly named - as the summary comments in the function mention, the function actually returns the Reference-To-Observed transformation matrix (i.e. it should actually be named pReferenceToObservedTransform).
Samples
Kinect Explorer-D2D
When the Kinect Explorer-D2D sample is launched from Visual Studio, the Kinect Window will hang if any of the below options are chosen from the Color Stream chooser and the user clicks on the color stream again:
- “InfraredResolution640x480Fps30”
- “RawBayerResolution640x480Fps30”
- “RawBayResolution1280x980Fps12”
Kinect Fusion Basics - WPF
Launching Kinect Fusion Basics – WPF without a DirectX 11 enabled graphics card will result in a crash. The application does not handle the HResult execption E_INVALIDARG which is thrown by MainNui::CreateVolume.
Kinect Fusion Explorer - D2D
Although not currently used by the sample, the Matrix4 invert function (InvertMatrix4Pose) and vector rotate function (RotateVector) in KinectFusionHelper.cpp are incorrect internally, meaning a matrix will not be correctly inverted, or vector correctly rotated if these functions are called by the user.
Change the line 242 from
Matrix4 negRotation = rotation;
to
Matrix4 negRotation = invRotation;
to correct InvertMatrix4Pose, and change lines 221-224 in RotateVector to:
result.x = (rot.M11 * vec.x) + (rot.M21 * vec.y) + (rot.M31 * vec.z);
result.y = (rot.M12 * vec.x) + (rot.M22 * vec.y) + (rot.M32 * vec.z);
result.z = (rot.M13 * vec.x) + (rot.M23 * vec.y) + (rot.M33 * vec.z);
KinectInteractions
Known Issues with Scroll Interactions:
- Currently you cannot grip outside the Kinect Scroll Viewer and expect it to be recognized as a grip.
- Mouse Scrollbars show when content is loading.
Known issues with Buttons:
- Some horizontally shaped buttons do not get larger on hover.
- Kinect button labels are difficult to read while buttons are scrolling.
Known issues with Pressing:
- Pressing doesn't work well on large surfaces (scroll viewer, large canvases etc.) so for scenarios like "press to paint" it will not work well.
- Pressing accuracy decreases rapidly as user moves away from optimal location.
Known issues with Grip:
- Grip accuracy is worse for left hand than it is for right hand.
- There is a noticeable delay in grip recognition.
- Grip does not work as well with sleeves or anything that obstructs the wrist.
- Grip should be used within 1.5m to 2m away from the sensor, and oriented directly facing the sensor.
Kinect Studio
A Kinect Studio recording (stored in a .xed file) plays properly only when the same Kinect sensor is being used by the application. You should keep a record of the precise sensor used to record each file so that you can play the file back with correct synchronization between color and depth cameras. We are considering updating the information that Kinect Studio stores in the .xed file so that playback is possible using any sensor.
If the Kinect-enabled application that you are recording turns skeletal tracking on or off while recording, recording stops. However, toggling the skeleton stream using SkeletonStream.Enable and SkeletonStream.Disable will cause Kinect Studio to lose connection with the application and stop playback/record or live preview.
If Kinect Studio ever crashes or hangs, the intact recording can be found in the temporary file directory specified under Tools > Options. (Change the file extension to .xed before playing it.)
While recording content in M2's Kinect Studio, depth values less than 800 will be recorded as unknown. Do not do production recording with M2's Kinect Studio.
Other Issues
Installation of the DirectX SDK (June 2010) fails if installed after the Kinect for Windows SDK
There is a known issue with the Visual C++ 2010 Redistributable Package included in the DirectX SDK installer that causes this failure. You can find more information about this issue and the workaround at this location: Known Issue: DirectX SDK (June 2010) Setup and the S1023 error.