For the older Kinect v1.0 there was a sample included with the Kinect SDK which provided browser compatibility. The general idea is that the Kinect SDK can be used to retrieve the various Kinect data streams i.e., the RGB stream, body tracking data, etc. and from within a console or desktop app a webserver serves up that data for consumption over localhost by a web app running in the browser. This opens up compatibility with various javascript frameworks such as Babylon.js (another option might be to run inside a Windows Store javascript app). The official sample is pretty comprehensive so I thought it might be useful to have something simpler to hand. Anyway, after a bit of searching around I found a few examples for v1.0 but nothing with v2.0 support so I decided to hack one together. This might come in handy at the London Kinect Hackathon on 21st and 22nd March REGISTER here.
I used SuperWebSocket from within a .NET console app to retrieve the Kinect data and broadcast it to any connected web sockets. The socket server code is simple:
I used a canvas to render the results in the browser – this shows the response to the web app receiving a web socket message:
Code is here https://github.com/peted70/kinectv2-webserver
Hi there,
Great job you did! and thanks for sharing.
Working with your code help me a lot to start.
But i found a bug, that i manage to make a dirty fix when working with multiplayer.
Somehow if are more users on the field.
The server send the same positions for all of them. I think you have a better way to do this but. What i did was to clean and populate new points for each one. While saving it and increment on a string text file.
here is my changes
On the server (SerialiseBodyData)
private static string SerialiseBodyData() {
trackedBodies = bodies.Where(b => b.IsTracked == true).ToList();
if (trackedBodies.Count() < 1)
return null;
bodyTransferData.Clear();
var txt = "";
for (var t = 0; t j.Value).Select(p => p.Position).ToArray();
ks.CoordinateMapper.MapCameraPointsToColorSpace(list, colorTempPoints);
bodyTransferData.Add(colorTempPoints);
var str = JsonConvert.SerializeObject(bodyTransferData).ToString();
//remove first and last string else we will have problems on the client json file
str = str.Remove(0, 1);
str = str.Remove(str.Length - 1);
if (t==0)
txt += str;
else
txt += ","+ str;
}
//fix json file and send
txt = "[" + txt + "]";
return txt.ToString();
}
Hope it helps other people ho are trying to do the same.
If you have a better solution let me know
Sorry on my last post i have deleted few lines more 😉
Here is again the code
private static string SerialiseBodyData()
{
trackedBodies = bodies.Where(b => b.IsTracked == true).ToList();
if (trackedBodies.Count() < 1)
return null;
var txt = "";
for (var t = 0; t j.Value).Select(p => p.Position).ToArray();
ks.CoordinateMapper.MapCameraPointsToColorSpace(list, colorTempPoints);
bodyTransferData.Add(colorTempPoints);
var str = JsonConvert.SerializeObject(bodyTransferData).ToString();
str = str.Remove(0, 1);
str = str.Remove(str.Length – 1);
if (t==0)
txt += str;
else
txt += “,”+ str;
}
txt = “[” + txt + “]”;
return txt.ToString();
}
Sorry dude you web site is deleting few lines. If you want to know send me an email.
And i will send you the file.
Thanks for sharing and glad you found the original post useful!
Just to be clarified, your project is collecting kinect data from the server side or the client side?
I am searching about how I could read kinect sensor client-side only. At first sight I thought you did it, but looking at the code I think you created a webservice to send the data for the browser rendering only is that right?
It is using a websocket connection with the websocket server running on the client computer. Can you give more details about ‘read kinect sensor client-side only’ – what are you trying to do?