static void Main(string[] args) { Console.WriteLine("------------------------------------------"); Console.WriteLine("MetriCam 2 Minimal Sample."); Console.WriteLine("Get MetriCam 2 at http://www.metricam.net/"); Console.WriteLine("------------------------------------------"); // Create camera object Camera camera; try { camera = new Kinect2(); } catch (Exception e) { Console.WriteLine(Environment.NewLine + "Error: Could not create a PrimeSense camera object."); Console.WriteLine((e.InnerException == null) ? e.Message : e.InnerException.Message); Console.WriteLine("Press any key to exit."); Console.ReadKey(); return; } // Connect, get one frame, disconnect Console.WriteLine("Connecting camera"); camera.Connect(); Console.WriteLine("Fetching one frame"); camera.Update(); try { Console.WriteLine("Accessing color data"); ColorCameraImage img = (ColorCameraImage)camera.CalcChannel(ChannelNames.Color); Bitmap rgbBitmapData = img.ToBitmap(); } catch (ArgumentException ex) { Console.WriteLine(String.Format("Error getting channel {0}: {1}.", ChannelNames.Color, ex.Message)); } try { Console.WriteLine("Accessing distance data"); FloatCameraImage distancesData = (FloatCameraImage)camera.CalcChannel(ChannelNames.Distance); } catch (ArgumentException ex) { Console.WriteLine(String.Format("Error getting channel {0}: {1}.", ChannelNames.Distance, ex.Message)); } Console.WriteLine("Disconnecting camera"); camera.Disconnect(); Console.WriteLine("Finished. Press any key to exit."); Console.ReadKey(); }
static void Main(string[] args) { MetriLog log = new MetriLog(); Kinect2 cam = new Kinect2(); try { cam.Connect(); } catch (MetriCam2.Exceptions.ConnectionFailedException) { log.Error("Connection failed. Closing window in 5 sec."); Thread.Sleep(5 * 1000); return; } cam.ActivateChannel(ChannelNames.Color); bool running = false; while (running) { cam.Update(); } ProjectiveTransformationZhang pt; try { pt = (ProjectiveTransformationZhang)cam.GetIntrinsics(ChannelNames.Color); } catch (FileNotFoundException) { log.Warn("No PT found."); } try { pt = (ProjectiveTransformationZhang)cam.GetIntrinsics(ChannelNames.Color); } catch (FileNotFoundException) { log.Warn("No PT found."); } try { pt = (ProjectiveTransformationZhang)cam.GetIntrinsics(ChannelNames.Color); } catch (FileNotFoundException) { log.Warn("No PT found."); } try { RigidBodyTransformation rbt = cam.GetExtrinsics(ChannelNames.Color, ChannelNames.ZImage); } catch (FileNotFoundException) { log.Warn("No fwd RBT found."); } try { RigidBodyTransformation rbtInverse = cam.GetExtrinsics(ChannelNames.ZImage, ChannelNames.Color); } catch (FileNotFoundException) { log.Warn("No inverse RBT found."); } cam.Disconnect(); log.Info("Program ended. Closing window in 5 sec."); Thread.Sleep(5 * 1000); }
public unsafe void SetConstants(DeviceContext deviceContext, Kinect2.Kinect2Calibration kinect2Calibration, SharpDX.Matrix projection) { // hlsl matrices are default column order var constants = new ConstantBuffer(); for (int i = 0, col = 0; col < 4; col++) for (int row = 0; row < 4; row++) { constants.projection[i] = projection[row, col]; constants.depthToColorTransform[i] = (float)kinect2Calibration.depthToColorTransform[row, col]; i++; } constants.f[0] = (float)kinect2Calibration.colorCameraMatrix[0, 0]; constants.f[1] = (float)kinect2Calibration.colorCameraMatrix[1, 1]; constants.c[0] = (float)kinect2Calibration.colorCameraMatrix[0, 2]; constants.c[1] = (float)kinect2Calibration.colorCameraMatrix[1, 2]; constants.k1 = (float)kinect2Calibration.colorLensDistortion[0]; constants.k2 = (float)kinect2Calibration.colorLensDistortion[1]; DataStream dataStream; deviceContext.MapSubresource(constantBuffer, MapMode.WriteDiscard, SharpDX.Direct3D11.MapFlags.None, out dataStream); dataStream.Write<ConstantBuffer>(constants); deviceContext.UnmapSubresource(constantBuffer, 0); }
public static SharpDX.Direct3D11.Buffer CreateVertexBuffer(Device device, Kinect2.Kinect2Calibration kinect2Calibration) { // generate depthFrameToCameraSpace table var depthFrameToCameraSpaceTable = kinect2Calibration.ComputeDepthFrameToCameraSpaceTable(depthImageWidth, depthImageHeight); int numVertices = 6 * (depthImageWidth - 1) * (depthImageHeight - 1); var vertices = new VertexPosition[numVertices]; Int3[] quadOffsets = new Int3[] { new Int3(0, 0, 0), new Int3(1, 0, 0), new Int3(0, 1, 0), new Int3(1, 0, 0), new Int3(1, 1, 0), new Int3(0, 1, 0), }; int vertexIndex = 0; for (int y = 0; y < depthImageHeight - 1; y++) for (int x = 0; x < depthImageWidth - 1; x++) for (int i = 0; i < 6; i++) { int vertexX = x + quadOffsets[i].X; int vertexY = y + quadOffsets[i].Y; var point = depthFrameToCameraSpaceTable[depthImageWidth * vertexY + vertexX]; var vertex = new VertexPosition(); vertex.position = new SharpDX.Vector4(point.X, point.Y, vertexX, vertexY); vertices[vertexIndex++] = vertex; } var stream = new DataStream(numVertices * VertexPosition.SizeInBytes, true, true); stream.WriteRange(vertices); stream.Position = 0; var vertexBufferDesc = new BufferDescription() { BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.None, Usage = ResourceUsage.Default, SizeInBytes = numVertices * VertexPosition.SizeInBytes, }; var vertexBuffer = new SharpDX.Direct3D11.Buffer(device, stream, vertexBufferDesc); stream.Dispose(); return vertexBuffer; }
/// <summary> /// Converts an HBP.SkeletonBone array to Vcl.Utilities.IHumanoid /// </summary> /// <returns>The humanoid.</returns> /// <param name="humanoid_name">The selected name of the humanoid.</param> /// <param name="bones">The HBP.Skeleton bones.</param> /// <param name="frameNumber">The number of the frame.</param> public static IHumanoid From_HBP(string humanoid_name, Kinect2.IO.Skeleton bones, int frameNumber) { var hum = new K2Skeleton(humanoid_name, new string[] { string.Format("version={0}", "1.2"), string.Format("frameNumber={0}", frameNumber), string.Format("timestamp={0}", (frameNumber * 32).ToString("X11")), string.Format("userCount={0}", 1), string.Format("userID={0}", bones.ID), string.Format("state={0}", bones.State) }); for (int i = 0; i < 25; i++) { hum[i].Center = new Vec3f(bones[i][1], bones[i][2], bones[i][3]); hum[i].Rotation = new Orientation(bones[i][4], bones[i][5], bones[i][6], bones[i][7]); } return hum; }