news 2026/4/16 17:19:20

AI健身教练开发日记:从骨骼检测到动作评分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI健身教练开发日记:从骨骼检测到动作评分

AI健身教练开发日记:从骨骼检测到动作评分

引言

你是否也遇到过这样的困境:想开发一个智能健身APP,却被动作分析模块卡住?作为全栈开发者,我们往往擅长前后端开发,但当涉及到计算机视觉和AI模型部署时,环境配置就成了拦路虎。特别是参加48小时编程比赛时,谁会为了短期项目去买昂贵的显卡呢?

这就是为什么我们需要按天计费的GPU开发环境。本文将带你一步步实现一个AI健身教练的核心功能——从人体骨骼关键点检测到动作评分。整个过程不需要你购买任何硬件,只需一个预配置好的开发环境,就能快速搭建原型。

人体骨骼关键点检测(Pose Estimation)是计算机视觉的基础技术,它通过识别图像中人体关节的位置(如肩膀、肘部、手腕等),构建出人体的"火柴人"模型。有了这个模型,我们就能分析用户的健身动作是否标准,计算动作幅度,甚至给出改进建议。

1. 环境准备:快速搭建开发平台

1.1 选择适合的开发环境

对于短期项目或比赛,我强烈推荐使用预配置的云GPU环境。这些环境通常已经安装了PyTorch、OpenCV等常用库,省去了繁琐的环境配置时间。

在CSDN星图镜像广场,你可以找到包含人体姿态估计相关库的预置镜像,如:

  • PyTorch + CUDA基础镜像
  • OpenPose预装镜像
  • MMPose全家桶镜像

1.2 一键部署开发环境

选择好镜像后,部署非常简单:

# 以PyTorch基础镜像为例 docker pull pytorch/pytorch:latest docker run -it --gpus all -p 8888:8888 pytorch/pytorch:latest

这样你就获得了一个包含GPU支持的PyTorch开发环境,可以直接开始编码。

2. 实现骨骼关键点检测

2.1 选择适合的模型

对于健身应用,我们需要平衡精度和速度。以下是几个常用选择:

  1. OpenPose:检测精度高,支持多人检测,但速度较慢
  2. MoveNet:Google推出的轻量级模型,速度快但只支持单人
  3. MMPose:模块化设计,方便定制和扩展

2.2 使用预训练模型快速实现

以MoveNet为例,下面是实现关键点检测的完整代码:

import tensorflow as tf import cv2 import numpy as np # 加载MoveNet Lightning模型 model = tf.saved_model.load('movenet_singlepose_lightning') movenet = model.signatures['serving_default'] # 处理输入图像 def process_image(image_path): image = tf.io.read_file(image_path) image = tf.image.decode_jpeg(image) image = tf.expand_dims(image, axis=0) image = tf.cast(tf.image.resize_with_pad(image, 192, 192), dtype=tf.int32) return image # 运行推理 image = process_image('test.jpg') output = movenet(image) keypoints = output['output_0'].numpy()[0][0] # 可视化结果 def draw_keypoints(image, keypoints): for y, x, confidence in keypoints: if confidence > 0.3: # 只绘制置信度高的关键点 cv2.circle(image, (int(x*image.shape[1]), int(y*image.shape[0])), 5, (0,255,0), -1) return image original_image = cv2.imread('test.jpg') result_image = draw_keypoints(original_image, keypoints) cv2.imwrite('result.jpg', result_image)

这段代码能在几秒内完成一个人的骨骼关键点检测,非常适合快速原型开发。

3. 从骨骼点到动作评分

3.1 计算关节角度

有了关键点位置,我们可以计算关节角度来判断动作是否标准。以深蹲为例:

def calculate_knee_angle(left_hip, left_knee, left_ankle): # 将坐标转换为向量 thigh = np.array(left_hip) - np.array(left_knee) shin = np.array(left_ankle) - np.array(left_knee) # 计算夹角(弧度) cosine_angle = np.dot(thigh, shin) / (np.linalg.norm(thigh) * np.linalg.norm(shin)) angle = np.arccos(cosine_angle) # 转换为角度 return np.degrees(angle) # 假设我们已经获取了关键点坐标 left_hip = [keypoints[11][1], keypoints[11][0]] # y,x left_knee = [keypoints[13][1], keypoints[13][0]] left_ankle = [keypoints[15][1], keypoints[15][0]] knee_angle = calculate_knee_angle(left_hip, left_knee, left_ankle) print(f"膝关节角度: {knee_angle:.1f}°")

3.2 动作评分系统

基于关节角度和位置关系,我们可以设计简单的评分规则:

def squat_score(knee_angle, hip_angle): # 理想深蹲角度范围 ideal_knee = (90, 120) ideal_hip = (60, 90) # 计算偏离程度 knee_dev = max(0, ideal_knee[0]-knee_angle, knee_angle-ideal_knee[1]) hip_dev = max(0, ideal_hip[0]-hip_angle, hip_angle-ideal_hip[1]) # 计算得分(0-100) score = 100 - (knee_dev + hip_dev) * 2 return max(0, min(100, score)) # 示例使用 squat_score = squat_score(knee_angle, hip_angle) print(f"深蹲动作得分: {squat_score}/100")

4. 优化与部署技巧

4.1 性能优化建议

  1. 模型选择:比赛场景优先选择轻量级模型(如MoveNet)
  2. 分辨率调整:适当降低输入图像分辨率可显著提升速度
  3. 批处理:如果有多个用户,使用批处理提高GPU利用率

4.2 常见问题解决

  • 关键点抖动:加入简单滤波算法平滑关键点轨迹
  • 遮挡处理:使用历史帧信息预测被遮挡关节位置
  • 多人场景:切换到支持多人检测的模型(如OpenPose)

4.3 快速部署API服务

使用Flask快速创建评分API:

from flask import Flask, request, jsonify import cv2 import numpy as np app = Flask(__name__) @app.route('/analyze', methods=['POST']) def analyze(): # 获取上传的图像 file = request.files['image'] image = cv2.imdecode(np.frombuffer(file.read(), np.uint8), cv2.IMREAD_COLOR) # 这里添加骨骼检测和评分逻辑 # ... return jsonify({ 'score': squat_score, 'angles': { 'knee': knee_angle, 'hip': hip_angle } }) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)

总结

通过本文的实践,我们完成了AI健身教练的核心功能开发:

  • 快速搭建环境:使用预配置的GPU镜像,省去环境配置时间
  • 骨骼关键点检测:选择适合的模型(如MoveNet)实现实时检测
  • 动作评分系统:基于关节角度设计简单的评分逻辑
  • API服务部署:使用Flask快速创建评分接口

现在,你可以将这些模块整合到你的健身APP原型中,在比赛中展示你的AI能力了。记住,原型开发的关键是快速验证核心功能,不必追求完美。有了这个基础,你可以继续扩展更多健身动作的分析和评分功能。

💡获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 22:44:35

AI打码系统异常处理:健壮性设计原则

AI打码系统异常处理:健壮性设计原则 1. 引言:AI 人脸隐私卫士的工程挑战 随着数字影像在社交、医疗、安防等场景中的广泛应用,图像隐私保护已成为不可忽视的技术命题。尤其在多人合照、公共监控截图等场景中,如何自动识别并脱敏…

作者头像 李华
网站建设 2026/4/16 11:10:07

企业级麒麟系统批量部署实战:200台终端安装实录

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个企业级麒麟系统批量部署工具。核心功能:1.基于PXE的网络启动安装 2.支持自动识别硬件并安装对应驱动 3.可配置的批量部署参数模板 4.安装进度监控看板 5.生成部…

作者头像 李华
网站建设 2026/4/16 12:59:06

MediaPipe姿势检测5分钟入门:浏览器就能跑,1小时成本1块钱

MediaPipe姿势检测5分钟入门:浏览器就能跑,1小时成本1块钱 引言:为什么选择浏览器端的姿势检测? 作为一名中学编程课老师,你是否遇到过这样的困境:想教学生体验AI姿态识别技术,但学校机房电脑…

作者头像 李华
网站建设 2026/4/16 12:58:31

GDK订阅规则解析:传统开发vsAI辅助效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建两个版本的GDK订阅规则解析工具:1. 传统方式:手动编写的规则解析器 2. AI辅助版本:使用自然语言处理自动提取规则。比较两者的开发时间、准…

作者头像 李华
网站建设 2026/4/16 3:37:00

Python打印完全指南:从Hello World到高级技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 制作一个新手教程脚本,从最简单的print(Hello World)开始,逐步介绍:1. 打印变量 2. 分隔符参数 3. 文件输出 4. 格式化字符串 5. 重定向sys.std…

作者头像 李华
网站建设 2026/4/16 13:00:22

轻量级骨骼点检测模型推荐:旧手机都能跑,云端训练更省

轻量级骨骼点检测模型推荐:旧手机都能跑,云端训练更省 1. 什么是骨骼点检测? 骨骼点检测(Pose Estimation)是计算机视觉中的一项基础技术,它通过识别图像或视频中的人体关键点(如关节、五官等…

作者头像 李华