ML 姿态检测
在 Flutter 中使用 ML Kit 进行姿态检测的简便方法。
ML Kit 姿态检测是一个轻量级、多功能的解决方案,可供应用开发者实时检测用户身体的姿态,无论是来自连续视频还是静态图像。
姿态是指身体在某一时刻的位置,由一组骨骼地标点组成。地标点对应于身体的不同部位,例如肩膀和臀部。地标点的相对位置可用于区分不同的姿态。它会产生一个包含 33 个点的全身骨骼匹配,其中包括面部地标(耳朵、眼睛、嘴巴和鼻子)以及手和脚上的点。
ML Kit 姿态检测无需专门的设备或机器学习专业知识即可取得优异的成果。借助这项技术,开发者只需几行代码即可为用户创造独一无二的体验。
为了检测姿态,用户的脸必须可见。姿态检测在被摄对象的整个身体都可见时效果最佳,但它也能检测部分身体姿态。在这种情况下,未识别的地标点将被赋予图像外部的坐标。
入门
将依赖项添加到您的 flutter 项目
$ flutter pub add learning_pose_detection
或者
dependencies:
learning_pose_detection: ^0.0.1
然后运行 flutter pub get。
用法
import 'package:learning_pose_detection/learning_pose_detection.dart';
输入图像
与其他 ML 视觉插件一样,输入是以 InputImage 实例的形式提供的,该实例是 learning_input_image 包的一部分。
您可以从 learning_input_image 使用 InputCameraView 小部件作为处理来自相机/存储的图像(或图像流)到 InputImage 格式的默认实现。但如果您想创建自己的自定义实现,请随时了解 InputCameraView 内部代码。
以下是使用 InputCameraView 获取用于姿态检测的 InputImage 的示例。
import 'package:learning_input_image/learning_input_image.dart';
InputCameraView(
title: 'Pose Detection',
onImage: (InputImage image) {
// now we can feed the input image into pose detector
},
)
姿态检测
在获取 InputImage 后,我们可以通过调用 PoseDetector 实例的 detect 方法来开始检测用户的姿态。
PoseDetector detector = PoseDetector();
Pose? pose = await detector.detect(image);
输出
姿态检测过程的输出是 Pose 对象,其中包含以下信息。
Map<PoseLandmarkType, PoseLandmark> landmarks // Map object representing the list of PoseLandmark
每个 PoseLandmark 包含以下数据。
PoseLandmarkType type // the type of detected landmark
Offset position // the x, y position of detected landmark
double inFrameLikelihood // the probability of the detected landmark to be inside the frame
以下是 PoseLandmarkType 值的列表。
LEFT_EYE
LEFT_EYE_INNER
LEFT_EYE_OUTER
RIGHT_EYE
RIGHT_EYE_INNER
RIGHT_EYE_OUTER
LEFT_EAR
RIGHT_EAR
NOSE
LEFT_MOUTH
RIGHT_MOUTH
LEFT_SHOULDER
RIGHT_SHOULDER
LEFT_ELBOW
RIGHT_ELBOW
LEFT_WRIST
RIGHT_WRIST
LEFT_THUMB
RIGHT_THUMB
LEFT_INDEX
RIGHT_INDEX
LEFT_PINKY
RIGHT_PINKY
LEFT_HIP
RIGHT_HIP
LEFT_KNEE
RIGHT_KNEE
LEFT_ANKLE
RIGHT_ANKLE
LEFT_HEEL
RIGHT_HEEL
LEFT_FOOT_INDEX
RIGHT_FOOT_INDEX
姿态绘制
为了方便从 Pose 对象绘制到屏幕,我们提供了 PoseOverlay,您可以将其传递给 InputCameraView 的 overlay 参数。有关如何使用此绘制的更多详细信息,请参阅此处的实际示例代码。
PoseOverlay(
size: size,
originalSize: originalSize,
rotation: rotation,
pose: pose,
)
处置
detector.dispose();
示例项目
您可以从示例项目 此处了解更多信息。
