识别
This commit is contained in:
parent
e492e408ee
commit
a0769ae579
@ -34,7 +34,11 @@ namespace Wpf_AiSportsMicrospace
|
|||||||
private readonly List<SportDescriptor> _sports;
|
private readonly List<SportDescriptor> _sports;
|
||||||
private SportBase _sport;
|
private SportBase _sport;
|
||||||
private readonly SportDetectionQueue _detectQueue;
|
private readonly SportDetectionQueue _detectQueue;
|
||||||
private IPointTracker _tracker;
|
private IPointTracker _leftTracker;
|
||||||
|
private IPointTracker _rightTracker;
|
||||||
|
private IPointTracker _leftElbow;
|
||||||
|
private IPointTracker _rightElbow;
|
||||||
|
private WebcamClient _webcamClient;
|
||||||
|
|
||||||
public Home()
|
public Home()
|
||||||
{
|
{
|
||||||
@ -63,7 +67,16 @@ namespace Wpf_AiSportsMicrospace
|
|||||||
|
|
||||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
_tracker = PostureCalculate.CreatePointTracker("left_wrist", 0);
|
_leftTracker = PostureCalculate.CreatePointTracker("left_wrist", 0);
|
||||||
|
_rightTracker = PostureCalculate.CreatePointTracker("right_wrist", 0);
|
||||||
|
_leftElbow = PostureCalculate.CreatePointTracker("left_elbow", 0);
|
||||||
|
_rightElbow = PostureCalculate.CreatePointTracker("right_elbow", 0);
|
||||||
|
|
||||||
|
_leftTracker.Amplitude = 0.05f;
|
||||||
|
_rightTracker.Amplitude = 0.05f;
|
||||||
|
|
||||||
|
_leftElbow.Amplitude = 0.05f;
|
||||||
|
_rightElbow.Amplitude = 0.05f;
|
||||||
|
|
||||||
LoadRTSP();
|
LoadRTSP();
|
||||||
}
|
}
|
||||||
@ -74,13 +87,11 @@ namespace Wpf_AiSportsMicrospace
|
|||||||
//_sport.Start();
|
//_sport.Start();
|
||||||
//_detectQueue.Start();
|
//_detectQueue.Start();
|
||||||
|
|
||||||
var _webcamClient = WebcamClient.CreateRTSP("192.168.3.64", "admin", "yd708090", 554u);
|
_webcamClient = WebcamClient.CreateRTSP("192.168.3.64", "admin", "yd708090", 554u);
|
||||||
|
|
||||||
//处理抽帧回调
|
//处理抽帧回调
|
||||||
_webcamClient.OnExtractFrame += this.OnFrameExtracted;
|
_webcamClient.OnExtractFrame += this.OnFrameExtracted;
|
||||||
_webcamClient.StartExtract();//开始抽帧
|
_webcamClient.StartExtract();//开始抽帧
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private DateTime _lastSlideTime = DateTime.MinValue;
|
private DateTime _lastSlideTime = DateTime.MinValue;
|
||||||
@ -96,31 +107,42 @@ namespace Wpf_AiSportsMicrospace
|
|||||||
{
|
{
|
||||||
var buffer = frame.GetImageBuffer(ImageFormat.Jpeg).ToArray();
|
var buffer = frame.GetImageBuffer(ImageFormat.Jpeg).ToArray();
|
||||||
var humanResult = _humanPredictor.Predicting(buffer, frame.Number);
|
var humanResult = _humanPredictor.Predicting(buffer, frame.Number);
|
||||||
var human = humanResult?.Humans?.FirstOrDefault();
|
|
||||||
if (human == null) return;
|
|
||||||
|
|
||||||
var tr = _tracker.Tracking(human); // 0 左滑,1 右滑
|
var humans = humanResult?.Humans?.ToList();
|
||||||
|
if (humans == null || humans.Count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
// 节流:每 500ms 最多更新一次 UI
|
//var human = humans
|
||||||
if ((DateTime.Now - _lastSlideTime).TotalMilliseconds < 300) return;
|
// .Where(h =>
|
||||||
|
// h.Keypoints.Any(kp => kp.Name == "left_ankle" && kp.X < 1020 && kp.Y > 900 && kp.Y < 1020) &&
|
||||||
|
// h.Keypoints.Any(kp => kp.Name == "right_ankle" && kp.X > 750 && kp.Y > 900 && kp.Y < 1020)
|
||||||
|
// )
|
||||||
|
// .FirstOrDefault();
|
||||||
|
|
||||||
|
var human = humans.FirstOrDefault();
|
||||||
|
|
||||||
|
if (human == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var leftResult = _leftTracker.Tracking(human);
|
||||||
|
var rightResult = _rightTracker.Tracking(human);
|
||||||
|
|
||||||
|
var leftElbowResult = _leftElbow.Tracking(human);
|
||||||
|
var rightElbowResult = _rightElbow.Tracking(human);
|
||||||
|
|
||||||
|
// 节流:每 300ms 最多更新一次 UI
|
||||||
|
if ((DateTime.Now - _lastSlideTime).TotalMilliseconds < 500) return;
|
||||||
_lastSlideTime = DateTime.Now;
|
_lastSlideTime = DateTime.Now;
|
||||||
|
|
||||||
Application.Current?.Dispatcher?.BeginInvoke(new Action(() =>
|
// 根据手势结果选择滑动方向
|
||||||
|
if (leftResult != 0 && leftElbowResult != 1)
|
||||||
{
|
{
|
||||||
try
|
SlideCoverFlow(coverFlow.SlideRight);
|
||||||
{
|
|
||||||
if (tr == 0)
|
|
||||||
{
|
|
||||||
//coverFlow.SlideLeft();
|
|
||||||
}
|
}
|
||||||
else if (tr == 1)
|
if (rightResult != 0 & rightElbowResult != 1)
|
||||||
coverFlow.SlideRight();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
{
|
||||||
Console.WriteLine("UI update error: " + ex.Message);
|
SlideCoverFlow(coverFlow.SlideLeft);
|
||||||
}
|
}
|
||||||
}), System.Windows.Threading.DispatcherPriority.Background);
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -128,5 +150,21 @@ namespace Wpf_AiSportsMicrospace
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 抽象 UI 更新到方法中
|
||||||
|
private void SlideCoverFlow(Action slideAction)
|
||||||
|
{
|
||||||
|
Application.Current?.Dispatcher?.BeginInvoke(new Action(() =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
slideAction?.Invoke();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine("UI update error: " + ex.Message);
|
||||||
|
}
|
||||||
|
}), System.Windows.Threading.DispatcherPriority.Background);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user