#pragma warning disable 1998 public virtual async void ReceiveLogMessage(object sender, LogMessage message) { try { var match = _searchRegex.Match(message.Message); if (!match.Success) { return; } if (int.TryParse(match.Groups[1].Value, out int power)) { LastPower = power; _movingStatistics.Push(power); Notify(); } else { _logger.LogWarning("{methodName} {message}", "ReceiveLogMessage", "Unable to parse calculated value " + match.Groups[0].Value); } } catch (Exception e) { _logger.LogError(e, "{methodName} {message}", "ReceiveLogMessage", "unexpected error"); } }
public void NegativeInfinityTest() { var ms = new MovingStatistics(3); ms.Push(1.0); ms.Push(2.0); Assert.That(ms.Minimum, Is.Not.EqualTo(double.NegativeInfinity)); Assert.That(ms.Maximum, Is.Not.EqualTo(double.NegativeInfinity)); Assert.That(ms.Mean, Is.Not.EqualTo(double.NegativeInfinity)); Assert.That(ms.StandardDeviation, Is.Not.EqualTo(double.NegativeInfinity)); ms.Push(double.NegativeInfinity); Assert.That(ms.Minimum, Is.EqualTo(double.NegativeInfinity)); Assert.That(ms.Maximum, Is.Not.EqualTo(double.NegativeInfinity)); Assert.That(ms.Mean, Is.EqualTo(double.NegativeInfinity)); Assert.That(ms.StandardDeviation, Is.NaN); ms.Push(1.0); Assert.That(ms.Minimum, Is.EqualTo(double.NegativeInfinity)); Assert.That(ms.Maximum, Is.Not.EqualTo(double.NegativeInfinity)); Assert.That(ms.Mean, Is.EqualTo(double.NegativeInfinity)); Assert.That(ms.StandardDeviation, Is.NaN); ms.Push(double.NegativeInfinity); Assert.That(ms.Minimum, Is.EqualTo(double.NegativeInfinity)); Assert.That(ms.Maximum, Is.Not.EqualTo(double.NegativeInfinity)); Assert.That(ms.Mean, Is.EqualTo(double.NegativeInfinity)); Assert.That(ms.StandardDeviation, Is.NaN); ms.Push(2.0); Assert.That(ms.Minimum, Is.EqualTo(double.NegativeInfinity)); Assert.That(ms.Maximum, Is.Not.EqualTo(double.NegativeInfinity)); Assert.That(ms.Mean, Is.EqualTo(double.NegativeInfinity)); Assert.That(ms.StandardDeviation, Is.NaN); ms.Push(3.0); Assert.That(ms.Minimum, Is.EqualTo(double.NegativeInfinity)); Assert.That(ms.Maximum, Is.Not.EqualTo(double.NegativeInfinity)); Assert.That(ms.Mean, Is.EqualTo(double.NegativeInfinity)); Assert.That(ms.StandardDeviation, Is.NaN); ms.Push(4.0); Assert.That(ms.Minimum, Is.Not.EqualTo(double.NegativeInfinity)); Assert.That(ms.Maximum, Is.Not.EqualTo(double.NegativeInfinity)); Assert.That(ms.Mean, Is.Not.EqualTo(double.NegativeInfinity)); Assert.That(ms.StandardDeviation, Is.Not.NaN); }
public void NaNTest() { var ms = new MovingStatistics(3); Assert.That(ms.Minimum, Is.NaN); Assert.That(ms.Maximum, Is.NaN); Assert.That(ms.Mean, Is.NaN); Assert.That(ms.StandardDeviation, Is.NaN); ms.Push(1.0); Assert.That(ms.Minimum, Is.Not.NaN); Assert.That(ms.Maximum, Is.Not.NaN); Assert.That(ms.Mean, Is.Not.NaN); Assert.That(ms.StandardDeviation, Is.NaN); ms.Push(2.0); Assert.That(ms.Minimum, Is.Not.NaN); Assert.That(ms.Maximum, Is.Not.NaN); Assert.That(ms.Mean, Is.Not.NaN); Assert.That(ms.StandardDeviation, Is.Not.NaN); ms.Push(double.NaN); Assert.That(ms.Minimum, Is.NaN); Assert.That(ms.Maximum, Is.NaN); Assert.That(ms.Mean, Is.NaN); Assert.That(ms.StandardDeviation, Is.NaN); ms.Push(1.0); Assert.That(ms.Minimum, Is.NaN); Assert.That(ms.Maximum, Is.NaN); Assert.That(ms.Mean, Is.NaN); Assert.That(ms.StandardDeviation, Is.NaN); ms.Push(2.0); Assert.That(ms.Minimum, Is.NaN); Assert.That(ms.Maximum, Is.NaN); Assert.That(ms.Mean, Is.NaN); Assert.That(ms.StandardDeviation, Is.NaN); ms.Push(3.0); Assert.That(ms.Minimum, Is.Not.NaN); Assert.That(ms.Maximum, Is.Not.NaN); Assert.That(ms.Mean, Is.Not.NaN); Assert.That(ms.StandardDeviation, Is.Not.NaN); }
public double UpdateEngagement(FaceAnchorReading f) { blink.Push((f.FacialExpressions["EyeBlinkLeft"].Value + f.FacialExpressions["EyeBlinkRight"].Value) / 2); smile.Push((f.FacialExpressions["MouthSmileLeft"].Value + f.FacialExpressions["MouthSmileRight"].Value) / 2); frown.Push((f.FacialExpressions["MouthFrownLeft"].Value + f.FacialExpressions["MouthFrownRight"].Value) / 2); squint.Push((f.FacialExpressions["EyeSquintLeft"].Value + f.FacialExpressions["EyeSquintRight"].Value) / 2); gazeIn.Push((f.FacialExpressions["EyeLookInLeft"].Value + f.FacialExpressions["EyeLookInRight"].Value) / 2); gazeOut.Push((f.FacialExpressions["EyeLookOutLeft"].Value + f.FacialExpressions["EyeLookOutRight"].Value) / 2); if (previousReading == null) { headSpeed.Push(0); eyeDwell.Push(0); headTilt.Push(0); } else { var deltaTime = f.ReadingTimestamp.Subtract(previousReading.ReadingTimestamp); var deltaHead = VectorMagnitude(VectorDifference(previousReading.LookAtPointTransform, f.LookAtPointTransform)); headSpeed.Push((float)(deltaHead / deltaTime.TotalMilliseconds)); var leftEyeDisplacement = CoordinateDisplacement(f.LeftEyeTransform); var rightEyeDisplacement = CoordinateDisplacement(f.RightEyeTransform); var eyeDisplacement = Math.Abs(leftEyeDisplacement[0] + rightEyeDisplacement[0]) / 2; eyeDwell.Push((float)(eyeDisplacement > 0 ? 1 / eyeDisplacement : 0)); headTilt.Push((float)(Math.Abs(leftEyeDisplacement[1] + rightEyeDisplacement[1]) / 2)); } previousReading = f; var modelInput = new CoreMLPathwayInput { PPI = PPI, Blink = blink.Mean, Smile = smile.Mean, Frown = frown.Mean, Squint = squint.Mean, GazeIn = gazeIn.Mean, GazeOut = gazeOut.Mean, HeadSpeed = headSpeed.Mean, EyeDwell = eyeDwell.Mean, HeadTilt = headTilt.Mean }; IMLFeatureProvider predictionOut = model.GetPrediction(modelInput, out _); var targetFeatureValue = predictionOut.GetFeatureValue("target"); var prediction = targetFeatureValue.Int64Value; var classProbabilityFeatureValue = predictionOut.GetFeatureValue("classProbability"); var probabilityx = classProbabilityFeatureValue.DictionaryValue.Values[0]; var probabilityy = classProbabilityFeatureValue.DictionaryValue.Values[1]; //// this is a bit hacky, but it's all relative //value = (probabilityy.FloatValue - probabilityx.FloatValue - 0.5f) * 2f; //value = (value < 0f) ? 0f : value; value = probabilityy.FloatValue - probabilityx.FloatValue; if (value < 0f) { Console.WriteLine(value + " negative !"); value = 0f; } else { Console.WriteLine(value); } return(value); //return probabilityy.FloatValue; //return prediction; }