using OpenCVForUnity.CoreModule; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; public class RightLateralHead : PoseBase { public override bool? AnalyzingAction(List<(DateTime, List)> points, bool isDataReGather = false) { if (points.Count < 2) // 0级实现逻辑 不做操作 return null; var pointList = points.OrderBy(p => p.Item1); var startP = points.First().Item2; var endP = points.Last().Item2; //"REye", "LEye" var startDir = "REye".vector(startP) - "LEye".vector(startP); var endDir = "REye".vector(endP) - "LEye".vector(endP); var angle = Vector2.SignedAngle(startDir, endDir); LogPrint.Warning($"angle: {angle}", PrintLevel.Normal); if (angle < -10) { return true; } else { return false; } } //public override Vector2 GetBasicVectorDirection(List startPoint, List endPoint) //{ // List vectors = new List(); // //必要点位 Nose Neck // //计算鼻子到头颈矢量 // //return GetAverageVector(startPoint, endPoint, "Nose"); // return GetTwoPointAverageVector(startPoint, endPoint, "Nose", "Neck"); //} protected override bool IsMovePoint(string tagName) { return "Nose" == tagName || "REye" == tagName || "LEye" == tagName || "REar" == tagName || "LEar" == tagName; } public override bool? MovementValidation(Vector2 distance, TimeSpan totalTimeSpan, int level) { return BasicMovementValidation(distance, totalTimeSpan, Vector2.right, level); } public override void ExcellenceEstimate(List<(TimeSpan, Vector2)> frameData, Vector2 distance, TimeSpan totalTimeSpan) { throw new NotImplementedException(); } }