public static byte[] ToBytes(CommandMessage message) { using (var memoryStream = new MemoryStream()) { Serializer.SerializeWithLengthPrefix(memoryStream, message, PrefixStyle.Fixed32); return memoryStream.GetBuffer(); } }
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); }
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); } } }
private void DrawViseme(int id) { var command = new CommandMessage { CommandType = CommandType.Viseme, Viseme = (Viseme) id }; BeginWriteCommand(command); }
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; } } } }
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); } }