前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tensorflow Lite人体姿势跟踪功能上线:基于PosNet的实时人体姿态估计

Tensorflow Lite人体姿势跟踪功能上线:基于PosNet的实时人体姿态估计

作者头像
机器之心
发布2019-08-28 14:59:52
2K0
发布2019-08-28 14:59:52
举报
文章被收录于专栏:机器之心机器之心

Tensowflow Lite 是移动端计算机视觉应用程序中的明星产品。这个夏天,Tensorflow Lite 再度进化,加入了 PosNet 人体姿态估计模块,性能再度加强!

怀着激动的心情,我们发布了一个「TensorFlow Lite」示例应用程序(https://www.tensorflow.org/lite),通过它在安卓设备上通过使用「PoseNet」模型来实现人体姿势估计。「PoseNet」是一种视觉模型,它可以通过检测关键身体部位的位置来估计图像或者视频中的人体姿势。例如,该模型可以估计图像中人的手肘和/或膝盖位置。这种姿势估计模型不会鉴别图像中的人是谁,只会找到关键身体部位的位置。

TensorFlow Lite 分享了一个安卓示例应用程序,该应用程序利用设备的摄像头来实时地检测和显示一个人的关键部位。

源码链接如下:https://github.com/tensorflow/examples/tree/master/lite/examples/posenet/android

这为什么会令人感到兴奋呢?

通过姿势估计可以实现多种可能性。举几个例子,开发者可以在身体图像上进行增强现实,动画化计算机图形人物,以及分析运动员在运动中的步态。在 Google I/O』19 上,TensorFlow Lite 展示了应用程序 Dance Like,该程序通过使用 PoseNet 帮助用户学习如何跳舞。

这个示例应用程序将会让应用程序的开发者和机器学习的专家们更易于探索轻量级移动端模型的可能性。

PoseNet 示例应用程序

与现有的以 JAVA 写的安卓示例相反,PoseNet 示例应用程序是在 Kotlin 上开发的。开发此应用程序的目的为了让所有人都能以最小的支出轻松地使用 PoseNet 模型。这个示例应用程序包括了一个 PoseNet 库,它抽离了模型中的复杂性。以下的图表展示了应用程序、PoseNet 库和 TensorFlow Lite 库的工作流。

PoseNet 应用程序工作流

PoseNet 库

PoseNet 库提供了一个接口,它以经过处理的摄像头图像作为输入,并返回人像关键身体部位的位置信息。此功能由「estimateSinglePose()」实现,此方法会在处理过的 RGB 位图上运行 TensorFlow Lite 解释器,返回一个 Person 对象。

对 PoseNet 的输入和输出的解释如下:https://www.tensorflow.org/lite/models/pose_estimation/overview

「Person」类包含了关键身体部位的位置和它们对应的置信度。人像的置信度是各个关键点置信度的均值,这表明了该位置存在关键点的概率。

代码语言:javascript
复制
// Person class holds a list of key points and an associated confidence score.
class Person {
  var keyPoints: List<KeyPoint> = listOf<KeyPoint>()
  var score: Float = 0.0f
}

每个关键点包含了某个身体部位的位置信息和该关键点的置信度。

所有可以找到的已定义关键点的列表如下:https://www.tensorflow.org/lite/models/pose_estimation/overview#how_it_works。

PoseNet 应用程序示例

这里展示的是一款摄像头设备内置(on-device)的 PoseNet 示例应用程序,它捕捉摄像头拍摄的帧,并实时覆盖图像上的关键点。

该应用程序对每张传入的摄像头图像执行以下操作:

  • 从摄像头预览中获取图像数据并将它从「YUV_420_888」转换成「ARGB_888」格式。
  • 创建一个位图对象来保存来自 RGB 格式帧数据的像素。将位图裁剪并缩放到模型输入的大小,以便将其传递给模型。
  • 从 PoseNet 库中调用「estimateSinglePose()」函数来获取「Person」对象。
  • 将位图缩放回屏幕大小,在「Canvas」对象上绘制新的位图。
  • 使用从「Person」对象中获取的关键点位置在画布上绘制骨架。显示置信度超过特定阈值(默认值为 0.2)的关键点。

为了将姿势渲染与摄像头帧同步。我们用单个「SurfaceView」来显示输出而不是对姿势和摄像头分别建立「View」实例。「SurfaceView」通过获取、锁定和在「View」画布上绘图,无延时地将安卓的 surface 对象显示在屏幕上。

在设备上运行

我们鼓励读者从 Github 上下载源码,参考其中 Readme 文件的引导,自己动手测试一下这个应用程序。

Github地址:https://github.com/tensorflow/examples/tree/master/lite/examples/posenet/android

未来的工作路线

在未来,我们希望为这个示例应用程序探索更多的功能,包括:

  • 多姿态估计
  • 通过 GPU delegate 进行 GPU 加速
  • 通过 NNAPI delegate 进行 NNAPI 加速
  • 通过训练后(post-training quantization)量化模型来减少延迟
  • 更多的模型选项,如 ResNet PoseNet 模型

很开心能在这个夏天开发 PoseNet 示例应用程序!我们希望这个应用程序能让设备内置的机器学习功能更触手可及。如果你在使用这个应用程序,请通过 #TFLite、#TensorFlow 和 #PoweredByTF 与我们分享.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器之心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档