From 6c9f7ffab621bfc76dd7d20c6407682cd94f7970 Mon Sep 17 00:00:00 2001 From: tanglong <842690096@qq.com> Date: Wed, 13 May 2026 11:11:05 +0800 Subject: [PATCH] =?UTF-8?q?ai=E4=BC=98=E5=8C=966?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Wpf_AiSportsMicrospace/Common/SportOperate.cs | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/Wpf_AiSportsMicrospace/Common/SportOperate.cs b/Wpf_AiSportsMicrospace/Common/SportOperate.cs index 1b4ea44..7fed95a 100644 --- a/Wpf_AiSportsMicrospace/Common/SportOperate.cs +++ b/Wpf_AiSportsMicrospace/Common/SportOperate.cs @@ -119,7 +119,16 @@ namespace Wpf_AiSportsMicrospace.Common // ---- 右手举手优先 ---- int rightHandAction = DetectRightHandRaise(target); if (rightHandAction != (int)WavingAction.None) + { + ResetWaveCounts(); return rightHandAction; + } + + if (IsRightHandRaiseIntent(target)) + { + ResetWaveCounts(); + return (int)WavingAction.None; + } // ---- 左右挥手累加 ---- int leftValue = _leftTracker.Tracking(target); @@ -130,19 +139,43 @@ namespace Wpf_AiSportsMicrospace.Common if (_leftWaveCount >= WaveThreshold) { - _leftWaveCount = 0; + ResetWaveCounts(); return (int)WavingAction.LeftWave; } if (_rightWaveCount >= WaveThreshold) { - _rightWaveCount = 0; + ResetWaveCounts(); return (int)WavingAction.RightWave; } return (int)WavingAction.None; } + private void ResetWaveCounts() + { + _leftWaveCount = 0; + _rightWaveCount = 0; + } + + private static bool IsRightHandRaiseIntent(Human human) + { + var wrist = human.Keypoints.FirstOrDefault(k => k.Name == "right_wrist"); + var elbow = human.Keypoints.FirstOrDefault(k => k.Name == "right_elbow"); + var shoulder = human.Keypoints.FirstOrDefault(k => k.Name == "right_shoulder"); + + if (wrist == null) + return false; + + if (shoulder != null && wrist.Y <= shoulder.Y + 40) + return true; + + if (elbow != null && wrist.Y <= elbow.Y - 20) + return true; + + return false; + } + /// /// 优化后的右手举手检测 ///