计算机深度学习毕设实战-基于python的卷积神经网络对狗注意力是否集中识别基于python_CNN深度学习卷积神经网络对狗注意力是否集中识别
2026/1/13 21:30:23
本文简单介绍一个可直接运行的Python肢体动作追踪项目,核心将采用MediaPipe Pose(谷歌开源的高精度姿态估计工具)结合OpenCV(图像/视频处理库)实现,该方案无需训练自定义模型,开箱即用,适合快速落地肢体追踪需求。
打开终端/命令提示符,执行以下安装命令:
# 安装OpenCV(用于视频捕获、图像渲染)pipinstallopencv-python# 安装MediaPipe(核心肢体姿态检测引擎)pipinstallmediapipeopencv-python:负责调用摄像头、读取视频文件、绘制追踪结果和显示窗口。mediapipe:内置预训练的Pose模型,可检测人体33个关键骨骼点(如头部、肩膀、手肘、膝盖等),支持实时追踪。importcv2importmediapipeasmp# ---------------------- 初始化配置 ----------------------# 1. 初始化MediaPipe Pose相关组件mp_pose=mp.solutions.pose# 创建Pose检测对象(设置静态图像检测/置信度阈值)# static_image_mode=False:适合视频/实时流(更高效)# min_detection_confidence:最小检测置信度(0-1,越高越严格)# min_tracking_confidence:最小追踪置信度(0-1,越高越稳定)pose=mp_pose.Pose(static_image_mode=False,model_complexity=1,# 模型复杂度(0/1/2,越高精度越高、速度越慢)min_detection_confidence=0.5,min_tracking_confidence=0.5)# 2. 初始化MediaPipe绘图工具(用于绘制骨骼点和连接线)mp_drawing=mp.solutions.drawing_utils# 定义骨骼点和连接线的绘制样式(可选,默认样式也可满足需求)drawing_spec_landmark=mp_drawing.DrawingSpec(color=(0,255,0),# 骨骼点颜色:绿色thickness=5,# 骨骼点大小circle_radius=3)drawing_spec_connection=mp_drawing.DrawingSpec(color=(255,0,0),# 连接线颜色:蓝色thickness=3,# 连接线粗细circle_radius=2)# ---------------------- 核心追踪逻辑 ----------------------defbody_pose_tracking():# 1. 打开摄像头(参数0:默认内置摄像头,若外接摄像头可改为1/2等)cap=cv2.VideoCapture(0)# 设置摄像头分辨率(可选,根据硬件调整)cap.set(cv2.CAP_PROP_FRAME_WIDTH,1280)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,720)ifnotcap.isOpened():print("错误:无法打开摄像头!")return# 2. 循环读取视频帧并进行姿态追踪whilecap.isOpened():# 读取一帧图像ret,frame=cap.read()ifnotret:print("警告:无法读取摄像头帧,退出循环!")break# ---------------------- 关键处理步骤 ----------------------# a. 图像格式转换:OpenCV读取的是BGR格式,MediaPipe需要RGB格式frame_rgb=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)# b. 禁用图像写入(提升处理速度)frame_rgb.flags.writeable=False# c. 传入Pose模型进行姿态检测results=pose.process(frame_rgb)# d. 重新启用图像写入(用于绘制结果)frame_rgb.flags.writeable=True# e. 格式转换回BGR(用于OpenCV显示)frame_bgr=cv2.cvtColor(frame_rgb,cv2.COLOR_RGB2BGR)# 3. 绘制肢体追踪结果(骨骼点+连接线)ifresults.pose_landmarks:# 绘制33个骨骼点和对应的连接线mp_drawing.draw_landmarks(image=frame_bgr,landmark_list=results.pose_landmarks,connections=mp_pose.POSE_CONNECTIONS,landmark_drawing_spec=drawing_spec_landmark,connection_drawing_spec=drawing_spec_connection)# (可选)获取某个骨骼点的坐标(示例:获取鼻子的坐标)nose_landmark=results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE]# 转换为像素坐标(frame_bgr.shape[1]:宽度,frame_bgr.shape[0]:高度)nose_x=int(nose_landmark.x*frame_bgr.shape[1])nose_y=int(nose_landmark.y*frame_bgr.shape[0])# 在图像上标注鼻子坐标cv2.putText(frame_bgr,f"Nose: ({nose_x},{nose_y})",(nose_x+10,nose_y),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,255),1,cv2.LINE_AA)# 4. 显示追踪窗口cv2.imshow("Body Pose Tracking (Press 'q' to quit)",frame_bgr)# 5. 退出条件:按下'q'键关闭窗口ifcv2.waitKey(1)&0xFF==ord('q'):break# 6. 释放资源cap.release()cv2.destroyAllWindows()pose.close()# ---------------------- 运行项目 ----------------------if__name__=="__main__":print("正在启动肢体动作追踪...")print("提示:按下'q'键可退出程序")body_pose_tracking()print("肢体动作追踪已结束")opencv-python、mediapipe)。body_pose_tracking.py文件。python body_pose_tracking.py。q键,即可退出程序并释放摄像头资源。cv2.VideoCapture获取实时视频帧,处理摄像头打开失败的异常。pose.process()得到骨骼点数据,通过draw_landmarks()绘制追踪结果。cv2.VideoCapture(0)改为cv2.VideoCapture("your_video.mp4"),即可对本地视频文件进行肢体追踪。csv文件,用于后续动作分析、机器学习训练。model_complexity改为2,模型精度更高,但对电脑性能要求更高(适合高性能设备)。cv2.VideoCapture(0)改为1尝试。model_complexity=0)、降低摄像头分辨率,或关闭其他占用性能的程序。min_detection_confidence阈值(如0.7)。pip(python -m pip install --upgrade pip),再重新安装依赖库,国内用户可使用镜像源加速安装。q键正常退出释放资源。