本文内容
2018 年 4 月
第 33 卷,第 4 期
此文章由机器翻译
机器学习 – 体育运动传感器:使用 AI 分析人体运动
通过Kevin 莉
将来,运动员可能将能够打开其电话,并询问简单的问题:”需要执行哪些如何改进我技能?” 我们仍要做早期步骤体育 AI 朝着回答此基本问题,但我们希望的工作效率 工具和研究使将一天简化此日常方案。与许多体育,很难人眼可以观察运动员可能会使一个活动的过程期间的所有动作数,但可以使用传感器记录甚至 数据。和通过使用机器学习 (ML) 对此数据,运动员和指导可以了解并改进根据精确度量和分析。已插入检测点的运动员变得越来越新竞争优势。
如果当前趋势仍然存在,在几年销售存储区中的大多数体育设备就能让嵌入智能传感器。电子设备变得更小、 更灵活多变,以及有可能我们将看到这些嵌入在构造、 角度上考虑问题、 滑雪板、 网球 和其他类型的智能齿轮。你将能够确定如何应用技术和物联网 (IoT),移动应用, Azure 中所学的技能和到 ML 运动。
若要使采用此技术更轻松,我们创建了一种开放源传感器工具包与组件来处理、 度量值、 分析和改进的体育性能的传感器度量。随着时间推移,我们的目标是为了发展电子设备和体育设备公司和体育关联以及狂热爱好者们此社区传感器工具包。传感器工具包和此文章的所有示例都在bit.ly/。这包括 R、 、 C#、 和 Azure DB 代码示例。图 1显示冬季体育移动应用,也不能展示传感器工具包的使用是冬季 .co 下载。
图 1 冬季运动传感器工具包集成,来说明影响滑雪者的影响因素的移动应用程序
最近急剧增加的计算能力、 可靠性和经济性配备传感器的硬件已在新可行许多方案。和中的 AI 由运动员传感器信号上的应用程序的高级功能提供了解和提高体育性能新方式。例如,运动员传感器信号提供可解释”活动签名”所示图 2,它允许体育分析以便不再局限于总活动跟踪和聚合,从而测量的技能的关键元素或活动。从通过一个特定的轮次,到方向 g-强制形成了在每个毫秒期间生成的加速的体育分析正在被重定义。在本文中,我们详细介绍如何我们检测到这些活动签名;在这种情况下,此活动问题是打开滑雪或滑雪期间进行。
图 2 中滑雪或滑雪打开活动签名
在云中使用 Azure 人工智能 (AI),我们引入传感器数据,将其转换为丰富的分析,然后点击 ML 以提取变得更为有用信息的运动员和指导。ML 模型使得可分类在每个技能执行的专业技能和甚至可能是预测的进度和将来性能工具可用在即将到来的竞争对手事件。共享的数据标准的优点在于这样运动员进行基准检验相对于本身或其社区了解差异、 弱点和优点。借助中能够实现在边缘 AI 的新改进,我们可以将推送活动识别、 预测模型评分和性能和到设备,以供快速的可用性方面对运动员在其设备上或在混合的实际显示度量值。我们希望此组的开放源资源培养并加快体育社区中的创新。
传感器工具包概述
传感器工具包是一组开源跨平台的数据工作效率工具,包括数据引入、 分析和 ML,以及传感器硬件参考设计的工作代码示例。该工具包可帮助体育科学家、 指导和运动员捕获与毫秒级精度的运动员移动和 ML 模型评估移动分析的数据。该工具包旨在帮助设备制造商、 数据和体育科学家和感兴趣的体育学中,包括 ML 和 AI 新式方法的指导。图 3提供传感器工具包的元素的高级视图。在以下各节,我们将介绍传感器工具包中,从硬件、 数据引入和数据转换到分析、 ML 和演示文稿的多个元素。
图 3 传感器 Kit for 体育应用程序
该工具包旨在让体育爱好者或 ,以使用部分或全部及其组件。例如,分析师可能只是希望能够引入传感器数据信号并将该数据转换为通用分析的格式。数据管道代码示例有几种典型的原始数据格式。或分析师可能想要转进一步利用逻辑或代码以将数据转换为可使用的分析报表或预测 ML 模型。我们提供例如识别特定的体育活动和这些活动的性能度量值的多个代码集、 打开和注销轮次实现加速。一个跨平台的.NET 标准 2.0 C# 库和它将编译借助 ,因此你可以在 、 iOS 和 的应用程序中使用它,与跨平台开发的一点是,写入传感器工具包 SDK。
传感器硬件
图 4显示传感器工具包硬件。什么是传感器?硬件制造商通常引用传感器作为单一用途测量设备。在本文中,传感器是性能强大到足以获取并处理来自多个感官输入的数据、 将结果存储并将它们传输回主机或网关的惯性度量单位 (IMU) 设备。传感器系统组成:
图 4 传感器工具包硬件
数据模型和管道
为启用说出出现时,有 1000 多个英里旅程开头的第一步。和,因此我们开始深入的代码示例来引入,转换和准备数据,供以后分析和演示文稿。 我们将介绍两个基本元素在这里,设计的数据结构或”数据模型中,”和设计的数据从设备到存储,然后转换并将信息提供到运动员和指导管道。
让我们开始使用的数据模型。传感器工具包有三种模式的数据聚合-级别和原始的摘要,事件日志记录:
具体取决于传感器的采样率,原始的日志记录数据的聚合可能有必要允许来自设备的数据接近实时的集合。在更广泛的使用者大容量的市场情况下,生成、 存储和传输更精细的数据可能会过多,因此我们在传感器工具包来传输略有聚合的数据,降低了数据吞吐量需求定义的标准模式。如果你需要所有的详细的数据,该传感器工具包可以启用详细日志记录使用 (true) 调用。
将连接到传感器
让我们开始数据管道从传感器本身的说明。初始化传感器工具包是变得简单,只需调用 Init 方法:
SensorKit.Instance.Init();
在请求和推送模式; 工作传感器工具包使用请求模式应用程序需要显式调用同步方法的传感器,推送模式下时自动注册传感器通知。若要启用推送更新,你可以调用 (true)。若要订阅传感器更新,请使用 方法:
await Task.Run(async () =>
{
await sensor.Instance.Subscribe();
});
传感器工具包使用传感器数据,提供用于时间同步的方法并将数据发送到云。时间同步很重要,尤其是在运动员可以有多个传感器附加,并传感器工具包将自动解析为传感器工具包启用应用程序主机设备上的时间的硬件设备上的时间戳。在云中存储数据的方法是由应用程序开发中;库提供了 DB 连接器和 Azure 容器为方便起见中, 所示图 5。
图 5 中的传感器工具包库
传感器工具包提供了从设备本身的一些已转换的数据的事件和聚合。下面列出的项目架构描述的这些数据元素的分类:
在 DB 中存储传感器数据
当然,有许多选项时涉及到将数据加载到云中。 DB 非常适合 IoT 和遥测数据,如中所示图 6,并提供了加载和查询数据,以及可伸缩性和全局通讯组的多个 Api。
图 6 数据库传感器工具包文档
传感器工具包包括 DB 连接器和 Azure 函数存储容器,可在查找bit.ly/。使用通过使用以下方法连接到 DB 传感器工具包,你可以轻松地更新从传感器数据:
await SensorKit.AzureConnectorInstance.InsertUserSensorDataAsync(userSensorData);
在运动员级别和使用新数据更新 DB,运动员可以有多个传感器和传感器工具包聚合传感器数据。当数据 DB 中,很容易地查询这些数据,通过多个接口,SQL 和非 SQL。例如,你可以使用 Power BI 从传感器的团队,每个运动员创建作为专用的指导数据视图,或使用移动应用程序来呈现数据。此以下查询将返回摘要数据中找到通过传感器工具包中,每个传感器中所示图 7:
SELECT * FROM Items.sensorSummary c
图 7 DB 传感器工具包摘要数据的查询结果
一旦数据上载到 Azure,可以使用 ML 定型模型或处理数据。
既然你知道如何将数据获取到云中,我们将重点的传感器数据分析和更具体地说,体育域分析逻辑的一部分。从使用指导,我们可以确定它们感兴趣检测事件,如打开,并且从 g 强制在运行期间遇到运动员加载。我们来看,我们可以如何分析收集的数据,以检测滑雪打开。
检测活动签名从传感器数据
因此我们放中间 ,内部 ski 外壳中 传感器,与移动的质他心的对齐的滑雪者的主要轨迹。我们接收到来自加速和陀螺的数据。使用中的传感器信息允许我们要分析运动员的移动,并定义活动签名。
我们的数据存储在示例文本文件的加速和回转仪值组成 (bit.ly/)。我们 9 DOF 传感器向我们提供 3D 加速和角速度向量从加速和陀螺,分别,采样率大约 100 Hz。分析数据我们将其装载到 。你可以使用我们分析的代码,即在bit.ly/,并加载我们的示例文件。
使用 9 DOF 传感器要求彻底校准传感器,这是很单调乏味的过程。我们的目标在这种情况下是只需计算圈数,这并不需要执行特定的轴的精确移动分析。有关本文中,并简化我们计算,我们将使用加速和角速度的量。
由于我们试验涉及检测打开,我们只对感某种程度上移动运动员时。时仍代表运动员,加速传感器将显示几乎平面行,而角速度仍可能会更改。实际移动启动时,加速和回转仪值的波幅快速,更改,因此增加了标准偏差。作为图 8所示,我们可以定义起始点开头的数据其中加速值超过固定的阈值的活动。结束点是数据的一端加速低于该阈值。
图 8 开始和结束的加速活动
它是众所周知的加速传感器数据是非常多的干扰,并使用移动平均值计算生成更平滑的信号。标准偏差超过阈值的值作为起始点的信号的平均值百分比时的时间,让我们定义一个点:
a_smooth1 <- SlidingAvg(a,lag,threshold,influence)
st thresholdPct* a_smooth1$avg)
startPos<-min(st)
endPos<-max(st)
检测数据中的峰值的一种方法是使用高峰量必须大于其最近的邻居的属性。下面是我们如何计算的量的加速和回转仪值:
lag <- 30
threshold <- 1.5
influence <- 0.5
res<-SmoothAndFindPeaks(df$magnitudeW,df$magnitudeA,lag,threshold,influence)
print (paste("Total peaks in A = ", length(res$pks_a), " peaks in W = ", length(res$pks_w) ))
这将导致:
> res print (paste("Total peaks in A = ”, length(res$pks_a), " peaks in W = ", length(res$pks_w) ))
[1] "Total peaks in A = 29 peaks in W = 22"
这些结果所示图 9。
图 9 查找高峰加速和回转仪值
观测到的运动员时启用的移动显示每次在轮次转换阶段中,将转到较低的值的数量和顶点处的轮次量值获取其最大值。这意味着,如果我们计数数据的”移动”段中的峰值我们将获取我们所需的数量。则回转仪数据也会更清楚,我们将运用角速度量值计算峰值,以便确定打开。然后,我们需要若要消除的太接近的峰值彼此。
若要获取随着时间的推移稳定的低干扰数据,我们可以使用快捷键的长期稳定性结合陀螺的短期准确性互补筛选器。
现在,我们已打开检测的 R 代码,我们可以生成类似于机器学习博客中所述的过程中的 ML 定型模型在文章bit.ly/。
测量使用 G 强制运动员负载
在测验体育负载体现在只需的行程距离聚合度量值或总完成的活动。了解运动员压力和锻炼质量的一个重要方面涉及测量运动员上的负载。有若干组件到体育负载。最重要之一涉及 g 强制生成并遇到运动员,也不能创建的强制它们需要在过程中的活动,例如一个 ski 轮次,以及跳跃控制快照生成从地形或它们必须其动画容纳。
理解具有与 g 强制它们可以容忍相关的限制。这些限制取决于遇到压力的时间量,以及是否有低强度很长时间或高强度的短时间。这些限制也取决于方向和在该认为 g-force。例如,理解是更能够容忍而不高横向方向 g-force (”y”访问) 上的颈部,返回和接头其压力与高的垂直方向 g 强制 (”z”访问权限)。幸运的是,已被广泛字段研究 g 强制效果和从航空行业和我们可以利用测量,并确定特征 g 强制和 g 强制容差的 NASA 的限制。让我们深入探讨 g-强制人体,我们会如何度量它们,以及如何表示他们在运动员创建的负载。
从加速传感器度量值的 G 强制计算计算无方向 g-force 上与我们传感器加速度量值人体是,使用毕达哥拉定理如下所示:
Directionless G-Force = Math.sqrt(AccelerationX^2 + AccelerationY^2 + AccelerationZ^2)
在给定方向的 G 强制计算通过加速除以 9.81,假设加速以米 / 秒为单位平方。例如,Y 轴方向 g-force 的计算方式如下:
Y G-Force = AccelerationY / 9.81
当然,g 强制加载的运动员上的一个重要组成部分是在此期间感觉到的时间段。
G 强制按持续时间的最大容差体育活动的有用比较是人体可以容忍每个方向 g 强制最大值。而这些 g 强制反映为重心的最大值,而不是为特定的联合,它们提供一种有用的方式,来表达这些最大值的百分比遇到运动员 g 强制。假设我们能够度量值,g 强制在传感器,采样率的持续时间中任何位置从 10 示例每秒 (10 hz) 为 100 个样本,每秒 (100 hz),我们可以为任何给定的持续时间的最大百分比鉴定运动员 g 强制加载。
代码到计算 G-强制公式如前文所述,只需从传感器的加速 X、 Y 和 Z 度量值。你需要了解在其中它具有测量,通常在每秒英尺平方值或以米为单位每秒平方值的刻度。从这些元素中,我们可以计算 g-force 按特定方向,以及所遇到总体运动员的正文的无方向 g-force。感谢我们的合作伙伴 XSens,我们使用高精度传感器记录在每秒 (100 hz) 的 100 个样本的数据移动,将其加载到 Azure。
图 10显示了映射到 3D 动画传感器捕获。如你所见,滑雪者他下峰传输时遇到 g 强制在 Y 轴方向,以及在 X 方向。计算这些强制,结合使用来实现注销将,即将加速允许运动员来更好地了解在导航通过打开该 g 强制其性能。
可视化 XSens 软件是不同轴不同,图 10 G 强制加载
图 11展示计算 g 强制的 代码。
图 11 代码,用于计算 G 强制
########################
# G-Force, Using Python 3.5+
########################
#Directionless g-force (gg = Math.sqrt(Accx * Accx + Accy * Accy + Accz * Accz))
#Assuming accelerometer is in meters per second squared, gforce measurement by dividing by 9.81
#1 acceleration of gravity [g] = 9.80664999999998 meter/second² [m/s²]
#our data is in feet per second so we use the converstion 1 ft/s2 = 0.3048 m/s2
#Set Conversion Metrics
G_conversion = (9.80664999999998)
MperS_conversion = (.3048) #from above
#Replace na's with zeroes to avoid math errors
dataset=dataset.fillna(0)
#Using acceleration measures from 'dataset' dataframe, we convert to meters per second squared
#In our case our acceleration variables are labeled AccX, AccY and AccZ
#In our case, acceleration was in feet per second, so we needed to apply a conversion.
dataset["AccX_mtrpersecsqrd"] = dataset["AccX"]/MperS_conversion]
dataset["AccY_mtrpersecsqrd"] = dataset["AccY"]/MperS_conversion]
dataset["AccZ_mtrpersecsqrd"] = dataset["AccZ"]/MperS_conversion]
#Generate Directionless G-Force measure, call it 'DirectionlessGG'
dataset["DirectionlessGG"] = ((dataset["AccX"]*dataset["AccX"])+(dataset["AccY"]*dataset["AccY"])+dataset["AccZ"]*dataset["AccZ"])).astype(float)
dataset["DirectionlessGG"] = np.sqrt(dataset["DirectionlessGG"])#.astype(float)
#Generate Direction Specific G-Force, call them 'X_GG', 'Y_GG' and 'Z_GG'.
dataset["X_GG"] = dataset["AccX"]/MperS_converstion/G_conversion
dataset["Y_GG"] = dataset["AccY"]/MperS_converstion/G_conversion
dataset["Z_GG"] = dataset["AccZ"]/MperS_converstion/G_conversion
你将找到用于计算 g-force,以及包括 g-force 相对于最大值,在我们的 rep 在脚本中的更多计算的脚本bit.ly/。若要读取的 g-强制和理解,对其影响物理有关的详细信息看一看”超出速度和加速:从欧洲日志的物理在错、 管理单元和更高版本的衍生产品”文章bit.ly/,用于描述 g-强制相对于辊 体验的上下文。和有关的人工公差了解和 g 强制限制,请参阅 文章, bit.ly/,以及与在研究 NASA 集合/。计算 g 强制的详细信息位于bit.ly/。
总结
我们定制和合作伙伴进行传感器用于收集运动员数据,我们打开源连接使用移动应用程序的传感器的传感器工具包和 Azure DB 的使用进行说明。我们介绍了如何处理与统计工具,如 R,提取”活动的签名”的描述滑雪运动员一边打开该数据。最后,我们介绍了如何使用从传感器数据来计算从运动员负载 g-强制使用 。
Kevin 是 架构技术推广者。他是合著了” 8 编程”(Wrox,2012年) 和开发人员的顶部的应用程序和游戏,最值得注意的是 适用性 (.co)。他通常显示各种事件、 行业显示与 web 广播在技术上。他的职责在于,与创业公司和合作伙伴密切合作,并在软件设计、业务和技术战略、体系结构和开发方面提供相关建议。在 上关注他: @。
Olga 是数据库管理员、 数据科学家和 avid 滑雪者。她生成的数据模型和基于 Azure,包括在峰数据 Corp. 适用性冬季体育的可扩展的云平台的后端
夹 Ryan是 应用的数据科学家。她与为处理独特难题的传感器、 文本和愿景数据使用机器学习方法,其合作伙伴和客户的代码。在 上关注她: @。
衷心感谢以下 技术专家对本文的审阅:Mona Habib
在 MSDN 杂志论坛讨论这篇文章