コード例 #1
0
ファイル: Program.cs プロジェクト: btlorch/MetriCam2
        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();
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
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;
        }
コード例 #5
0
        /// <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;
        }