首页 > 其他分享 >手势与时间表达共现的身体关键点轨迹分类

手势与时间表达共现的身体关键点轨迹分类

时间:2022-09-01 08:11:52浏览次数:102  
标签:共现 轨迹 提取 视频 -- 坐标 图像 25 关键点

手势与时间表达共现的身体关键点轨迹分类

关于这篇文章——

在这篇博客中,我将详细解释我的项目,“与时间表达同时发生的手势的身体关键点轨迹分类”,这是与 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”

为分类器架构的输入找出合适的数据格式需要花费大量时间。我们最终确定了以图像的形式表示视频,该图像具有像双手一样的关键点轨迹,并使用颜色渐变方案结合了时间因素。简而言之,对于每个视频,我们都会有一个对应的图像,其中包含手的整个“痕迹”,这些图像将被着色。从一个阴影开始的颜色,代表时间位置的开始,慢慢地变成其他颜色,代表时间结束时手的位置。

这种输入方式有许多未说明的好处,首先它让我们可以控制输入的大小,可以通过改变图像尺寸来修改它,从而对模型大小和延迟进行必要的调整。还有很多关于图像处理的工作,所以任何基于图像的时间序列方法都可以用来解决这个任务。

项目的顺序待办事项

下面我大致列出了我们为完成这个项目而必须实现的不同子目标。

  1. 使用 OpenPose 提取位姿坐标
  2. 处理提取的 JSON 文件以提取各种身体坐标的“25 点”系统
  3. 从整个文件中提取相关的手部和头部坐标
  4. 将坐标追踪为图像格式
  5. 创建用于分类的神经网络架构
  6. 为要训练的模型创建 DataLoader 和训练脚本
  7. 从数据集的音频部分提取 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

相关文章