手势与时间表达共现的身体关键点轨迹分类
关于这篇文章——
在这篇博客中,我将详细解释我的项目,“与时间表达同时发生的手势的身体关键点轨迹分类”,这是与 Red Hen Lab 组织的 Google Summer of Code 2022 的一部分。
关于我的项目
人类相互交流的方式是多模态的。我们不仅会表达单词,而且还会展示它们。表达不同的概念,如时间、地点和情感,伴随着言语和一些称为身体姿势的动作。在这项研究中,我们提出了一种多模态方法,该方法可以捕捉与诸如“从开始到结束”之类的清晰时间表达对齐的不同身体姿势模式。我们提出的架构基于两个神经网络,即紧凑型变压器和长短期记忆 (LSTM)。 Compact Transformer 是目前用于时间分布图像的最先进的结构,在低资源数据上也表现良好。 LSTM 在具有长期依赖性的时间数据上表现良好。这个项目的假设是身体姿势和我们说话的时间表达之间存在关系,并使用神经网络,我们尝试接受或拒绝这个假设。
关于 RAW 数据集
可用的数据集是 MP4(视频)格式,包含剪辑 新闻编辑室中主播进行的广泛讨论的短片。这些剪辑包含“从头到尾”“回到过去”等关键词。数据集大致分为“顺序”、“分界”、“指示”,还可以使用更精细的子分类标签。下面给出了一个示例视频 -
Example of Raw Data of the class — Demarcative and subclass “from begining to end”
为分类器架构的输入找出合适的数据格式需要花费大量时间。我们最终确定了以图像的形式表示视频,该图像具有像双手一样的关键点轨迹,并使用颜色渐变方案结合了时间因素。简而言之,对于每个视频,我们都会有一个对应的图像,其中包含手的整个“痕迹”,这些图像将被着色。从一个阴影开始的颜色,代表时间位置的开始,慢慢地变成其他颜色,代表时间结束时手的位置。
这种输入方式有许多未说明的好处,首先它让我们可以控制输入的大小,可以通过改变图像尺寸来修改它,从而对模型大小和延迟进行必要的调整。还有很多关于图像处理的工作,所以任何基于图像的时间序列方法都可以用来解决这个任务。
项目的顺序待办事项
下面我大致列出了我们为完成这个项目而必须实现的不同子目标。
- 使用 OpenPose 提取位姿坐标
- 处理提取的 JSON 文件以提取各种身体坐标的“25 点”系统
- 从整个文件中提取相关的手部和头部坐标
- 将坐标追踪为图像格式
- 创建用于分类的神经网络架构
- 为要训练的模型创建 DataLoader 和训练脚本
- 从数据集的音频部分提取 PRAAT 特征
在博客的其余部分,我将逐一介绍每个子任务,并解释在完成任务过程中所面临的思考过程、挑战和解决方案。
提取 OpenPose 坐标
为了提取身体姿势坐标,我参考 OpenPose 文件 和 GitHub 存储库。我们遵循 BODY_25 提取模板,用简单的话将整个身体标记为 25 个标签点,其中包括手和头作为几个点之一,使其成为我们工作的理想选择。下面给出了一个提取点的例子(取自官方文档)——
Example of BODY_25 system. We can see that the labels for the various body points, which could be used to slice the coordinates from the JSON file
广泛地说,我们使用以下代码片段从基于循环的代码中的视频中提取坐标——
!cd openpose && ./build/examples/openpose/openpose.bin --face --hand --video ../clip.mp4 --write_json $path --display 0 --write_video /content/clip_openpose.avi -- keypoint_scale 3 --num_gpu -1 --model_pose BODY_25 --part_candidates
复制的确切代码可以在 协作笔记本 与本文档共享。上面的代码只是一个例子。
这里参数“face”和“hand”表示从视频中提取手和脸,write_json 给出了存储输出的文件夹的路径,我们还使用 write_video 命令保存带注释的视频,keypoint_scale 定义原点point 为坐标系,model_pose 选择模板进行提取,在我们上面提到的例子中,它被选择为 BODY_25
从创建的 JSON 文件中提取数据
为此,我使用了由我的导师 Raul 和 Brian 编写的基于“R”语言的代码。要合并这个,下面给出的简单扩展可以在 Google Colab 中运行代码。
%load_ext rpy2.ipython %%R
使用代码 df_maker 我能够提取保存以供进一步处理的 CSV 坐标。为方便起见,我将分享 df_maker 函数的确切函数调用。
result = dfMaker("文件夹路径",save.csv = T,return.empty = T,output.folder = "输出路径")
此处将与 save.csv 一起提及路径,这将启用文件的保存而不是简单地解析它们。
从 JSON 文件中提取
下一步涉及过滤从上一步获得的 CSV 文件输出中的相关点,在我们的例子中 - 点 4 和 7(请参阅上面的 BODY_25 图像)。我们使用 pandas 和解析来做到这一点。
我们提取图像中所有人的左手和右手坐标,(是的,在剪辑中有不止一个人的情况下,我们保留他们的手势,假设只有一个人在剪辑期间有力地移动了他们的手.)
CSV 文件还包含具有概率分数的同一剪辑的多个坐标,在出现此类冲突的情况下,我们选择更高的概率坐标。我们没有保存这些冗余数据,而是使用循环以连续提取的形式直接绘制它。下面给出了提取坐标的示例 -
Example for the various hand coordinate spread through the frames of the video
图像的绘制将在下一小节中解释
将坐标追踪到图像中
我使用 matplotlib 绘制坐标并使用 mycolorpy 来获取表示基于时间的组件的颜色模式。
使用 OpenPose 和当前框架,视频轨迹的表示结果与预期的一样准确,下面给出了一个示例
视频保持与上一小节所述相同 -
而对应的手迹如下图——
Image showing the hand trace of the above video
这里紫色代表对象的右手,橙色代表左手。随着时间的推移,颜色的阴影从浅到深。因此,浅紫色代表视频的初始帧,而较深的阴影代表剪辑的结尾,橙色也是如此。这可以使用上面的视频进行交叉验证。
Colour schema for the hand coordinates as time progresses
创建用于分类的神经网络架构
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
本文链接:https://www.qanswer.top/7548/05490108
标签:共现,轨迹,提取,视频,--,坐标,图像,25,关键点 From: https://www.cnblogs.com/amboke/p/16645180.html