示例#1
0
 public static byte[] ToBytes(CommandMessage message)
 {
     using (var memoryStream = new MemoryStream())
     {
         Serializer.SerializeWithLengthPrefix(memoryStream, message, PrefixStyle.Fixed32);
         return memoryStream.GetBuffer();
     }
 }
示例#2
0
文件: Server.cs 项目: Zerseu/Reflecta
    private void SpeechRecognitionEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        if (e.Result.Confidence < SPEECH_RECOGNITION_CONFIDENCE_THRESHOLD)
            return;

        var command = new CommandMessage
        {
            CommandType = CommandType.VoiceCommand,
            VoiceCommand = e.Result.Text
        };

        BeginWriteCommand(command);
    }
示例#3
0
文件: Server.cs 项目: Zerseu/Reflecta
    private void HighDefinitionFaceFrameReader_FrameArrived(object sender, HighDefinitionFaceFrameArrivedEventArgs e)
    {
        using (var frame = e.FrameReference.AcquireFrame())
        {
            if (frame != null && frame.IsTrackingIdValid && frame.IsFaceTracked &&
                frame.FaceAlignmentQuality == FaceAlignmentQuality.High)
            {
                frame.GetAndRefreshFaceAlignmentResult(FaceAlignment);

                var command = new CommandMessage
                {
                    CommandType = CommandType.KinectFace,
                    KinectFace =
                        new MoCapFaceFrame
                        {
                            ExpressionWeights = new float[(int) MoCapKinectFacialExpression.Count]
                        }
                };

                var time = (float) (DateTime.Now - MoCapRecordStartTime).TotalSeconds;

                var rotationX = FaceAlignment.FaceOrientation.X;
                var rotationY = FaceAlignment.FaceOrientation.Y;
                var rotationZ = FaceAlignment.FaceOrientation.Z;
                var rotationW = FaceAlignment.FaceOrientation.W;

                var transform = new TransformTime();
                transform.Time = time;
                transform.Position = Vector3.Zero;
                transform.Rotation = new Quaternion(rotationX, rotationY, rotationZ, rotationW);
                transform.Scale = Vector3.One;

                transform.Rotation = FaceDESP.Predict(transform.Rotation);

                command.KinectFace.FaceTransform = transform;

                foreach (FaceShapeAnimations faceShapeAnimation in Enum.GetValues(typeof (FaceShapeAnimations)))
                {
                    float weight;

                    if (FaceAlignment.AnimationUnits.TryGetValue(faceShapeAnimation, out weight))
                    {
                        FaceExpressionDESP[(int) faceShapeAnimation].Update(weight);

                        command.KinectFace.ExpressionWeights[(int) faceShapeAnimation] =
                            FaceExpressionDESP[(int) faceShapeAnimation].Predict(1);
                    }
                }

                if (IsRecording)
                    FaceFrames.Add(command.KinectFace);

                BeginWriteCommand(command);
            }
        }
    }
示例#4
0
文件: Server.cs 项目: Zerseu/Reflecta
    private void DrawViseme(int id)
    {
        var command = new CommandMessage
        {
            CommandType = CommandType.Viseme,
            Viseme = (Viseme) id
        };

        BeginWriteCommand(command);
    }
示例#5
0
文件: Server.cs 项目: Zerseu/Reflecta
    private void BodyFrameReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
    {
        using (var frame = e.FrameReference.AcquireFrame())
        {
            if (frame != null)
            {
                if (Bodies == null)
                    Bodies = new Body[frame.BodyCount];

                frame.GetAndRefreshBodyData(Bodies);

                foreach (var body in Bodies)
                    if (body.IsTracked)
                    {
                        HighDefinitionFaceFrameSource.TrackingId = body.TrackingId;

                        var command = new CommandMessage
                        {
                            CommandType = CommandType.KinectBody,
                            KinectBody =
                                new MoCapBodyFrame
                                {
                                    SkeletonTransforms = new TransformTime[(int) MoCapKinectBone.Count]
                                }
                        };

                        foreach (JointType jointType in Enum.GetValues(typeof (JointType)))
                        {
                            Joint joint;

                            if (body.Joints.TryGetValue(jointType, out joint))
                                if (joint.TrackingState != TrackingState.NotTracked)
                                {
                                    JointOrientation jointOrientation;

                                    if (body.JointOrientations.TryGetValue(jointType, out jointOrientation))
                                    {
                                        var time = (float) (DateTime.Now - MoCapRecordStartTime).TotalSeconds;

                                        //var positionX = joint.Position.X;
                                        //var positionY = joint.Position.Y;
                                        //var positionZ = joint.Position.Z;

                                        var rotationX = jointOrientation.Orientation.X;
                                        var rotationY = jointOrientation.Orientation.Y;
                                        var rotationZ = jointOrientation.Orientation.Z;
                                        var rotationW = jointOrientation.Orientation.W;

                                        var transform = new TransformTime();
                                        transform.Time = time;
                                        transform.Position = Vector3.Zero;
                                        transform.Rotation = new Quaternion(rotationX, rotationY, rotationZ, rotationW);
                                        transform.Scale = Vector3.One;

                                        transform.Rotation = BodyDESP[(int) jointType].Predict(transform.Rotation);

                                        command.KinectBody.SkeletonTransforms[(int) jointType] = transform;
                                    }
                                }
                        }

                        if (IsRecording)
                            BodyFrames.Add(command.KinectBody);

                        BeginWriteCommand(command);

                        break;
                    }
            }
        }
    }
示例#6
0
文件: Server.cs 项目: Zerseu/Reflecta
    private void BeginWriteCommand(CommandMessage command)
    {
        if (CommandStream != null && CommandStream.IsConnected)
        {
            var commandBytes = CommandMessage.ToBytes(command);

            CommandStream.WaitForPipeDrain();

            CommandStream.BeginWrite(commandBytes, 0, commandBytes.Length, WriteCommandAsyncCallback, null);
        }
    }