2019 年 8 月 6 日 — 发布者 Eileen Mao 和 Tanjin Prity,Google 工程实习生,2019 年夏季
我们很高兴发布一个 TensorFlow Lite 示例应用程序,用于使用 PoseNet 模型 在 Android 上进行人体姿态估计。PoseNet 是一个视觉模型,通过检测关键身体部位的位置来估计图像或视频中的人的姿势。例如,该模型可以估计一个人在图像中的肘部和/或膝盖的位置。姿势估计模型不识别图像中的人物,只识别关键身体部位的位置。

![]() |
| PoseNet 应用程序工作流程 |
estimateSinglePose() 提供,该方法在处理过的 RGB 位图上运行 TensorFlow Lite 解释器并返回一个 Person 对象。此页面 说明了如何解释 PoseNet 的输入和输出。// Estimate the body part positions of a single person.
// Pass in a Bitmap and obtain a Person object.
estimateSinglePose(bitmap: Bitmap): Person {...}Person 类包含关键身体部位的位置及其关联的置信度分数。人的置信度分数是每个关键点的置信度分数的平均值,它表示关键点存在于该位置的概率。// Person class holds a list of key points and an associated confidence score.
class Person {
var keyPoints: List = listOf()
var score: Float = 0.0f
} 每个 KeyPoint 都保存着特定 BodyPart 的 Position 和该关键点的置信度分数。可以在这里访问所有定义的关键点列表 这里。// KeyPoint class holds information about each bodyPart, position, and score.
class KeyPoint {
var bodyPart: BodyPart = BodyPart.NOSE
var position: Position = Position()
var score: Float() = 0.0f
}
// Position class contains the x and y coordinates of a key point on the bitmap.
class Position {
var x: Int = 0
var y: Int = 0
}
// BodyPart class holds the names of seventeen body parts.
enum class BodyPart {
NOSE,
LEFT_EYE,
RIGHT_EYE,
...
RIGHT_ANKLE
}YUV_420_888 转换为 ARGB_888 格式。Bitmap 对象来保存来自 RGB 格式帧数据的像素。裁剪和缩放 Bitmap 以适合模型输入大小,以便可以将其传递给模型。estimateSinglePose() 函数以获取 Person 对象。Bitmap 缩放回屏幕大小。在 Canvas 对象上绘制新的 Bitmap。Person 对象获得的关键点位置在画布上绘制骨架。显示置信度分数高于一定阈值的关键点,默认值为 0.5。SurfaceView,而不是为姿态和相机使用单独的 View 实例。SurfaceView 通过获取、锁定和在 View 画布上绘画来处理在屏幕上放置表面,而不会延迟。
2019 年 8 月 6 日 — 发布者 Eileen Mao 和 Tanjin Prity,Google 工程实习生,2019 年夏季
我们很高兴发布一个 TensorFlow Lite 示例应用程序,用于使用 PoseNet 模型 在 Android 上进行人体姿态估计。PoseNet 是一个视觉模型,通过检测关键身体部位的位置来估计图像或视频中的人的姿势。例如,该模型可以估计一个人在图像中的肘部和/或膝盖的位置。姿势估计模型不识别图像中的人物,只识别关键身体部位的位置。