47

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

 4 years ago
source link: https://www.tuicool.com/articles/7Vryye2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

Ujy2qeB.gif

源码链接如下: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 库的工作流。

BRjq6by.png!web

PoseNet 应用程序工作流

PoseNet 库

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

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

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

// 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 与我们分享.

原文链接: https://medium.com/tensorflow/track-human-poses-in-real-time-on-android-with-tensorflow-lite-e66d0f3e6f9e


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK