Esempio n. 1
0
#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);
        }
Esempio n. 4
0
        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;
        }