I have the opportunity to borrow a Kinect hardware – to make an application( I will make a simple anti-theft application).
The steps for developing in Kinect are:
- Download the SDK from http://www.microsoft.com/en-us/kinectforwindows/develop/overview.aspx – it contains the drivers also
- Connect Kinect to USB , plug in the socket
- Run the Kinect Explorer or Kinect Shape Game from Kinect SDK Sample Browser installed at 1. Ensure it works.
- Read the Kinect Explorer source –it is SO clear!
- Read documentation – finally, you should RTFM
Optional resources:
- http://kinectcontrib.codeplex.com/ – Visual Studio template for Skeleton, Audio, Video. Simple example that works ( simpler than Kinect Explorer !)
- http://c4fkinect.codeplex.com/ – added methods to Kinect.
- http://kinecttoolbox.codeplex.com/ – detection of gesture.
Example 1: Integrating saving image in Kinect Explorer when a skeleton is detected
Add reference to optional resource 2( either download , either via Nuget)
Search for KinectAllFramesReady in KinectSkeletonViewer.xaml.cs and put this code
var takePic = this.skeletonData.Count(item => item.TrackingState == SkeletonTrackingState.Tracked) > 0;
if (takePic)
{
DateTime imgDate = DateTime.Now;
string imageName = "andrei" + imgDate.ToString("yyyyMMdd_HHmmss") + ".jpg";
if (!File.Exists(imageName))
{
using (var image = e.OpenColorImageFrame())
{
if (image != null && this.skeletonData.Length > 0 && this.skeletonData.Count(item => item.TrackingState != SkeletonTrackingState.NotTracked) > 0)
if (image != null && takePic)
{
var x = image.ToBitmapSource();
var b = Save(x, ImageFormat.Jpeg);
var t = Task.Factory.StartNew(
(img) =>
{
imgDate = DateTime.Now;
imageName = "andrei" + imgDate.ToString("yyyyMMdd_HHmmss") + ".jpg";
if (File.Exists(imageName))
return;
byte[] i = img as byte[];
if (i != null)
{
File.WriteAllBytes(imageName, i);
};
}, b);
//t.Start();
}
}
}
}
Example 2 : Detecting circle by right hand in Kinect Explorer when a skeleton is detected
Add reference to optional resource 3( either download , either via Nuget)
Download circleKB.save file and put in your project. Ensure “Copy to output directory” is “copy always/copy if newer”
Add a variable named
TemplatedGestureDetector circleGestureRecognizer;
In KinectSkeletonViewer.xaml.cs in constructor put
using (Stream recordStream = File.Open("circleKB.save", FileMode.Open))
{
circleGestureRecognizer = new TemplatedGestureDetector("Circle", recordStream);
circleGestureRecognizer.OnGestureDetected += new Action<string>(circleGestureRecognizer_OnGestureDetected);
//TODO : implement circleGestureRecognizer_OnGestureDetected : void circleGestureRecognizer_OnGestureDetected(string obj)
}
Search for KinectAllFramesReady in KinectSkeletonViewer.xaml.cs and put this code
foreach (Joint joint in skeleton.Joints)//existing code
{
Point mappedPoint = this.GetPosition2DLocation(depthImageFrame, joint.Position);//existing code
jointMapping[joint.JointType] = new JointMapping//existing code
{
Joint = joint,
MappedPoint = mappedPoint
};
//new code from here:
if ((joint.TrackingState == JointTrackingState.Tracked) && (joint.JointType == JointType.HandRight))
{
circleGestureRecognizer.Add(joint.Position, Kinect);
}
}
That will be all…
If you have developed with Kinect, please share your sources as comments.