当前位置: 首页 > wzjs >正文

现在lol谁做教学视频网站免费网站怎么申请

现在lol谁做教学视频网站,免费网站怎么申请,圣诞网站怎么做,婚介网站建站文章目录 前言一、方法概述使用OpenCV和MediaPipe关键点检测角度计算姿态评估 二、完整代码实现三、代码说明PostureDetector类find_pose()get_landmarks()cakculate_angle()evaluate_posture() 坐姿评估标准(可进行参数调整):可视化功能&…

文章目录

  • 前言
  • 一、方法概述
    • 使用OpenCV和MediaPipe
    • 关键点检测
    • 角度计算
    • 姿态评估
  • 二、完整代码实现
  • 三、代码说明
    • PostureDetector类
      • find_pose()
      • get_landmarks()
      • cakculate_angle()
      • evaluate_posture()
  • 坐姿评估标准(可进行参数调整):
  • 可视化功能:
  • 如何使用
    • 安装依赖库:
    • 运行脚本:
  • 四、改进方向


前言

坐姿检测是计算机视觉中的一个应用,可以通过分析人体姿态来判断是否保持正确坐姿。下面我将介绍使用Python实现坐姿检测的方法和完整代码。


一、方法概述

使用OpenCV和MediaPipe

使用OpenCV和MediaPipe:MediaPipe提供了现成的人体姿态估计模型

关键点检测

关键点检测:检测身体关键点(如肩膀、耳朵、臀部等)

角度计算

角度计算:计算关键点之间的角度来判断坐姿

姿态评估

姿势评估:根据角度阈值判断坐姿是否正确

二、完整代码实现

import cv2
import mediapipe as mp
import numpy as np
import timeclass PostureDetector:def __init__(self, mode=False, upBody=False, smooth=True, detectionCon=0.5, trackCon=0.5):"""初始化姿势检测器参数:mode: 是否静态图像模式 (False表示视频流)upBody: 是否只检测上半身smooth: 是否平滑处理detectionCon: 检测置信度阈值trackCon: 跟踪置信度阈值"""self.mode = modeself.upBody = upBodyself.smooth = smoothself.detectionCon = detectionConself.trackCon = trackConself.mpDraw = mp.solutions.drawing_utilsself.mpPose = mp.solutions.poseself.pose = self.mpPose.Pose(static_image_mode=self.mode,model_complexity=1,smooth_landmarks=self.smooth,enable_segmentation=False,smooth_segmentation=self.smooth,min_detection_confidence=self.detectionCon,min_tracking_confidence=self.trackCon)# 坐姿评估参数self.good_posture_time = 0self.bad_posture_time = 0self.posture_status = "Unknown"self.last_posture_change = time.time()def find_pose(self, img, draw=True):"""检测图像中的姿势关键点参数:img: 输入图像 (BGR格式)draw: 是否绘制关键点和连接线返回:带标注的图像和姿势关键点"""img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)self.results = self.pose.process(img_rgb)if self.results.pose_landmarks and draw:self.mpDraw.draw_landmarks(img, self.results.pose_landmarks, self.mpPose.POSE_CONNECTIONS)return imgdef get_landmarks(self, img):"""获取所有姿势关键点的坐标参数:img: 输入图像返回:关键点坐标列表 (x,y,z) 或 None"""self.landmarks = []if self.results.pose_landmarks:for id, lm in enumerate(self.results.pose_landmarks.landmark):h, w, c = img.shapecx, cy = int(lm.x * w), int(lm.y * h)self.landmarks.append([id, cx, cy, lm.z])return self.landmarksdef calculate_angle(self, a, b, c):"""计算三个点之间的角度参数:a, b, c: 三个点的坐标 (x,y)返回:角度 (degrees)"""a = np.array(a)b = np.array(b)c = np.array(c)radians = np.arctan2(c[1]-b[1], c[0]-b[0]) - np.arctan2(a[1]-b[1], a[0]-b[0])angle = np.abs(radians * 180.0 / np.pi)if angle > 180.0:angle = 360 - anglereturn angledef evaluate_posture(self, img, draw=True):"""评估坐姿是否正确参数:img: 输入图像draw: 是否在图像上绘制评估结果返回:图像和坐姿评估结果"""current_time = time.time()posture_changed = Falseif not self.landmarks or len(self.landmarks) < 33:return img, "No person detected"# 获取需要的关节点left_shoulder = self.landmarks[11][1:3]  # 11: 左肩right_shoulder = self.landmarks[12][1:3]  # 12: 右肩left_ear = self.landmarks[7][1:3]  # 7: 左耳right_ear = self.landmarks[8][1:3]  # 8: 右耳left_hip = self.landmarks[23][1:3]  # 23: 左髋right_hip = self.landmarks[24][1:3]  # 24: 右髋# 计算肩膀中点shoulder_mid = ((left_shoulder[0] + right_shoulder[0]) // 2,(left_shoulder[1] + right_shoulder[1]) // 2)# 计算耳朵中点ear_mid = ((left_ear[0] + right_ear[0]) // 2,(left_ear[1] + right_ear[1]) // 2)# 计算髋部中点hip_mid = ((left_hip[0] + right_hip[0]) // 2,(left_hip[1] + right_hip[1]) // 2)# 计算脊柱角度 (肩膀-髋部-垂直线)spine_angle = self.calculate_angle((shoulder_mid[0], shoulder_mid[1] - 100),  # 肩膀上方一点shoulder_mid,hip_mid)# 计算颈部角度 (耳朵-肩膀-水平线)neck_angle = self.calculate_angle((ear_mid[0] - 100, ear_mid[1]),ear_mid,shoulder_mid)# 坐姿评估标准good_spine = 160 < spine_angle < 200  # 脊柱应该接近垂直good_neck = 70 < neck_angle < 110  # 颈部应该接近垂直# 判断坐姿new_status = "Good" if good_spine and good_neck else "Bad"# 更新姿势状态时间if new_status != self.posture_status:posture_changed = Trueself.last_posture_change = current_timeself.posture_status = new_statuselse:if new_status == "Good":self.good_posture_time += 1else:self.bad_posture_time += 1# 在图像上绘制结果if draw:# 绘制关键点和连接线cv2.circle(img, ear_mid, 8, (255, 0, 0), cv2.FILLED)cv2.circle(img, shoulder_mid, 8, (255, 0, 0), cv2.FILLED)cv2.circle(img, hip_mid, 8, (255, 0, 0), cv2.FILLED)cv2.line(img, ear_mid, shoulder_mid, (255, 0, 0), 3)cv2.line(img, shoulder_mid, hip_mid, (255, 0, 0), 3)# 显示角度信息cv2.putText(img, f"Spine Angle: {int(spine_angle)}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)cv2.putText(img, f"Neck Angle: {int(neck_angle)}", (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)# 显示坐姿状态color = (0, 255, 0) if new_status == "Good" else (0, 0, 255)cv2.putText(img, f"Posture: {new_status}", (10, 90), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2)# 显示时间统计cv2.putText(img, f"Good Time: {self.good_posture_time//10}s", (10, 120), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)cv2.putText(img, f"Bad Time: {self.bad_posture_time//10}s", (10, 140), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)# 如果姿势不良,添加警告if new_status == "Bad":cv2.putText(img, "WARNING: Bad Posture!", (img.shape[1]//2 - 150, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)return img, new_statusdef main():cap = cv2.VideoCapture(0)  # 使用摄像头detector = PostureDetector()while True:success, img = cap.read()if not success:breakimg = detector.find_pose(img)landmarks = detector.get_landmarks(img)if landmarks:img, posture = detector.evaluate_posture(img)cv2.imshow("Posture Detection", img)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()cv2.destroyAllWindows()if __name__ == "__main__":main()

三、代码说明

PostureDetector类

PostureDetector类:核心坐姿检测类

find_pose()

find_pose(): 检测图像中的人体姿势

get_landmarks()

get_landmarks(): 获取姿势关键点坐标

cakculate_angle()

calculate_angle(): 计算三个关键点之间的角度

evaluate_posture()

evaluate_posture(): 评估坐姿是否正确

坐姿评估标准(可进行参数调整):

脊柱角度应在160-200度之间(接近垂直)
颈部角度应在70-110度之间(接近垂直)
满足以上条件判断为"Good"坐姿,否则为"Bad"

可视化功能:

  1. 绘制关键点和连接线
  2. 显示角度数值
  3. 显示坐姿状态和时间统计
  4. 不良坐姿时显示警告

如何使用

安装依赖库:

pip install opencv-python mediapipe numpy

运行脚本:

python posture_detection.py

调整摄像头位置,确保能清晰看到上半身

四、改进方向

  1. 添加更多评估标准(如肩膀是否前倾)
  2. 实现坐姿历史记录和统计分析
  3. 添加声音提醒功能
  4. 优化性能(如降低图像分辨率)
  5. 添加校准功能,适应不同体型
    这个实现提供了基本的坐姿检测功能,你可以根据需要进一步扩展完善

http://www.dtcms.com/wzjs/444096.html

相关文章:

  • 哪个网站做舞蹈培训推广效果好重庆seo网络推广平台
  • 网站程序找人做还是自己做关键词上首页的有效方法
  • doku做网站百度竞价推广点击器
  • 互联网行业都有哪些专业下载班级优化大师并安装
  • 网站备案审核制度软文广告范文
  • 找南昌网站开发公司电话站长工具手机综合查询
  • 南阳网站推广优化公司哪家好seoul是啥意思
  • vs网站开发建表怎么肩啊培训班该如何建站
  • 策划公司架构广州软件系统开发seo推广
  • 自适应网站建设服务哪家好本地网络seo公司
  • 企业网站制作 徐州沈阳关键词seo
  • 青岛网站建设和优化教程seo推广排名网站
  • 衡水做网站的利尔化学股票最新消息
  • 网站建设业务拓展思路长春网站优化方案
  • 免费咨询法律服务windows优化大师提供的
  • 重庆酉阳网站设计公司营销推广有哪些公司
  • 网站分销系统电商网站建设开发
  • 推广普通话喜迎十二大手抄报seo计费系统登录
  • 俄罗斯做电商网站成人企业管理培训课程
  • 微信的微网站模板下载安装十大营销策划公司排名
  • 网站建设公司不赚钱网络营销管理办法
  • 三门峡城乡建设局网站社群营销的方法和技巧
  • 凡科建站官网电脑版网站建设公司大型
  • 海外营销推广方案独立站seo怎么做
  • 重庆网站建设 九度互联视频推广平台
  • 网站建设柒首先金手指6可以免费发帖的网站
  • 用网站ip做代理河北网站seo地址
  • 南阳网站建设多少钱宁波seo网络推广咨询热线
  • 郑州小程序开发公司排名宁波seo企业推广
  • 注册网站流程关键词优化工具