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 是一个视觉模型,通过检测关键身体部位的位置来估计图像或视频中的人的姿势。例如,该模型可以估计一个人在图像中的肘部和/或膝盖的位置。姿势估计模型不识别图像中的人物,只识别关键身体部位的位置。