python写的计数器

import time as t

class MyTimer():
    def __str__(self):
        return self.prompt
    __repr__=__str__
    #开始计时
    def start(self):
        self.start=t.localtime()
        print("计时开始时...")

        #停止计时
    def stop(self):
        self.stop=t.localtime()
        self._calc()
        print("计时结束!")


        
    #内部方法,计算运行时间
    def _calc(self):
        self.lasted=[]
        self.prompt='总共运行了,,'
        for index in range(6):
            self.lasted.append(self.stop[index]-self.start[index])
            self.prompt+=str(self.lasted[index])

        
运行结果:

### Python 实现深蹲计数器的技术方案 实现一个基于 Python 的深蹲计数器,可以采用两种主要方法:计算机视觉和传感器数据处理。以下是每种方法的详细技术实现路径。 #### 1. 基于计算机视觉的深蹲计数器 使用计算机视觉实现深蹲计数器需要借助深度学习框架或图像处理库来检测人体关键点并分析动作。以下是实现的关键步骤: - **人体姿态估计** 使用 OpenPose 或 MediaPipe 等工具进行人体姿态估计,提取关键点(如膝盖、臀部和脚踝)的位置[^2]。 - **动作识别** 分析关键点的变化轨迹,计算关节角度,判断是否完成一次深蹲动作。例如,当膝关节角度从大于 160 度变为小于 90 度时,视为一次下蹲;恢复到大于 160 度时,视为起身[^3]。 - **代码示例** 下面是一个基于 MediaPipe 的简单实现: ```python import cv2 import mediapipe as mp mp_pose = mp.solutions.pose pose = mp_pose.Pose() cap = cv2.VideoCapture(0) squat_count = 0 state = "up" while cap.isOpened(): ret, frame = cap.read() if not ret: break # 检测人体姿态 results = pose.process(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) landmarks = results.pose_landmarks if landmarks: # 获取关键点坐标 knee_y = landmarks.landmark[mp_pose.PoseLandmark.LEFT_KNEE].y hip_y = landmarks.landmark[mp_pose.PoseLandmark.LEFT_HIP].y # 判断动作状态 if knee_y > hip_y and state == "up": state = "down" elif knee_y <= hip_y and state == "down": state = "up" squat_count += 1 cv2.putText(frame, f"Squats: {squat_count}", (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) cv2.imshow("Squat Counter", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` #### 2. 基于传感器数据处理的深蹲计数器 如果使用加速度计或陀螺仪等传感器,可以通过采集和分析传感器数据来检测深蹲动作。 - **数据采集** 使用 IMU(惯性测量单元)传感器采集加速度和角速度数据[^4]。 - **信号处理** 对原始数据进行滤波和特征提取,识别深蹲过程中的加速度变化模式。例如,通过检测 z 轴加速度的峰值来判断深蹲的起始和结束[^5]。 - **代码示例** 下面是一个简单的传感器数据处理示例: ```python import numpy as np def detect_squat(sensor_data): threshold = 1.5 # 加速度阈值 squat_count = 0 prev_state = "idle" for data in sensor_data: acc_z = data['acc_z'] if acc_z > threshold and prev_state == "idle": prev_state = "squatting" elif acc_z < threshold and prev_state == "squatting": prev_state = "idle" squat_count += 1 return squat_count # 示例传感器数据 sensor_data = [{'acc_z': 1.2}, {'acc_z': 1.8}, {'acc_z': 0.9}, {'acc_z': 2.1}] print(f"Squats: {detect_squat(sensor_data)}") ``` ### 综合比较 - 计算机视觉方法适用于无需额外硬件的场景,但对设备性能要求较高。 - 传感器方法成本较低且计算量小,但需要佩戴设备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值