(*)动作脚本概述

kHome小程序内置提供的leagor_shoulder_neck.cfg对应的肩颈操。

相机放在人的正前方。高度上,桌面高度加上面放台笔记本电脑,相机就夹在屏幕上边沿,大概1米。总的来说,上面,得拍到双手直举时手腕;下面,差多快要拍到腰部。人的部分在图像不要太小,建议最低就到腰部。

视频1:leagor_shoulder_neck.cfg对应的肩颈操

 

Launncher

----------------------------------------------------------------------------

{1-1}

动作脚本模块分三个阶段。一是用编辑器制做动作脚本文件。二是文件放到小程序,运行,用户跟着做操。三是可到数据看板,回看做操过程。

(分三行,大字叠加显示到视频)

 

一、制做脚本

要制做脚本,打开脚本编辑器。系统把一次做操拆分成多个状态,状态分两种:语音状态和姿态状态。姿态状态又分两种任务:计次和计时。

以俯卧撑为例,分三个状态。第一个是语音状态,播报“做操开始”。完成播报后,进入按次计数的姿态状态。

一次俯卧撑分两阶段:向下和向上。向下阶段,需要同时满足四个条件。1:身体平直度,即右肩、右髋、右膝3点形成的角度,按这里写的,要大于等于165。2:手臂伸直度,即右肩、右肘、右腕角度。3、右肩与右髋角度。4、右髋与右膝角度。四个条件同时满足,并持续800毫秒,向下结束,进入向上阶段。

向上阶段只判断身体平直和手臂伸直。两项持续200毫秒,向上结束,计数加1。

{1-2}

达到7次,结束当前的,进入已结束状态。在这状态,立即播报“俯卧撑已结束”,之后每10秒重复一次,不会自动结束。要结束的话,需用托盘命令切换到其他场景。

{1-3}

俯卧撑动作类型是计次,让看计时的平板撑。平板撑也是三个状态,在第二状态,动作类型是计时。和计次一样,也会有姿态判断。需要同时满足5个条件。右前臂角度、右手肘角度、右侧身体平直度、右侧躯干角度、右侧大腿角度。这五个条件同时满足的时间,累计达到60秒,该状态结束。

{1-4}

以下演示新建脚本,新建有两种方法,首选是从样板图像新建。第一步获取关健姿势图像,以这个腰椎操为例,它有5个动作,每个都是计次类型,意味着每个都要两张图像。对向右环臂摆腰动作,第一张是环臂到最右时,第二张是摆腰到最左时。区分哪是第二张的依据是,摆腰到最左时会认为计数加一。

这是截取的两张图像,为让软件正确识别姿势,图像中只让出现一人。

{1-5}

对怎么存放图像。在工作目录下新建以两下划线加“new”为前缀的目录,图像就放这目录。文件命名上,第一个动作第一张是“1下划线0”,第二张是“1下划线1”,后面动作依次类推。

准备好图像后,在这里选择存放目录,点击“生成脚本”,等待生成结束。

图像全是绿框,意味着都能找到姿态点,让进入到状态图。至此生成了这个腰椎操的脚本草稿。此时的脚本包括两部分,一个是以id为文件名的脚本配置文件,每二个存放样板图像的目录,目录名也是此动作脚本的id。在运行时,只需要这个配置文件。

{1-6}

接下来完善细节。最复杂的是设定各动作的姿态判断。草稿会默认加一些判断,这里可以删除或增加。对每个判断,需要确定‘最小值’和‘最大值’,以及小于最小值、大于最大值时的语音提示。虽然样板图能作为参考样板来定参数,但还是需要大量测试验证。有时可以去问DeepSeek。

{1-7}

以下演示从空白创建一个三状态脚本。每个状态会有一个编号,总是从编号1开始执行,建议随流程递增。当需要插入状态时,可用交换编号功能。

{1-8}

受算法精度、光照、距离等因素影响,写姿态判断需要反复测试。为辅助测出合适值,可借用三种方法。

一、打开相机窗口,录屏。做操时左上角显示实时信息,通过回看录像,调整参数。

二、打开相机窗口,手机安装kdestkop app,远程连接电脑。手机靠近人,通过手机屏幕看实时信息。

{1-9}

三、结束后,看回放。一次做操后,会生成一个火柴人动作回放视频。在右侧,会显示当前姿态在匹配的动作脚本中,各项姿态判断所测得的数值。

在述说每一种时,左上角显示当前说是哪种

 

二、运行脚本

{2-1}

要运行,先把生成动作脚本放到小程序的wkoscript目录下。这里把小程序选定为官方提供的kHome。

接下进入kLink,让增加一个场景。小程序任务选择kHome的健身操,把脚本文件名赋值给输入变量file。然后设置易识别的名称和id。这时就可运行了。

在托盘的场景区,会出现刚增加场景。运行后,如果没看到脚本运行,可去“中心”查看,上面这报错原因是找不到指定文件或格式不对。

 

三、回看数据

{3-1}

进入“健康”,做过的健身操会出现在这里。

下午3点35做的俯卧撑,耗时50秒。注意,开始计时的0秒,是指进入首个姿态状态后,用户首次满足姿态判断的那个时刻。“做7个俯卧撑”是首个姿态状态,6秒左右检测到第一次满足时刻。后面每一次俯卧撑,展示了两种耗时。蓝色柱状是单次耗时,即相邻两次语音播报次数的间隔。分了四小段的柱子是二阶段耗时,点击它会显示期间出现的不满足原因。什么是阶段、活跃期、冷却期,参考这文章。

{3-2}

下午16点14做的平板撑,耗时1分19秒。虽然脚本写的最大计时是60秒,但用的规则是纯满足时长,多出的19秒是不满足时间。通看过不满足列表,导致不满足的主要原因集中在“肩到髋角度”。深入看最后9秒,5次全是这原因,也就是说出现了塌腰或撅臀。具体是哪种,可回看火柴人动画。

暂停,挪到最后,再一帧一帧往回退。可看到最后一一次不满足时,肩到髋角度195.3,超过了最大值195,意味着腰比肩低,原因是塌腰。

这是编写脚本时作为示例的5动作腰椎操。由于次数较多,一条柱子同时显示两次。

全部评论: 0

    写评论: