首次提交
This commit is contained in:
commit
127052091e
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
.vs
|
||||
.vscode
|
||||
bin
|
||||
obj
|
||||
*.jfm
|
||||
*.dbmdl
|
||||
*.user
|
||||
node_modules
|
||||
.dll
|
||||
9
Wpf_AiSportsMicrospace/App.xaml
Normal file
9
Wpf_AiSportsMicrospace/App.xaml
Normal file
@ -0,0 +1,9 @@
|
||||
<Application x:Class="Wpf_AiSportsMicrospace.App"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="clr-namespace:Wpf_AiSportsMicrospace"
|
||||
StartupUri="MainWindow.xaml">
|
||||
<Application.Resources>
|
||||
|
||||
</Application.Resources>
|
||||
</Application>
|
||||
13
Wpf_AiSportsMicrospace/App.xaml.cs
Normal file
13
Wpf_AiSportsMicrospace/App.xaml.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Windows;
|
||||
|
||||
namespace Wpf_AiSportsMicrospace;
|
||||
|
||||
/// <summary>
|
||||
/// Interaction logic for App.xaml
|
||||
/// </summary>
|
||||
public partial class App : Application
|
||||
{
|
||||
}
|
||||
|
||||
10
Wpf_AiSportsMicrospace/AssemblyInfo.cs
Normal file
10
Wpf_AiSportsMicrospace/AssemblyInfo.cs
Normal file
@ -0,0 +1,10 @@
|
||||
using System.Windows;
|
||||
|
||||
[assembly:ThemeInfo(
|
||||
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
|
||||
//(used if a resource is not found in the page,
|
||||
// or application resource dictionaries)
|
||||
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
|
||||
//(used if a resource is not found in the page,
|
||||
// app, or any theme specific resource dictionaries)
|
||||
)]
|
||||
146
Wpf_AiSportsMicrospace/Common/HumanGraphicsRenderer.cs
Normal file
146
Wpf_AiSportsMicrospace/Common/HumanGraphicsRenderer.cs
Normal file
@ -0,0 +1,146 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Media;
|
||||
using Yztob.AiSports.Inferences.Things;
|
||||
|
||||
namespace Wpf_AiSportsMicrospace.Common
|
||||
{
|
||||
/// <summary>
|
||||
/// 基于WPF的人体骨骼绘制器
|
||||
/// </summary>
|
||||
internal class HumanGraphicsRenderer
|
||||
{
|
||||
private readonly Typeface _typeface;
|
||||
private IList<Human> _humans;
|
||||
private IList<BoundingBox> _objects;
|
||||
private readonly object _mutex = new object();
|
||||
|
||||
public HumanGraphicsRenderer()
|
||||
{
|
||||
_typeface = new Typeface(new FontFamily("Microsoft YaHei UI"), FontStyles.Normal, FontWeights.Normal, FontStretches.Normal);
|
||||
}
|
||||
|
||||
#region 公共属性
|
||||
public float ScaleRatio { get; set; } = 1f;
|
||||
public float OffsetX { get; set; }
|
||||
public float OffsetY { get; set; }
|
||||
|
||||
public System.Windows.Media.Color NoseColor { get; set; } = (System.Windows.Media.Color)ColorConverter.ConvertFromString("#FF8000");
|
||||
public System.Windows.Media.Color LeftColor { get; set; } = (System.Windows.Media.Color)ColorConverter.ConvertFromString("#0075f2");
|
||||
public System.Windows.Media.Color RightColor { get; set; } = (System.Windows.Media.Color)ColorConverter.ConvertFromString("#00AA00");
|
||||
public float BonedWidth { get; set; } = 4;
|
||||
public bool DrawLabel { get; set; } = true;
|
||||
|
||||
public IList<Human> Humans
|
||||
{
|
||||
get => _humans;
|
||||
set { lock (_mutex) { _humans = value; } }
|
||||
}
|
||||
public IList<BoundingBox> Objects
|
||||
{
|
||||
get => _objects;
|
||||
set { lock (_mutex) { _objects = value; } }
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 私有方法
|
||||
private void DrawLine(DrawingContext dc, Keypoint begin, Keypoint end, System.Windows.Media.Color color)
|
||||
{
|
||||
var pen = new Pen(new SolidColorBrush(color), BonedWidth);
|
||||
dc.DrawLine(pen,
|
||||
new Point(begin.X * ScaleRatio + OffsetX, begin.Y * ScaleRatio + OffsetY),
|
||||
new Point(end.X * ScaleRatio + OffsetX, end.Y * ScaleRatio + OffsetY));
|
||||
}
|
||||
|
||||
private void DrawPoints(DrawingContext dc, IList<Keypoint> points)
|
||||
{
|
||||
foreach (var kp in points)
|
||||
{
|
||||
var x = kp.X * ScaleRatio + OffsetX;
|
||||
var y = kp.Y * ScaleRatio + OffsetY;
|
||||
|
||||
// 绘制阴影点
|
||||
dc.DrawEllipse(new SolidColorBrush(System.Windows.Media.Color.FromRgb(255, 255, 238)), null, new Point(x, y), 5, 5);
|
||||
|
||||
// 左右和鼻子颜色
|
||||
var brush = new SolidColorBrush(LeftColor);
|
||||
if (kp.Name == "nose")
|
||||
brush = new SolidColorBrush(NoseColor);
|
||||
else if (kp.Name.StartsWith("right_"))
|
||||
brush = new SolidColorBrush(RightColor);
|
||||
|
||||
dc.DrawEllipse(brush, null, new Point(x, y), 4, 4);
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawSkeleton(DrawingContext dc, IList<Keypoint> points)
|
||||
{
|
||||
var pointDict = points.ToDictionary(p => p.Name, p => p);
|
||||
|
||||
// 简单骨架连线示例
|
||||
DrawLine(dc, pointDict["right_wrist"], pointDict["right_elbow"], System.Windows.Media.Colors.White);
|
||||
DrawLine(dc, pointDict["right_elbow"], pointDict["right_shoulder"], System.Windows.Media.Colors.White);
|
||||
DrawLine(dc, pointDict["right_shoulder"], pointDict["left_shoulder"], System.Windows.Media.Colors.White);
|
||||
DrawLine(dc, pointDict["left_shoulder"], pointDict["left_elbow"], System.Windows.Media.Colors.White);
|
||||
DrawLine(dc, pointDict["left_elbow"], pointDict["left_wrist"], System.Windows.Media.Colors.White);
|
||||
|
||||
// 头部
|
||||
DrawLine(dc, pointDict["nose"], pointDict["left_eye"], System.Windows.Media.Colors.White);
|
||||
DrawLine(dc, pointDict["nose"], pointDict["right_eye"], System.Windows.Media.Colors.White);
|
||||
}
|
||||
|
||||
private void DrawBoxes(DrawingContext dc, IList<BoundingBox> boxes)
|
||||
{
|
||||
foreach (var box in boxes)
|
||||
{
|
||||
var color = System.Windows.Media.Colors.Red; // 这里可根据box.Label.Color转换
|
||||
var pen = new Pen(new SolidColorBrush(color), 2);
|
||||
|
||||
var rect = new Rect(
|
||||
box.X * ScaleRatio + OffsetX,
|
||||
box.Y * ScaleRatio + OffsetY,
|
||||
(box.RightX - box.X) * ScaleRatio,
|
||||
(box.BottomY - box.Y) * ScaleRatio);
|
||||
|
||||
dc.DrawRectangle(null, pen, rect);
|
||||
|
||||
if (DrawLabel)
|
||||
{
|
||||
var formattedText = new FormattedText(
|
||||
box.Label.Name + $" {box.Confidence:N6}",
|
||||
System.Globalization.CultureInfo.CurrentCulture,
|
||||
FlowDirection.LeftToRight,
|
||||
_typeface,
|
||||
12,
|
||||
new SolidColorBrush(color),
|
||||
1.0);
|
||||
|
||||
dc.DrawText(formattedText, new Point(rect.Left + 5, rect.Top + 5));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 公共方法
|
||||
public void Drawing(DrawingContext dc)
|
||||
{
|
||||
lock (_mutex)
|
||||
{
|
||||
if (Humans?.Any() == true)
|
||||
{
|
||||
foreach (var human in Humans)
|
||||
{
|
||||
DrawSkeleton(dc, human.Keypoints);
|
||||
DrawPoints(dc, human.Keypoints);
|
||||
}
|
||||
}
|
||||
|
||||
if (Objects?.Any() == true)
|
||||
DrawBoxes(dc, Objects);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
160
Wpf_AiSportsMicrospace/Common/SportDetectionQueue.cs
Normal file
160
Wpf_AiSportsMicrospace/Common/SportDetectionQueue.cs
Normal file
@ -0,0 +1,160 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Yztob.AiSports.Inferences.Things;
|
||||
using Yztob.AiSports.Postures.Sports;
|
||||
|
||||
namespace Wpf_AiSportsMicrospace.Common
|
||||
{
|
||||
/// <summary>
|
||||
/// 运动检后台线程顺序检测队列
|
||||
/// </summary>
|
||||
internal class SportDetectionQueue
|
||||
{
|
||||
#region 私有类
|
||||
/// <summary>
|
||||
/// 队列条目
|
||||
/// </summary>
|
||||
private class QueueItem
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置帧序号
|
||||
/// </summary>
|
||||
public long Number { get; set; }
|
||||
/// <summary>
|
||||
/// 获取或设置人体结果
|
||||
/// </summary>
|
||||
public Human Human { get; set; }
|
||||
/// <summary>
|
||||
/// 获取或设置器材物品
|
||||
/// </summary>
|
||||
public IList<BoundingBox> Objects { get; set; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 私有成员
|
||||
private readonly Queue<QueueItem> _queues;
|
||||
private int _signral = 0; //0-停止 1-执行中 2-停止信号
|
||||
#endregion
|
||||
|
||||
#region 构造方法
|
||||
/// <summary>
|
||||
/// 初始化队列
|
||||
/// </summary>
|
||||
public SportDetectionQueue()
|
||||
{
|
||||
_queues = new Queue<QueueItem>();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 公共属性
|
||||
/// <summary>
|
||||
/// 获取或设置要执行的运动分析器
|
||||
/// </summary>
|
||||
public SportBase Sport { get; set; }
|
||||
public bool IsRuning
|
||||
{
|
||||
get
|
||||
{
|
||||
return _signral != 0;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 私有方法
|
||||
/// <summary>
|
||||
/// 检测工作任务
|
||||
/// </summary>
|
||||
private void Detecting()
|
||||
{
|
||||
_signral = 1;
|
||||
while (_signral == 1)
|
||||
{
|
||||
//无队列
|
||||
if (!_queues.Any())
|
||||
{
|
||||
Thread.Sleep(5);
|
||||
continue;
|
||||
}
|
||||
|
||||
var item = _queues.Dequeue();
|
||||
if (item == null)
|
||||
continue;
|
||||
|
||||
if (!Sport.Equipment)
|
||||
Sport.Pushing(item.Human);
|
||||
else
|
||||
Sport.Pushing(item.Human, item.Objects);
|
||||
}
|
||||
|
||||
_signral = 0;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 公共方法
|
||||
/// <summary>
|
||||
/// 入队等待检测
|
||||
/// </summary>
|
||||
/// <param name="number">帧序号</param>
|
||||
/// <param name="human">人体结构</param>
|
||||
/// <param name="objects">器材列表</param>
|
||||
public void Enqueue(long number, Human human, IList<BoundingBox> objects)
|
||||
{
|
||||
if (!this.IsRuning)
|
||||
return;
|
||||
|
||||
//为空也不记录
|
||||
if (human == null && objects?.Any() != true)
|
||||
return;
|
||||
|
||||
var item = new QueueItem
|
||||
{
|
||||
Number = number,
|
||||
Human = human,
|
||||
Objects = objects,
|
||||
};
|
||||
|
||||
_queues.Enqueue(item);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 开始检测
|
||||
/// </summary>
|
||||
public void Start()
|
||||
{
|
||||
if (_signral != 0)
|
||||
return;
|
||||
|
||||
_signral = 1;
|
||||
_queues.Clear();//队列清空
|
||||
var thread = new Thread(Detecting);
|
||||
thread.IsBackground = true;
|
||||
thread.Start();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 停止检测推送
|
||||
/// </summary>
|
||||
public void Stop()
|
||||
{
|
||||
if (_signral != 1)
|
||||
return;
|
||||
|
||||
|
||||
_signral = 2;
|
||||
_queues.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清空队列
|
||||
/// </summary>
|
||||
public void Clear()
|
||||
{
|
||||
_queues.Clear();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
44
Wpf_AiSportsMicrospace/Extensions.cs
Normal file
44
Wpf_AiSportsMicrospace/Extensions.cs
Normal file
@ -0,0 +1,44 @@
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace Wpf_AiSportsMicrospace
|
||||
{
|
||||
/// <summary>
|
||||
/// 一些扩展方法
|
||||
/// </summary>
|
||||
internal static class Extensions
|
||||
{
|
||||
public const string TITLE = "AI运动微空间";
|
||||
|
||||
/// <summary>
|
||||
/// 弹出信息提示框
|
||||
/// </summary>
|
||||
/// <param name="control">当前控件或窗体实例</param>
|
||||
/// <param name="message">信息消息</param>
|
||||
internal static MessageBoxResult ShowInformation(this Control control, string message)
|
||||
{
|
||||
return MessageBox.Show(message, TITLE, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 弹出错误提示框
|
||||
/// </summary>
|
||||
/// <param name="control">当前控件或窗体实例</param>
|
||||
/// <param name="message">错误消息</param>
|
||||
internal static MessageBoxResult ShowError(this Control control, string message = "发生一个未知错误,详情请查看日志。")
|
||||
{
|
||||
return MessageBox.Show(message, TITLE, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 弹出警告对话框
|
||||
/// </summary>
|
||||
/// <param name="control">当前控件或窗体实例</param>
|
||||
/// <param name="message">警告消息</param>
|
||||
internal static MessageBoxResult ShowWarning(this Control control, string message)
|
||||
{
|
||||
return MessageBox.Show(message, TITLE, MessageBoxButton.OKCancel, MessageBoxImage.Warning);
|
||||
}
|
||||
}
|
||||
}
|
||||
37
Wpf_AiSportsMicrospace/MainWindow.xaml
Normal file
37
Wpf_AiSportsMicrospace/MainWindow.xaml
Normal file
@ -0,0 +1,37 @@
|
||||
<Window x:Class="Wpf_AiSportsMicrospace.MainWindow"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:local="clr-namespace:Wpf_AiSportsMicrospace"
|
||||
mc:Ignorable="d" Title="AI运动微空间" Height="700" Width="1200">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="250"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- 左侧控制面板 -->
|
||||
<StackPanel Grid.Column="0" Margin="10">
|
||||
<ComboBox x:Name="sportList"
|
||||
Height="25"
|
||||
DisplayMemberPath="Name"
|
||||
SelectedValuePath="Key"
|
||||
SelectionChanged="sportList_SelectionChanged" d:IsHidden="True"/>
|
||||
|
||||
<TextBox x:Name="host" Margin="0,10,0,0" Text="192.168.3.64"/>
|
||||
<TextBox x:Name="userName" Margin="0,10,0,0" Text="admin"/>
|
||||
<TextBox x:Name="password" Margin="0,10,0,0" Text="yd708090"/>
|
||||
<TextBox x:Name="port" Margin="0,10,0,0" Text="554"/>
|
||||
|
||||
<Button Content="Ping" Margin="0,10,0,0" Click="ping_Click"/>
|
||||
<Button x:Name="startOrStop" Content="开始" Margin="0,10,0,0" Click="startOrStop_Click"/>
|
||||
|
||||
<TextBlock x:Name="sportCounts" Text="0" Margin="0,20,0,0"/>
|
||||
<TextBlock x:Name="sportTimes" Text="00'00''"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- 右侧视频预览 -->
|
||||
<Canvas x:Name="rtspPreviewCanvas" Grid.Column="1" Background="Black"/>
|
||||
</Grid>
|
||||
</Window>
|
||||
159
Wpf_AiSportsMicrospace/MainWindow.xaml.cs
Normal file
159
Wpf_AiSportsMicrospace/MainWindow.xaml.cs
Normal file
@ -0,0 +1,159 @@
|
||||
using Emgu.CV.Reg;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using Wpf_AiSportsMicrospace.Common;
|
||||
using Yztob.AiSports.Common;
|
||||
using Yztob.AiSports.Inferences.Abstractions;
|
||||
using Yztob.AiSports.Inferences.Things;
|
||||
using Yztob.AiSports.Postures.Sports;
|
||||
using Yztob.AiSports.Postures.Things;
|
||||
using Yztob.AiSports.Sensors.Abstractions;
|
||||
using Yztob.AiSports.Sensors.Things;
|
||||
|
||||
namespace Wpf_AiSportsMicrospace;
|
||||
|
||||
/// <summary>
|
||||
/// Interaction logic for MainWindow.xaml
|
||||
/// </summary>
|
||||
public partial class MainWindow : Window
|
||||
{
|
||||
#region 私有成员
|
||||
private IHumanPredictor _humanPredictor;
|
||||
private IObjectDetector _objectDetector;
|
||||
private HumanGraphicsRenderer _humanGraphicsRenderer;
|
||||
private readonly List<SportDescriptor> _sports;
|
||||
private SportBase _sport;
|
||||
private readonly SportDetectionQueue _detectQueue;
|
||||
#endregion
|
||||
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
// 输出到控制台
|
||||
_humanPredictor = HumanPredictorFactory.Create(HumanPredictorType.SingleHigh);
|
||||
_objectDetector = ObjectDetectorFactory.CreateSportGoodsDetector();
|
||||
_humanGraphicsRenderer = new HumanGraphicsRenderer();
|
||||
_humanGraphicsRenderer.DrawLabel = false;
|
||||
|
||||
_sports = SportBase.GetSports();
|
||||
|
||||
|
||||
_detectQueue = new SportDetectionQueue();
|
||||
this.sportList.ItemsSource = _sports;
|
||||
this.sportList.SelectedIndex = 0;
|
||||
this.OnSelectedSport();
|
||||
}
|
||||
|
||||
private void sportList_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
this.OnSelectedSport();
|
||||
}
|
||||
private void OnSelectedSport()
|
||||
{
|
||||
var sport = SportBase.Create(_sports[this.sportList.SelectedIndex].Key);
|
||||
sport.OnTicked += this.OnSportTick;
|
||||
if (_sport?.IsCounting == true)
|
||||
sport.Start();
|
||||
|
||||
_sport?.Stop();
|
||||
_detectQueue.Stop();
|
||||
_sport = sport;
|
||||
_detectQueue.Sport = _sport;
|
||||
}
|
||||
|
||||
private void ping_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var host = this.host.Text.Trim();
|
||||
if (string.IsNullOrWhiteSpace(host))
|
||||
{
|
||||
this.ShowError("相机主机地址/IP不能为空。");
|
||||
return;
|
||||
}
|
||||
|
||||
var pinger = new Ping();
|
||||
var reply = pinger.Send(host, 10);
|
||||
if (reply.Status == IPStatus.Success)
|
||||
this.ShowInformation("与相机通信正常。");
|
||||
else
|
||||
this.ShowError($"与相机通信失败,错误:{reply.Status}。");
|
||||
}
|
||||
|
||||
private void startOrStop_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var host = this.host.Text.Trim();
|
||||
if (string.IsNullOrWhiteSpace(host))
|
||||
{
|
||||
this.ShowError("相机主机地址/IP不能为空。");
|
||||
return;
|
||||
}
|
||||
|
||||
var userName = this.userName.Text.Trim();
|
||||
if (string.IsNullOrWhiteSpace(userName))
|
||||
{
|
||||
this.ShowError("用户名不能为空。");
|
||||
return;
|
||||
}
|
||||
|
||||
var password = this.password.Text.Trim();
|
||||
if (string.IsNullOrWhiteSpace(password))
|
||||
{
|
||||
this.ShowError("密码不能为空。");
|
||||
return;
|
||||
}
|
||||
var port = 554u;//RTSP协议默认端口是554
|
||||
|
||||
var tempPath = "./temps";
|
||||
if (!Directory.Exists(tempPath))
|
||||
Directory.CreateDirectory(tempPath);
|
||||
|
||||
var _webcamClient = WebcamClient.CreateRTSP(host, userName, password, port);
|
||||
|
||||
//处理抽帧回调
|
||||
_webcamClient.OnExtractFrame += this.OnFrameExtracted;
|
||||
_webcamClient.StartExtract();//开始抽帧
|
||||
}
|
||||
private async void OnFrameExtracted(VideoFrame frame)
|
||||
{
|
||||
//获得帧二进制流,保存图像、人体识别竺
|
||||
var buffer = frame.GetImageBuffer(ImageFormat.Jpeg).ToArray();
|
||||
await File.WriteAllBytesAsync($"./temps/{frame.Number}.jpg", buffer);
|
||||
|
||||
//可以进一步进行人体识别等
|
||||
var humanResult = await Task.Run<HumanInferenceResult>(() => _humanPredictor.Predicting(buffer, frame.Number));
|
||||
|
||||
var human = humanResult?.Humans?.FirstOrDefault();
|
||||
_detectQueue.Enqueue(frame.Number, human, null);
|
||||
|
||||
//var count = _sport.GetFormatCounts();
|
||||
}
|
||||
private void OnSportTick(int counts, int times)
|
||||
{
|
||||
var ts = TimeSpan.FromSeconds(times);
|
||||
|
||||
// 使用 Dispatcher 调用 UI 更新
|
||||
this.Dispatcher.BeginInvoke(new Action(() =>
|
||||
{
|
||||
this.sportCounts.Text = _sport.GetFormatCounts(); // counts.ToString();
|
||||
this.sportTimes.Text = _sport.GetFormatTimes(); // ts.ToString(@"mm\'ss\"");
|
||||
|
||||
// 如果需要触发停止逻辑
|
||||
//if (!_sport.IsCounting)
|
||||
// this.startOrStop_Click(null, null);
|
||||
}));
|
||||
|
||||
//VoiceBroadcast.PlayTick();
|
||||
}
|
||||
}
|
||||
54
Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.csproj
Normal file
54
Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.csproj
Normal file
@ -0,0 +1,54 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net8.0-windows</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<UseWPF>true</UseWPF>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AutoMapper" Version="15.0.1" />
|
||||
<PackageReference Include="Emgu.CV" Version="4.12.0.5764" />
|
||||
<PackageReference Include="Emgu.CV.runtime.windows" Version="4.12.0.5764" />
|
||||
<PackageReference Include="FFmpeg.AutoGen" Version="7.1.1" />
|
||||
<PackageReference Include="FFmpeg.AutoGen.Abstractions" Version="7.1.1" />
|
||||
<PackageReference Include="FFmpeg.AutoGen.Bindings.DynamicallyLoaded" Version="7.1.1" />
|
||||
<PackageReference Include="Microsoft.Management.Infrastructure" Version="3.0.0" />
|
||||
<PackageReference Include="Microsoft.ML" Version="4.0.2" />
|
||||
<PackageReference Include="Microsoft.ML.OnnxRuntime" Version="1.22.1" />
|
||||
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.11" />
|
||||
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.7" />
|
||||
<PackageReference Include="SkiaSharp" Version="3.119.0" />
|
||||
<PackageReference Include="System.Speech" Version="9.0.9" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Yunzhi.Library">
|
||||
<HintPath>..\sdks\Yunzhi.Library.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Yztob.AiSports.Common">
|
||||
<HintPath>..\sdks\Yztob.AiSports.Common.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Yztob.AiSports.Inferences">
|
||||
<HintPath>..\sdks\Yztob.AiSports.Inferences.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Yztob.AiSports.Postures">
|
||||
<HintPath>..\sdks\Yztob.AiSports.Postures.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Yztob.AiSports.Sensors">
|
||||
<HintPath>..\sdks\Yztob.AiSports.Sensors.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Yztob.AiSports.Sensors.WinForm">
|
||||
<HintPath>..\sdks\Yztob.AiSports.Sensors.WinForm.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
25
Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.sln
Normal file
25
Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.sln
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.13.35828.75 d17.13
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf_AiSportsMicrospace", "Wpf_AiSportsMicrospace.csproj", "{345052A8-36AD-4739-80F6-991A4DD84ADC}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{345052A8-36AD-4739-80F6-991A4DD84ADC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{345052A8-36AD-4739-80F6-991A4DD84ADC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{345052A8-36AD-4739-80F6-991A4DD84ADC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{345052A8-36AD-4739-80F6-991A4DD84ADC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {86C400B0-7773-468C-B42F-0FDDD4087BDF}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
12
readme.txt
Normal file
12
readme.txt
Normal file
@ -0,0 +1,12 @@
|
||||
一、文件结构
|
||||
|
||||
├── FFmpeg 媒体处理库ffmpeg预编译库,调试和发布时需拷至主目录
|
||||
├── models 开发包所需的模型文件,调试和发布时需拷至主目录
|
||||
├── src demo项目源码文件夹
|
||||
├── sdks SDK的.net程序集文件夹
|
||||
│ └── Yunzhi.Library.dll 基础工具类库
|
||||
│ └── Yztob.AiSports.Common.dll AI运动开发套件的公共库
|
||||
│ └── Yztob.AiSports.Inferences.dll 人体、体育器材检测推理库
|
||||
│ └── Yztob.AiSports.Postures.dll 姿态、运动分析库
|
||||
│ └── Yztob.AiSports.Sensors.dll 设备、传感器操作库
|
||||
│ └── Yztob.AiSports.Sensors.WinForm.dll 设备、传感器WinForm组件库
|
||||
BIN
sdks/Yunzhi.Library.dll
Normal file
BIN
sdks/Yunzhi.Library.dll
Normal file
Binary file not shown.
5097
sdks/Yunzhi.Library.xml
Normal file
5097
sdks/Yunzhi.Library.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
sdks/Yztob.AiSports.Common.dll
Normal file
BIN
sdks/Yztob.AiSports.Common.dll
Normal file
Binary file not shown.
502
sdks/Yztob.AiSports.Common.xml
Normal file
502
sdks/Yztob.AiSports.Common.xml
Normal file
@ -0,0 +1,502 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Yztob.AiSports.Common</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Yztob.AiSports.Common.Abstractions.IDebugTrackChannel">
|
||||
<summary>
|
||||
<seealso cref="T:Yztob.AiSports.Common.DebugTracker"/>跟踪追踪抽象接口
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Abstractions.IDebugTrackChannel.Output(System.String,System.String)">
|
||||
<summary>
|
||||
输出一条不带格式化的消息
|
||||
</summary>
|
||||
<param name="source">消息来源</param>
|
||||
<param name="message">消息文本</param>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Abstractions.IDebugTrackChannel.Output(System.String,System.String,System.Object[])">
|
||||
<summary>
|
||||
输出一条带格式化的消息
|
||||
</summary>
|
||||
<param name="source">消息来源</param>
|
||||
<param name="format">消息格式文本</param>
|
||||
<param name="args">输出参数</param>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.AiSportLicense">
|
||||
<summary>
|
||||
授权相关操作入口
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.AiSportLicense.GetMachineId">
|
||||
<summary>
|
||||
获取机器识别信息
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.AiSportLicense.Activate(System.String)">
|
||||
<summary>
|
||||
激活SDK
|
||||
</summary>
|
||||
<param name="licenseText">授权码</param>
|
||||
<returns>
|
||||
0: 注册成功
|
||||
10:参数不正确
|
||||
11:机器码不符
|
||||
100:试用授权到期
|
||||
-1000:发生未知异常,抛<seealso cref="T:System.Exception"/>异常
|
||||
</returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.AiSportLicense.Checking">
|
||||
<summary>
|
||||
检查当前SDK激活状态
|
||||
</summary>
|
||||
<returns>
|
||||
0: 激活状态正常
|
||||
10:未激活/无授权文件
|
||||
11:机器码不符
|
||||
100:试用授权到期
|
||||
-1000:发生未知异常,抛<seealso cref="T:System.Exception"/>异常
|
||||
</returns>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.DebugTracker">
|
||||
<summary>
|
||||
AI运动相关调试信息追踪器
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.DebugTracker.#cctor">
|
||||
<summary>
|
||||
全局初始化
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.DebugTracker.Enabled">
|
||||
<summary>
|
||||
获取或设置是否启用消息输出
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.DebugTracker.Channels">
|
||||
<summary>
|
||||
获取消息输出通道
|
||||
</summary>
|
||||
<remarks>
|
||||
默认会有<seealso cref="T:Yztob.AiSports.Common.Implement.ConsoleDebugTrackChannel"/>通道
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.DebugTracker.Output(System.String,System.String)">
|
||||
<summary>
|
||||
向追踪通道输出一条不带格式化追踪消息
|
||||
</summary>
|
||||
<param name="source">消息来源</param>
|
||||
<param name="message">要输入的消息</param>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.DebugTracker.Output(System.String,System.String,System.Object[])">
|
||||
<summary>
|
||||
向追踪通道输出一条带格式化的消息
|
||||
</summary>
|
||||
<param name="source">消息来源</param>
|
||||
<param name="format">消息格式文本</param>
|
||||
<param name="args">输出参数</param>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Fonts">
|
||||
<summary>
|
||||
AI运动需要用到的渲染字体相关
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Fonts.GetFontBuffer">
|
||||
<summary>
|
||||
获取默认渲染字体字节流
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Implement.ConsoleDebugTrackChannel">
|
||||
<summary>
|
||||
控制台调试追踪通道
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Implement.ConsoleDebugTrackChannel.Output(System.String,System.String)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Implement.ConsoleDebugTrackChannel.Output(System.String,System.String,System.Object[])">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Implement.DiagnosisDebugTrackChannel">
|
||||
<summary>
|
||||
诊断Debugger调试追踪通道
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Implement.DiagnosisDebugTrackChannel.Output(System.String,System.String)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Implement.DiagnosisDebugTrackChannel.Output(System.String,System.String,System.Object[])">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Implement.LogDebugTrackChannel">
|
||||
<summary>
|
||||
日志形式调试追踪通道
|
||||
</summary>
|
||||
<remarks>注意,要配置名为ai-debugger的日志输出器</remarks>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Implement.LogDebugTrackChannel.Output(System.String,System.String)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Implement.LogDebugTrackChannel.Output(System.String,System.String,System.Object[])">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Licenses.FeatureCpuPartMap">
|
||||
<summary>
|
||||
表示受权机器CPU部件特性图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureCpuPartMap.#ctor">
|
||||
<summary>
|
||||
初始化CPU部件特征图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureCpuPartMap.Extracting">
|
||||
<summary>
|
||||
提取CPU特征
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureCpuPartMap.Print">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Licenses.FeatureDiskPartMap">
|
||||
<summary>
|
||||
表示受权机器硬盘部件特性图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureDiskPartMap.#ctor">
|
||||
<summary>
|
||||
初始化网卡部件特征图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureDiskPartMap.Extracting">
|
||||
<summary>
|
||||
提取CPU特征
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureDiskPartMap.Print">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Licenses.FeatureItem">
|
||||
<summary>
|
||||
表示一条受权机器特征条目
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Licenses.FeatureItem.Key">
|
||||
<summary>
|
||||
获取或设置特征唯一键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Licenses.FeatureItem.Value">
|
||||
<summary>
|
||||
获取或设置特征值
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Licenses.FeatureMap">
|
||||
<summary>
|
||||
表示受权机器特征图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureMap.#ctor">
|
||||
<summary>
|
||||
初始化特征图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Licenses.FeatureMap.CPU">
|
||||
<summary>
|
||||
获取或设置CPU特征值
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Licenses.FeatureMap.Networks">
|
||||
<summary>
|
||||
获取或设置网卡特征集
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Licenses.FeatureMap.Disks">
|
||||
<summary>
|
||||
获取或设置硬盘特征集
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Licenses.FeatureMap.Digests">
|
||||
<summary>
|
||||
获取或设置特征图哈希摘要
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureMap.CalculateDigests">
|
||||
<summary>
|
||||
生成特征指纹
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureMap.Print">
|
||||
<summary>
|
||||
打包受权机器整体特征图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureMap.ToJson">
|
||||
<summary>
|
||||
将当前对象转换成JSON对象
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureMap.Extracting">
|
||||
<summary>
|
||||
提取当前特征图,加密输出
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Licenses.FeatureNetworkAdapterPartMap">
|
||||
<summary>
|
||||
表示受权机器网卡部件特性图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureNetworkAdapterPartMap.#ctor">
|
||||
<summary>
|
||||
初始化网卡部件特征图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureNetworkAdapterPartMap.Extracting">
|
||||
<summary>
|
||||
提取CPU特征
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeatureNetworkAdapterPartMap.Print">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Licenses.FeaturePartMap">
|
||||
<summary>
|
||||
表示某一类部件的特征图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeaturePartMap.#ctor(System.String[])">
|
||||
<summary>
|
||||
初始化部件特征图
|
||||
</summary>
|
||||
<param name="digestKeys">生成特征摘要KEY</param>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Licenses.FeaturePartMap.FeatureKeys">
|
||||
<summary>
|
||||
获取或设置用于生成特征摘要KEY
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Licenses.FeaturePartMap.Features">
|
||||
<summary>
|
||||
获取或设置特征集列表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Licenses.FeaturePartMap.Digests">
|
||||
<summary>
|
||||
获取或设置部件特征图哈希摘要
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeaturePartMap.CalculateDigests">
|
||||
<summary>
|
||||
生成特征指纹
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeaturePartMap.Print">
|
||||
<summary>
|
||||
打印特征信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.FeaturePartMap.ToJson">
|
||||
<summary>
|
||||
将当前对象转换成JSON对象
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Licenses.LicenseException">
|
||||
<summary>
|
||||
授权相关错误异常
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.LicenseException.#ctor(System.String,System.Int32,System.Exception)">
|
||||
<summary>
|
||||
初始化异常
|
||||
</summary>
|
||||
<param name="message">错误信息</param>
|
||||
<param name="code">错误代码</param>
|
||||
<param name="innterException">内部异常</param>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Licenses.LicenseImplant">
|
||||
<summary>
|
||||
链接嵌入式授权相关服务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.LicenseImplant.Checking">
|
||||
<summary>
|
||||
检查当前SDK激活状态
|
||||
</summary>
|
||||
<returns>
|
||||
0: 激活状态正常
|
||||
10:未激活/无授权文件
|
||||
11:机器码不符
|
||||
100:试用授权到期
|
||||
-1000:发生未知异常,抛<seealso cref="T:System.Exception"/>异常
|
||||
</returns>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Licenses.Protection">
|
||||
<summary>
|
||||
RSA非对称加/解
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.Protection.GetMaxEncryptSize(System.Security.Cryptography.RSA,System.Security.Cryptography.RSAEncryptionPadding)">
|
||||
<summary>
|
||||
获取RSA每次最多参加密多少数据
|
||||
</summary>
|
||||
<param name="rsa"></param>
|
||||
<param name="padding">填充模式</param>
|
||||
<returns></returns>
|
||||
<exception cref="T:System.NotSupportedException"></exception>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.Protection.Encrypting(System.Byte[])">
|
||||
<summary>
|
||||
加密二进制流数据
|
||||
</summary>
|
||||
<param name="buffer">要加密的数据缓冲区</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.Protection.Encrypting(System.String)">
|
||||
<summary>
|
||||
加密文本数据
|
||||
</summary>
|
||||
<param name="plain">明文文本</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.Protection.Decrypting(System.String)">
|
||||
<summary>
|
||||
解密指定的文本
|
||||
</summary>
|
||||
<param name="ciphertext">私钥加密的文本,Base64字符串</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Licenses.RelaxRsaEncipher">
|
||||
<summary>
|
||||
宽松版RSA加密算法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.RelaxRsaEncipher.#ctor(System.Security.Cryptography.RSAParameters)">
|
||||
<summary>
|
||||
初始化加密器
|
||||
</summary>
|
||||
<param name="parameters">RSA加密参数</param>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.RelaxRsaEncipher.RemovePkcs1Padding(System.Byte[])">
|
||||
<summary>
|
||||
移除数据中的PKcs#1.5填充
|
||||
</summary>
|
||||
<param name="paddedData">已填充的数据</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.RelaxRsaEncipher.FromByteArray(System.Byte[])">
|
||||
<summary>
|
||||
从字节流(加密流)中创建大整数,如果有前导0则先删除
|
||||
</summary>
|
||||
<param name="buffer"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.Licenses.RelaxRsaEncipher.PublicDecrypt(System.Byte[])">
|
||||
<summary>
|
||||
使用公钥解密
|
||||
</summary>
|
||||
<param name="encryptedData">加密数据</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Properties.Resources">
|
||||
<summary>
|
||||
一个强类型的资源类,用于查找本地化的字符串等。
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Properties.Resources.ResourceManager">
|
||||
<summary>
|
||||
返回此类使用的缓存的 ResourceManager 实例。
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Properties.Resources.Culture">
|
||||
<summary>
|
||||
重写当前线程的 CurrentUICulture 属性,对
|
||||
使用此强类型资源类的所有资源查找执行重写。
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Properties.Resources.AlibabaPuHuiTi_3_Light">
|
||||
<summary>
|
||||
查找 System.Byte[] 类型的本地化资源。
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.SportAppSettingService">
|
||||
<summary>
|
||||
AI运动应用公共设定服务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.SportAppSettingService.#cctor">
|
||||
<summary>
|
||||
全局初始化
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.SportAppSettingService.Get``1(System.String,System.Func{``0})">
|
||||
<summary>
|
||||
获取配置
|
||||
</summary>
|
||||
<typeparam name="T">配置类型</typeparam>
|
||||
<param name="key">配置节唯一键</param>
|
||||
<param name="defaultGetter">若值不存在取默认取器</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.SportAppSettingService.Set``1(System.String,``0)">
|
||||
<summary>
|
||||
设定配置
|
||||
</summary>
|
||||
<typeparam name="T">配置类型</typeparam>
|
||||
<param name="key">配置节唯一键</param>
|
||||
<param name="value">配置参数</param>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Common.SportAppSettingService.Save">
|
||||
<summary>
|
||||
持久化保存当前配置致文件中
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Things.LicenseInfo">
|
||||
<summary>
|
||||
授权许可信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Things.LicenseInfo.Type">
|
||||
<summary>
|
||||
获取或设置授权类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Things.LicenseInfo.MachineId">
|
||||
<summary>
|
||||
获取或设置受权机器唯一识别码
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Things.LicenseInfo.Owner">
|
||||
<summary>
|
||||
获取或设置,受权主体(公司、个人)名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Common.Things.LicenseInfo.GrantTimestamp">
|
||||
<summary>
|
||||
获取或设置,授予许可的时间戳,单位:秒,UTC时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Common.Things.LicenseType">
|
||||
<summary>
|
||||
授权类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Yztob.AiSports.Common.Things.LicenseType.Trial">
|
||||
<summary>
|
||||
试用评估授权
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Yztob.AiSports.Common.Things.LicenseType.Permanent">
|
||||
<summary>
|
||||
永久授权
|
||||
</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
BIN
sdks/Yztob.AiSports.Inferences.dll
Normal file
BIN
sdks/Yztob.AiSports.Inferences.dll
Normal file
Binary file not shown.
3042
sdks/Yztob.AiSports.Inferences.xml
Normal file
3042
sdks/Yztob.AiSports.Inferences.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
sdks/Yztob.AiSports.Postures.dll
Normal file
BIN
sdks/Yztob.AiSports.Postures.dll
Normal file
Binary file not shown.
2658
sdks/Yztob.AiSports.Postures.xml
Normal file
2658
sdks/Yztob.AiSports.Postures.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
sdks/Yztob.AiSports.Sensors.WinForm.dll
Normal file
BIN
sdks/Yztob.AiSports.Sensors.WinForm.dll
Normal file
Binary file not shown.
153
sdks/Yztob.AiSports.Sensors.WinForm.xml
Normal file
153
sdks/Yztob.AiSports.Sensors.WinForm.xml
Normal file
@ -0,0 +1,153 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Yztob.AiSports.Sensors.WinForm</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Yztob.AiSports.Sensors.WinForm.Properties.Resources">
|
||||
<summary>
|
||||
一个强类型的资源类,用于查找本地化的字符串等。
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.Properties.Resources.ResourceManager">
|
||||
<summary>
|
||||
返回此类使用的缓存的 ResourceManager 实例。
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.Properties.Resources.Culture">
|
||||
<summary>
|
||||
重写当前线程的 CurrentUICulture 属性,对
|
||||
使用此强类型资源类的所有资源查找执行重写。
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.WinForm.RTSPPreview">
|
||||
<summary>
|
||||
RTSP网络视频预览组件
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.WinForm.RTSPPreview.#ctor">
|
||||
<summary>
|
||||
初始化RTSP播放器
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.RTSPPreview.Host">
|
||||
<summary>
|
||||
获取或设置相机主机名/IP
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.RTSPPreview.Port">
|
||||
<summary>
|
||||
获取或设置端口号
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.RTSPPreview.UserName">
|
||||
<summary>
|
||||
获取或设置用户名或密码
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.RTSPPreview.Password">
|
||||
<summary>
|
||||
获取或设置密码
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.RTSPPreview.Adaptive">
|
||||
<summary>
|
||||
获取或设置自应用大小,保持同比缩放
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.RTSPPreview.IsPlaying">
|
||||
<summary>
|
||||
获取当前是否正在播放
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.RTSPPreview.ScaleRatio">
|
||||
<summary>
|
||||
获取当前画面与原始帧图像的缩放比例
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.RTSPPreview.OffsetX">
|
||||
<summary>
|
||||
获取当画面缩放后X轴的偏移量,即黑边大小
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.RTSPPreview.OffsetY">
|
||||
<summary>
|
||||
获取当画面缩放后X轴的偏移量,即黑边大小
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.RTSPPreview.OnExtracted">
|
||||
<summary>
|
||||
获取或设置抽帧响应
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.RTSPPreview.OnFrameProcessing">
|
||||
<summary>
|
||||
获取或设置帧图像处理响应
|
||||
</summary>
|
||||
<remarks>
|
||||
如果有进一步处理图像的要求,如图像推理检测、截屏保存等需要,可以监听此响应
|
||||
响应为jpeg图像,参数分别为图像宽度、图像高度、图像二制流.
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="E:Yztob.AiSports.Sensors.WinForm.RTSPPreview.FrameViewPaint">
|
||||
<summary>
|
||||
帧展示视图绘制事件
|
||||
</summary>
|
||||
<remarks>可以利用此事件在窗口绘制日期,提示语等</remarks>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.WinForm.RTSPPreview.OnPaint(System.Windows.Forms.PaintEventArgs)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.WinForm.RTSPPreview.Dispose">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.WinForm.RTSPPreview.Play">
|
||||
<summary>
|
||||
启动抽帧/预览
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.WinForm.RTSPPreview.Stop">
|
||||
<summary>
|
||||
停止预览
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.WinForm.RTSPPreview.SaveFrameToJpeg(System.String)">
|
||||
<summary>
|
||||
对当前播放的帧进行保存
|
||||
</summary>
|
||||
<param name="path">图片保存路径</param>
|
||||
</member>
|
||||
<member name="F:Yztob.AiSports.Sensors.WinForm.RTSPPreview.components">
|
||||
<summary>
|
||||
必需的设计器变量。
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.WinForm.RTSPPreview.Dispose(System.Boolean)">
|
||||
<summary>
|
||||
清理所有正在使用的资源。
|
||||
</summary>
|
||||
<param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.WinForm.RTSPPreview.InitializeComponent">
|
||||
<summary>
|
||||
设计器支持所需的方法 - 不要修改
|
||||
使用代码编辑器修改此方法的内容。
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.WinForm.TransparentLayer">
|
||||
<summary>
|
||||
透明层背景
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.WinForm.TransparentLayer.#ctor">
|
||||
<summary>
|
||||
初始化控件
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.WinForm.TransparentLayer.CreateParams">
|
||||
<summary>
|
||||
获取创建控件句柄时所需要的创建参数
|
||||
</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
BIN
sdks/Yztob.AiSports.Sensors.dll
Normal file
BIN
sdks/Yztob.AiSports.Sensors.dll
Normal file
Binary file not shown.
380
sdks/Yztob.AiSports.Sensors.xml
Normal file
380
sdks/Yztob.AiSports.Sensors.xml
Normal file
@ -0,0 +1,380 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Yztob.AiSports.Sensors</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Yztob.AiSports.Sensors.Abstractions.CameraProtocol">
|
||||
<summary>
|
||||
相机操控协议
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Yztob.AiSports.Sensors.Abstractions.CameraProtocol.Local">
|
||||
<summary>
|
||||
本机设备(本机连接USB、自带等相机)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Yztob.AiSports.Sensors.Abstractions.CameraProtocol.RTSP">
|
||||
<summary>
|
||||
实时流传输协议(Real Time Streaming Protocol RTSP)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.Abstractions.CameraStatus">
|
||||
<summary>
|
||||
相机设备状态
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Yztob.AiSports.Sensors.Abstractions.CameraStatus.Unknown">
|
||||
<summary>
|
||||
状态未知
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Yztob.AiSports.Sensors.Abstractions.CameraStatus.Initialized">
|
||||
<summary>
|
||||
设备连接已初始化
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Yztob.AiSports.Sensors.Abstractions.CameraStatus.Connected">
|
||||
<summary>
|
||||
已连接
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Yztob.AiSports.Sensors.Abstractions.CameraStatus.Closed">
|
||||
<summary>
|
||||
已关闭/已断开
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.Abstractions.FrameExtracted">
|
||||
<summary>
|
||||
抽到帧回调到响应委托
|
||||
</summary>
|
||||
<param name="frame">提取的视频帧</param>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.Abstractions.WebcamClient">
|
||||
<summary>
|
||||
网络相机抽象客户端
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Abstractions.WebcamClient.#ctor(Yztob.AiSports.Sensors.Abstractions.CameraProtocol)">
|
||||
<summary>
|
||||
初始化相机客户端
|
||||
</summary>
|
||||
<param name="protocol">相机协议</param>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Abstractions.WebcamClient.Protocol">
|
||||
<summary>
|
||||
获取当前客户端支持的协议
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Abstractions.WebcamClient.Status">
|
||||
<summary>
|
||||
获取或设置当前设备状态
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Abstractions.WebcamClient.OnExtractFrame">
|
||||
<summary>
|
||||
获取或设置帧处理回调
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Abstractions.WebcamClient.Connect">
|
||||
<summary>
|
||||
连接当前设备
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Abstractions.WebcamClient.Disconnect">
|
||||
<summary>
|
||||
断开设备设备连接
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Abstractions.WebcamClient.StartExtract">
|
||||
<summary>
|
||||
开始抽取帧图像
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Abstractions.WebcamClient.StopExtract">
|
||||
<summary>
|
||||
停止抽取帧图像
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Abstractions.WebcamClient.Dispose">
|
||||
<summary>
|
||||
释放当前设备资源
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Abstractions.WebcamClient.CreateRTSP(System.String,System.String,System.String,System.UInt32)">
|
||||
<summary>
|
||||
创建RTSP客户端实例
|
||||
</summary>
|
||||
<param name="host">主机名/IP地址</param>
|
||||
<param name="port">端口号</param>
|
||||
<param name="userName">用户名</param>
|
||||
<param name="password">密码</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.Implement.Extensions">
|
||||
<summary>
|
||||
一些扩展方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.Extensions.ResolvingAVStringError(System.Int32)">
|
||||
<summary>
|
||||
调用av_strerror,解析错误说明
|
||||
</summary>
|
||||
<param name="error">错误代码地址</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.Extensions.ThrowExceptionIfError(System.Int32)">
|
||||
<summary>
|
||||
如果AV相关函数执行有错误,则抛异常
|
||||
</summary>
|
||||
<param name="error">错代码地址</param>
|
||||
<returns></returns>
|
||||
<exception cref="T:System.ApplicationException">抛出程序异常</exception>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.Implement.FFmpegLoader">
|
||||
<summary>
|
||||
FFmpeg框架加载器
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.FFmpegLoader.RegisterFFmpegBinaries">
|
||||
<summary>
|
||||
注册FFmpeg二进制库
|
||||
</summary>
|
||||
<exception cref="T:System.NotSupportedException">非windows平台时引发</exception>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.FFmpegLoader.Initiailze">
|
||||
<summary>
|
||||
初始化FFmpeg类库
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.Implement.RTSPWebcamClient">
|
||||
<summary>
|
||||
RTSP协议网络相机客户端
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.RTSPWebcamClient.#cctor">
|
||||
<summary>
|
||||
全局初始化
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.RTSPWebcamClient.#ctor(System.String,System.UInt32,System.String,System.String)">
|
||||
<summary>
|
||||
初始化RTSP相机客户端
|
||||
</summary>
|
||||
<param name="host">相机主机名、IP</param>
|
||||
<param name="port">端口号</param>
|
||||
<param name="userName">用户名</param>
|
||||
<param name="password">密码</param>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.RTSPWebcamClient.Extracting">
|
||||
<summary>
|
||||
执行抽帧
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.RTSPWebcamClient.Connect">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.RTSPWebcamClient.Disconnect">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.RTSPWebcamClient.StartExtract">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.RTSPWebcamClient.StopExtract">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.RTSPWebcamClient.Dispose">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.Implement.VideoFrameConverter">
|
||||
<summary>
|
||||
视频帧格式转换器
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.VideoFrameConverter.#ctor(System.Drawing.Size,FFmpeg.AutoGen.Abstractions.AVPixelFormat,System.Drawing.Size,FFmpeg.AutoGen.Abstractions.AVPixelFormat)">
|
||||
<summary>
|
||||
初始化帧转换器
|
||||
</summary>
|
||||
<param name="sourceSize">帧原始大小</param>
|
||||
<param name="sourcePixelFormat">帧图像像素格式</param>
|
||||
<param name="destinationSize">目标大小</param>
|
||||
<param name="destinationPixelFormat">目标像素格式</param>
|
||||
<exception cref="T:System.ApplicationException">ffmpeg原始异常</exception>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.VideoFrameConverter.Convert(FFmpeg.AutoGen.Abstractions.AVFrame)">
|
||||
<summary>
|
||||
执行帧转
|
||||
</summary>
|
||||
<param name="sourceFrame">原始帧</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.VideoFrameConverter.Dispose">
|
||||
<summary>
|
||||
释放当前转换器资源
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.Implement.VideoStreamDecoder">
|
||||
<summary>
|
||||
视频流解码器
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.VideoStreamDecoder.#ctor(System.String,FFmpeg.AutoGen.Abstractions.AVHWDeviceType)">
|
||||
<summary>
|
||||
初始化解码器
|
||||
</summary>
|
||||
<param name="url">设备访问url</param>
|
||||
<param name="HWDeviceType">硬件设备类型</param>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Implement.VideoStreamDecoder.CodecName">
|
||||
<summary>
|
||||
获取解码器名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Implement.VideoStreamDecoder.FrameSize">
|
||||
<summary>
|
||||
获取帧图像大小
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Implement.VideoStreamDecoder.PixelFormat">
|
||||
<summary>
|
||||
获取帧格式
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.VideoStreamDecoder.TryDecodeNextFrame(FFmpeg.AutoGen.Abstractions.AVFrame@)">
|
||||
<summary>
|
||||
偿试获取流的下一帧
|
||||
</summary>
|
||||
<param name="frame">输出的图像帧</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.VideoStreamDecoder.GetContextInfo">
|
||||
<summary>
|
||||
获取当前帧格式信息
|
||||
</summary>
|
||||
<returns>帧上下文信息字典</returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Implement.VideoStreamDecoder.Dispose">
|
||||
<summary>
|
||||
释放当前解码器资源
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.Things.ImageFormat">
|
||||
<summary>
|
||||
图像格式
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Yztob.AiSports.Sensors.Things.ImageFormat.Jpeg">
|
||||
<summary>
|
||||
jpg、jpeg格式
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Yztob.AiSports.Sensors.Things.ImageFormat.Png">
|
||||
<summary>
|
||||
png格式
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.Things.VideoFrame">
|
||||
<summary>
|
||||
表示一个视频帧
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Things.VideoFrame.#ctor(Yztob.AiSports.Sensors.Implement.VideoFrameConverter,System.Int32,System.Int32,FFmpeg.AutoGen.Abstractions.AVFrame)">
|
||||
<summary>
|
||||
初始化视频帧
|
||||
</summary>
|
||||
<param name="converter">帧格式转换器,由<seealso cref="T:Yztob.AiSports.Sensors.Implement.VideoStreamDecoder"/>提供</param>
|
||||
<param name="width">帧宽度</param>
|
||||
<param name="height">帧高度</param>
|
||||
<param name="frame">ffpmeg帧数据指针</param>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Things.VideoFrame.Number">
|
||||
<summary>
|
||||
获取或设置帧序号(每次播放从0开始)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Things.VideoFrame.Width">
|
||||
<summary>
|
||||
获取帧宽度,单位:像素
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Things.VideoFrame.Height">
|
||||
<summary>
|
||||
获取帧高度,单位:像素
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Things.VideoFrame.Frame">
|
||||
<summary>
|
||||
获取FFmpeg原始帧
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Things.VideoFrame.Timestamp">
|
||||
<summary>
|
||||
获取或设置时间戳,从UTC:2000-01-01开始的耗秒数
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Things.VideoFrame.GetImageBuffer(Yztob.AiSports.Sensors.Things.ImageFormat)">
|
||||
<summary>
|
||||
将当前帧转换成指定格式图像,并返回图像缓冲区数组
|
||||
</summary>
|
||||
<param name="format">要转换的格式</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Things.VideoFrame.GetImageStream(Yztob.AiSports.Sensors.Things.ImageFormat)">
|
||||
<summary>
|
||||
将当前帧转换成指定格式图像,并获取二进制流
|
||||
</summary>
|
||||
<param name="format">要转换的目标格式</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.Things.VideoFrameWithBuffer">
|
||||
<summary>
|
||||
表示一个携带帧缓冲区的视频信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Things.VideoFrameWithBuffer.#ctor(System.Int32,System.Int32,System.Byte[])">
|
||||
<summary>
|
||||
初始化帧缓冲区的视频信息
|
||||
</summary>
|
||||
<param name="width">帧宽度</param>
|
||||
<param name="height">帧高度</param>
|
||||
<param name="buffer">帧缓冲区</param>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Things.VideoFrameWithBuffer.Number">
|
||||
<summary>
|
||||
获取或设置帧序号(每次播放从0开始)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Things.VideoFrameWithBuffer.Width">
|
||||
<summary>
|
||||
获取帧宽度,单位:像素
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Things.VideoFrameWithBuffer.Height">
|
||||
<summary>
|
||||
获取帧高度,单位:像素
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Things.VideoFrameWithBuffer.Buffer">
|
||||
<summary>
|
||||
获取FFmpeg原始帧
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yztob.AiSports.Sensors.Things.VideoFrameWithBuffer.Timestamp">
|
||||
<summary>
|
||||
获取或设置时间戳,从UTC:2000-01-01开始的耗秒数
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yztob.AiSports.Sensors.Utility">
|
||||
<summary>
|
||||
一些相关的公共工具方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yztob.AiSports.Sensors.Utility.GetHWPixelFormat(FFmpeg.AutoGen.Abstractions.AVHWDeviceType)">
|
||||
<summary>
|
||||
根据<paramref name="hwDevice"/>返回相互格式
|
||||
</summary>
|
||||
<param name="hwDevice">解码设备类型</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Loading…
x
Reference in New Issue
Block a user