diff --git a/src/Baballonia/Assets/Resources.Designer.cs b/src/Baballonia/Assets/Resources.Designer.cs index 56d9ff32..6cf43ee1 100644 --- a/src/Baballonia/Assets/Resources.Designer.cs +++ b/src/Baballonia/Assets/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace Baballonia.Assets { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class Resources { diff --git a/src/Baballonia/Services/ProcessingLoopService.cs b/src/Baballonia/Services/ProcessingLoopService.cs index 7a78c5f1..4517b449 100644 --- a/src/Baballonia/Services/ProcessingLoopService.cs +++ b/src/Baballonia/Services/ProcessingLoopService.cs @@ -29,6 +29,9 @@ public record struct Expressions(float[]? FaceExpression, float[]? EyeExpression private readonly EyeProcessingPipeline _eyeProcessingPipeline; private readonly EyePipelineManager _eyePipelineManager; private readonly IEyePipelineEventBus _eyePipelineEventBus; + private int _faceTrackingExceptions = 0; + private int _eyeTrackingExceptions = 0; + private readonly DispatcherTimer _drawTimer = new() { @@ -63,11 +66,19 @@ private void TimerEvent(object? s, EventArgs e) var faceExpression = _faceProcessingPipeline.RunUpdate(); if (faceExpression != null) expressions.FaceExpression = faceExpression; + _faceTrackingExceptions = 0; } catch (Exception ex) { - _logger.LogError("Unexpected exception in Face Tracking pipeline, stopping... : {}", ex); - _facePipelineManager.StopCamera(); + if (_faceTrackingExceptions++ < 3) + { + _logger.LogError("Unexpected exception in Face Tracking pipeline, allowing to continue in case its anomalous... : {}", ex); + } + else + { + _logger.LogError("Unexpected exception in Face Tracking pipeline, stopping due to exceeding failure limit... : {}", ex); + _facePipelineManager.StopCamera(); + } _facePipelineEventBus.Publish(new FacePipelineEvents.ExceptionEvent(ex)); } @@ -76,11 +87,19 @@ private void TimerEvent(object? s, EventArgs e) var eyeExpression = _eyeProcessingPipeline.RunUpdate(); if (eyeExpression != null) expressions.EyeExpression = eyeExpression; + _eyeTrackingExceptions = 0; } catch (Exception ex) { - _logger.LogError("Unexpected exception in Eye Tracking pipeline, stopping... : {}", ex); - _eyePipelineManager.StopAllCameras(); + if (_eyeTrackingExceptions++ < 3) + { + _logger.LogError("Unexpected exception in Eye Tracking pipeline, allowing to continue in case its anomalous... : {}", ex); + } + else + { + _logger.LogError("Unexpected exception in Eye Tracking pipeline, stopping due to exceeding failure limit... : {}", ex); + _eyePipelineManager.StopAllCameras(); + } _eyePipelineEventBus.Publish(new EyePipelineEvents.ExceptionEvent(ex)); }