示例工程【免费下载链接】examplesTensorFlow examples项目地址https://gitcode.com/gh_mirrors/exam/examples点击查看免费下载本指南围绕 TensorFlow Lite 官方示例仓库当前仓库路径lite/examples/pose_estimation/raspberry_pi中的 Raspberry Pi 姿态估计与分类示例展开系统讲解如何在一台带摄像头的树莓派或任意带摄像头的 Linux 电脑上用 OpenCV 采集图像、用 TensorFlow Lite 运行姿态估计推理并在检测到的人体关键点之上叠加姿态分类。读完本文你将掌握单人多姿态估计模型PoseNet / MoveNet Lightning / MoveNet Thunder、多人模型MoveNet MultiPose的选型与运行方式、跨帧追踪器的使用以及如何用classifier.tflite对瑜伽动作chair、cobra、dog、tree、warrior进行实时分类。1. 姿态估计与姿态分类两个层次的能力该示例同时覆盖两种任务二者关系清晰姿态估计Pose estimation从输入图像中检测人体关键点例如眼睛、耳朵、手臂、躯干、腿部等。输入是一张图像输出是一组关键点坐标x,y及各自的置信度分数。姿态分类Pose classification将人体姿态归类到预定义类别例如不同的瑜伽姿势。内部先借助姿态估计得到关键点再以关键点为输入训练/运行一个分类模型。输入是一张图像输出是预定义类别列表及其置信度分数。从代码实现看二者是明显的两阶段流水线姿态估计产出Person包含 17 个关键点、边界框与整体分数姿态分类器ml/classifier.py则把关键点的(y, x, score)三元组展平后送入分类模型。这一点在 data.py 中定义的数据结构中体现得非常直接BodyPart枚举依次为 NOSE、左右眼、左右耳、左右肩、左右肘、左右腕、左右髋、左右膝、左右踝共 17 个部位。2. 环境准备一键安装依赖并下载全部 TFLite 模型示例依赖 Python 3 环境运行依赖由 requirements.txt 声明依赖版本约束用途argparse无命令行参数解析numpy1.20.0保证与树莓派上 OpenCV 兼容张量运算与关键点数据处理opencv-python~4.5.3.56摄像头采集与图像可视化pandas1.3.1测试数据 CSV 读取tflite-runtime2.7.0树莓派上轻量级 TFLite 推理执行官方提供的安装脚本即可完成依赖安装与模型下载sh setup.shsetup.sh 内部做两件事先用pip升级并安装requirements.txt中的依赖再用curl依次下载 5 个 TFLite 模型到当前目录若文件已存在则跳过脚本也支持把下载目录作为第一个参数传入如sh setup.sh /path/to/modelsposenet.tflitePoseNet MobileNet v1输入 257x257多关键点movenet_lightning.tfliteMoveNet 单姿态 Lightning 版float16movenet_thunder.tfliteMoveNet 单姿态 Thunder 版float16movenet_multipose.tfliteMoveNet 多姿态 Lightning 版float16classifier.tflite瑜伽姿态分类器yoga_classifier.tflite模型下载后与pose_estimation.py、labels.txt放在同一目录即可直接运行脚本默认在当前目录查找模型文件。3. 运行姿态估计单姿态与多姿态模型姿态估计示例的入口脚本是 pose_estimation.py默认使用movenet_lightning模型直接运行python3 pose_estimation.py脚本会调用cv2.VideoCapture打开摄像头默认摄像头 id 为 0按640x480分辨率逐帧采集图像经过水平翻转后送入姿态估计模型再调用utils.visualize把关键点与骨架连线绘制到画面中并实时显示 FPS按 ESC 键退出。通过--model_name参数可切换不同姿态估计模型模型类型特点posenet单姿态经典 PoseNet输出 heatmap offsetmovenet_lightning单姿态默认值速度快适合实时场景movenet_thunder单姿态精度更高速度略慢movenet_multipose多姿态可同时检测画面中多人例如python3 pose_estimation.py --model_name movenet_thunder对应源码中pose_estimation.py 的run()函数会根据模型名实例化不同的检测器movenet_lightning/movenet_thunder走Movenet类posenet走Posenet类movenet_multipose走MoveNetMultiPose类其余名称直接报错退出ERROR: Model is not supported.。4. 运行姿态分类在关键点之上叠加分类结果姿态分类复用同一个入口脚本只需追加分类器参数默认使用movenet_lightning做姿态估计、classifier.tflite做瑜伽姿势分类python3 pose_estimation.py \ --classifier classifier \ --label_file labels.txt运行时分类结果类别名 概率按概率降序展示前 3 项会实时叠加显示在画面上如果某个关键点置信度低于阈值源码中keypoint_detection_threshold_for_classifier 0.1画面会提示Some keypoints are not detected.并建议让被检测者完整出现在摄像头视野内——这是对分类可靠性的必要保护避免在关键点缺失时给出误导性的分类结果。标签文件 labels.txt 中定义了 5 个类别每行一个顺序必须与分类模型输出对齐chair cobra dog tree warrior若想训练自定义姿态分类模型官方提供对应的 TensorFlow Lite pose classification 教程本仓库只读训练需在本地完成后再将生成的.tflite放入此目录。分类器类实现见 ml/classifier.py它把每个关键点的(y, x, score)展平为一维向量并扩增 batch 维送入解释器输出按概率降序排序后返回Category(label, score)列表。5. 命令行参数全解以下是示例支持的全部参数对应 pose_estimation.py 中的argparse定义参数取值默认值说明--modelposenet、movenet_lightning、movenet_thunder、movenet_multiposemovenet_lightning姿态估计模型名--trackerbounding_box、keypointbounding_box跨帧追踪器类型仅多姿态模型支持--classifier分类模型名可省略扩展名空不分类若未指定仅执行姿态估计--label_file标签文件路径labels.txt分类模型输出的类别标签每行一个--cameraId摄像头编号0传给 OpenCV 的摄像头 id--frameWidth整数640摄像头采集宽度--frameHeight整数480摄像头采集高度需要特别说明两点--tracker仅对多姿态模型生效。如果对单姿态模型指定了 trackerpose_estimation.py 会打印警告 No tracker will be used as tracker can only be enabled for MoveNet MultiPose model.继续执行但不启用追踪。模型名可以省略.tflite扩展名。Movenet、Posenet、MoveNetMultiPose、Classifier四个类内部都会用os.path.splitext判断若没有扩展名则自动补上.tflite因此--classifier classifier等价于--classifier classifier.tflite。6. 源码深读三个姿态估计器的工作原理6.1 MoveNet 单姿态模型与智能裁剪ml/movenet.pyMovenet类除了常规的 TFLite 解释器封装num_threads4启用多线程外核心亮点是基于上一帧检测结果的智能裁剪逻辑用以在保持精度的同时降低计算量首帧或需重置时通过init_crop_region把整幅图两侧填充为正方形作为初始裁剪区每帧检测后由_determine_crop_region计算下一帧裁剪区先判断躯干双肩/双髋是否可见置信度阈值_MIN_CROP_KEYPOINT_SCORE 0.2若可见则以两髋中点为中心依据关键点到中心的距离乘以放大系数_TORSO_EXPANSION_RATIO 1.9、_BODY_EXPANSION_RATIO 1.2确定裁剪边长并确保裁剪区不超出图像边界若躯干不可见则退回整幅图裁剪_run_detector在裁剪区上执行推理并把输出关键点坐标换算回原图坐标系。detect()方法支持reset_crop_region参数视频连续帧传False复用上一帧裁剪区以提升精度静态单帧图像传True从头初始化。这也解释了为什么visualizer.py对静态测试图片调用时都传入reset_crop_regionTrue。6.2 PoseNet 模型ml/posenet.pyPosenet类面向经典 PoseNet 结构其输出有两个张量heatmap热力图判定关键点大致位置和offset偏移量细化精确坐标。_process_output对每个关键点通道在热力图上取最大值位置叠加 offset 后除以 257 归一化回原图坐标。注意其输入预处理对浮点模型执行(input - 127.5) / 127.5标准化整数模型则直接送入体现了不同量化格式的兼容处理。6.3 MoveNet MultiPose 多人模型与跨帧追踪ml/movenet_multipose.pyMoveNetMultiPose类负责多人场景。其输入为动态形状当输入张量shape_signature[2] -1时通过utils.keep_aspect_ratio_resizer保持长宽比缩放长边 256并把宽高补零到 32 的倍数模型要求再用resize_tensor_input(strictTrue)动态调整输入尺寸否则直接缩放到固定尺寸。输出中每个人实例包含 17 个关键点的(y, x, score)共 51 个值、4 个边界框参数第 5154 维以及整体置信度第 55 维。_postprocess会按detection_threshold默认 0.11过滤低置信度实例构造Person列表最后交给追踪器跨帧关联同一人的 id。追踪器有两种实现配置见 tracker/config.pybounding_box默认基于边界框交叠/相似度匹配跟踪实现于 tracker/bounding_box_tracker.pykeypoint基于关键点 OKSObject Keypoint Similarity匹配跟踪实现于 tracker/keypoint_tracker.py每个关键点带有独立 falloff 权重。共享配置项包括max_tracks最大维护轨迹数 12、max_age轨迹最大存活时长默认 1000*1000 毫秒设置大值可恢复长时间未被检测到的人代价是可能的错误重识别、min_similarity新姿态与轨迹匹配的最低相似度 0.4。启用追踪后utils.visualize会给每个人体分配不同的颜色并绘制 id N 标签方便在画面上区分不同的人。7. 可视化测试数据对比三种模型与真值示例附带 test_data 目录包含 3 张测试图片image1.png、image2.jpeg、image3.jpeg、图片署名信息以及人工标注的关键点真值 CSVpose_landmark_truth.csv。运行可视化脚本python3 visualizer.pyvisualizer.py 会在测试图上同时绘制四套关键点便于直观对比PoseNet 检测结果蓝色MoveNet Lightning 检测结果红色MoveNet Thunder 检测结果黄色CSV 中的真值标注绿色该脚本还支持一个可选参数--ground_truth_csv_output 路径当指定输出路径时会先用 MoveNet Thunder 对测试图连续推理 3 次利用裁剪逻辑提升精度自动生成一份关键点真值 CSV列名形如NOSE_x、NOSE_y…供人工校验或后续对比使用。8. 从输入到输出一次完整的推理数据流综合以上实现把整条数据流串起来看OpenCV 从摄像头读取640x480图像并水平翻转pose_estimation.py姿态估计器按模型类型执行推理单姿态模型输出[17, 3]每个关键点的 y、x、置信度或经person_from_keypoints_with_scores归一化到原图坐标并计算边界框与平均分data.py多姿态模型输出多人列表并附加追踪 id若配置了分类器先检查所有关键点置信度不低于 0.1再把每个关键点的(y, x, score)展平送入classifier.tflite得到按概率降序的类别列表ml/classifier.pyutils.visualize绘制关键点圆圈、骨架连线、边界框与分类文本同时计算并叠加 FPS最终cv2.imshow展示ESC 退出utils.py。这套设计让姿态估计与分类成为可独立替换的两个模块换一个姿态估计模型只需改--model换一个分类任务只需换classifier.tflite与标签文件非常适合作为树莓派端到端姿态应用的起步模板。赞分享示例工程【免费下载链接】examplesTensorFlow examples项目地址https://gitcode.com/gh_mirrors/exam/examples点击查看免费下载相关推荐TensorFlow Lite PoseNet iOS 姿态估计实战实时人体关键点检测应用构建指南TensorFlow Lite PoseNet iOS 姿态估计实战实时人体关键点检测应用构建指南 本指南基于当前仓库中的 lite/examples/pos示例工程tfjs-models 姿态检测完全指南MoveNet / BlazePose / PoseNet 的 API 使用、关键点与实战配置tfjs models 姿态检测完全指南MoveNet / BlazePose / PoseNet 的 API 使用、关键点与实战配置 导读 本文以 pose人工智能深度学习计算机视觉NLP语音MoveNet 姿态检测入门指南在 TensorFlow.js 中实现 17 关键点实时人体姿态估计MoveNet 姿态检测入门指南在 TensorFlow.js 中实现 17 关键点实时人体姿态估计 MoveNet 是一款兼具超快速度与较高精度的单人体姿态人工智能深度学习计算机视觉NLP语音上一篇革命性小程序视觉开发ColorUI组件库突破性技术解析下一篇Mac Mouse Fix让10美元鼠标超越苹果触控板的魔法之旅创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考