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

基于深度学习的人体姿态(人体动作)识别系统

基于深度学习的人体姿态(人体动作)识别系统
以下文字及代码仅供参考。

文章目录

      • **项目结构**
      • **1. 安装依赖**
      • **2. 数据集与模型**
        • 数据集
        • 模型
      • **3. 核心代码**
        • `pose_utils.py`
        • `video_utils.py`
        • `ui_main.py`
      • **4. PyQt5 UI 文件**
        • `ui_main.ui`
      • **5. 主程序入口**
        • `main.py`
      • **6. 测试与运行**
      • **总结**



模型:resnet34
软件:Pycharm+Anaconda
环境:python=3.8 opencv_python PyQt5

要建立功能:对于多种目标的识别检测功能:包括通过选择图片、视频、摄像头进行实时识别;

识别后会显示人体姿态行为的详细信息、释义

  • “Fell”:(fall 的过去式)摔倒;落下;
  • “Sit”:坐;就座;使就座
  • “Stand”:站立;直立;站起来;忍受;位于
  • “calling”:呼喊;喊叫;打电话;职业;使命感(动词 call 的现在分词形式时意为“呼喊、打电话”等)
  • “cycling”:骑自行车(运动);循环(动词 cycle 的现在分词形式)
  • “dancing”:跳舞;舞蹈(动词 dance 的现在分词形式)
  • “drinking”:喝;饮;喝酒(动词 drink 的现在分词形式)
  • “fighting”:打架;搏斗;斗争;战斗(动词 fight 的现在分词形式)
  • “hugging”:拥抱;搂抱;抱紧(动词 hug 的现在分词形式)
  • “laughing”:笑;发笑;嘲笑(动词 laugh 的现在分词形式)
  • “listening_to_music”:听音乐

可以识别

‘Fell’
‘Sit’
‘Stand’
‘calling’
‘cycling’
‘dancing’
‘drinking’
‘fighting’
‘hugging’
‘laughing’
‘listening_to_music’

等十种人体行为动作,另外在检测到摔倒行为时,可弹出警告窗口以作提醒
①选择图片识别目标,可选择单个或批量导入
②选择视频识别目标。
③摄像头检测识别目标

以下是一个基于深度学习的人体姿态识别系统的详细实现方案。该系统使用 ResNet34 模型(可根据需求改进为其他模型),并支持通过图片、视频、摄像头进行实时人体行为识别。系统会显示人体姿态行为的详细信息,并在检测到摔倒行为时弹出警告窗口。


项目结构

Human_Pose_Recognition/ ├── main.py # 主程序入口 ├── ui_main.py # PyQt5 UI 界面逻辑代码 ├── ui_main.ui # PyQt5 UI 设计文件 ├── resources.qrc # 图标资源文件 ├── resources_rc.py # 编译后的图标资源文件 ├── models/ # 存放预训练模型和权重 │ ├── resnet34.pth # ResNet34 预训练权重 ├── utils/ # 工具函数 │ ├── pose_utils.py # 姿态识别工具函数 │ ├── video_utils.py # 视频处理工具函数 ├── data/ # 测试数据 │ ├── images/ # 测试图片 │ ├── videos/ # 测试视频 ├── requirements.txt # Python 依赖包列表 └── README.md # 项目说明文档

1. 安装依赖

requirements.txt中列出所需的依赖库:

opencv-python==4.7.0.72 PyQt5==5.15.9 torch==1.13.1 torchvision==0.14.1 numpy==1.23.5

安装依赖:

pipinstall-rrequirements.txt

2. 数据集与模型

数据集

可使用公开的人体行为数据集(如 NTU RGB+D 或 UCF101)进行模型训练。标注类别包括以下动作:

  • ‘Fell’
  • ‘Sit’
  • ‘Stand’
  • ‘calling’
  • ‘cycling’
  • ‘dancing’
  • ‘drinking’
  • ‘fighting’
  • ‘hugging’
  • ‘laughing’
  • ‘listening_to_music’
模型

使用 ResNet34 作为基础模型,加载预训练权重,并根据数据集微调。模型输出为上述 11 种行为类别。


3. 核心代码

pose_utils.py
importcv2importtorchimporttorchvision.transformsastransformsfromPILimportImage# 加载预训练模型defload_model(model_path,num_classes=11):model=torch.hub.load('pytorch/vision:v0.10.0','resnet34',pretrained=False)model.fc=torch.nn.Linear(model.fc.in_features,num_classes)model.load_state_dict(torch.load(model_path))model.eval()returnmodel# 图像预处理defpreprocess_image(image):transform=transforms.Compose([transforms.Resize((224,224)),transforms.ToTensor(),transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])])image=Image.fromarray(cv2.cvtColor(image,cv2.COLOR_BGR2RGB))returntransform(image).unsqueeze(0)# 推理函数defpredict_action(model,image):withtorch.no_grad():inputs=preprocess_image(image)outputs=model(inputs)_,predicted=torch.max(outputs,1)returnpredicted.item()# 行为类别映射ACTION_LABELS=['Fell','Sit','Stand','calling','cycling','dancing','drinking','fighting','hugging','laughing','listening_to_music']

video_utils.py
importcv2# 处理视频帧defprocess_video_frame(model,frame):action_id=predict_action(model,frame)action_label=ACTION_LABELS[action_id]returnaction_label# 实时摄像头检测defdetect_from_camera(model):cap=cv2.VideoCapture(0)whileTrue:ret,frame=cap.read()ifnotret:breakaction_label=process_video_frame(model,frame)display_frame(frame,action_label)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()# 显示结果defdisplay_frame(frame,action_label):cv2.putText(frame,action_label,(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)cv2.imshow("Human Pose Recognition",frame)

ui_main.py
fromPyQt5.QtWidgetsimportQMainWindow,QFileDialog,QMessageBoxfromPyQt5.QtGuiimportQImage,QPixmapfromui_mainimportUi_MainWindowimportcv2frompose_utilsimportload_model,predict_action,ACTION_LABELSfromvideo_utilsimportdetect_from_cameraclassMainWindow(QMainWindow,Ui_MainWindow):def__init__(self):super(MainWindow,self).__init__()self.setupUi(self)self.model=load_model("models/resnet34.pth")# 连接按钮事件self.btn_image.clicked.connect(self.select_image)self.btn_video.clicked.connect(self.select_video)self.btn_camera.clicked.connect(self.start_camera)defselect_image(self):file_path,_=QFileDialog.getOpenFileName(self,"选择图片","","Image Files (*.jpg *.jpeg *.png)")iffile_path:image=cv2.imread(file_path)action_label=ACTION_LABELS[predict_action(self.model,image)]self.display_image(image,action_label)defselect_video(self):file_path,_=QFileDialog.getOpenFileName(self,"选择视频","","Video Files (*.mp4 *.avi)")iffile_path:cap=cv2.VideoCapture(file_path)whileTrue:ret,frame=cap.read()ifnotret:breakaction_label=ACTION_LABELS[predict_action(self.model,frame)]self.display_image(frame,action_label)ifcv2.waitKey(30)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()defstart_camera(self):detect_from_camera(self.model)defdisplay_image(self,image,action_label):ifaction_label=="Fell":QMessageBox.warning(self,"警告","检测到摔倒行为!")rgb_image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)h,w,ch=rgb_image.shape bytes_per_line=ch*w q_img=QImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)self.label_image.setPixmap(QPixmap.fromImage(q_img))

4. PyQt5 UI 文件

ui_main.ui

设计一个简单的 UI 界面,包含以下控件:

  • 三个按钮:选择图片、选择视频、启动摄像头。
  • 一个标签用于显示图像。
  • 一个警告窗口用于提示摔倒行为。

使用 Qt Designer 设计界面后,保存为ui_main.ui


5. 主程序入口

main.py
importsysfromPyQt5.QtWidgetsimportQApplicationfromui_mainimportMainWindowif__name__=="__main__":app=QApplication(sys.argv)window=MainWindow()window.show()sys.exit(app.exec_())

6. 测试与运行

  1. 准备测试数据
    data/imagesdata/videos文件夹中放置测试图片和视频。

  2. 运行程序

    python main.py
  3. 功能验证

    • 选择图片或视频,观察是否正确识别行为。
    • 启动摄像头,实时检测人体行为。
    • 检测到摔倒行为时,确认弹出警告窗口。

总结

基于深度学习的人体姿态识别系统,支持图片、视频、摄像头三种输入方式。系统能够快速识别多种人体行为,并在检测到摔倒行为时发出警告。

http://www.jsqmd.com/news/952609/

相关文章:

  • AI报税不是“上传发票就完事”:财税专家紧急提醒的4个数据主权陷阱与3项国密算法合规要求
  • 告别卡顿!手把手教你将16位遥感TIF转为8位,并搞定ArcMap中的shp文件创建与标注
  • YOLO模型训练GPU训练环境配置方法
  • SWaRL框架:基于强化学习的代码水印技术解析
  • Prometheus子查询避坑指南:从‘一小时平均响应时间’案例看avg_over_time的正确用法
  • macOS Tahoe 系统 Spotlight 搜索工具大升级,大幅提升工作效率!
  • 避开Simulink仿真雷区:直流电机调速系统中算法选择与PI参数整定的那些坑
  • 全球仅17家持牌机构掌握的“动态合规路由”技术:AI驱动的智能汇款路径决策引擎揭秘
  • 深度学习目标检测中yolov5单目相机测速测距,,pyqt
  • DoIP网关实战:如何用Python模拟一个简易的DoIP网关(支持CAN转以太网)
  • 在Ubuntu 22.04上跑通你的第一个SDR LTE基站:基于srsRAN与USRP B210的完整配置流程
  • 中关村科金 AICC 智能联络中心:170 + 分院 2000 坐席无感切换,破解体检呼叫中心运维难题
  • 2026年6月市面上靠谱的冷冻库供应商推荐,防爆冷库/冷库/土建冷库/大型冷库/气调库/双温冷库,冷冻库公司哪家好 - 品牌推荐师
  • 三菱PLC通信避坑指南:从GX Works2设置到C#代码,一步步排查MX Component连接失败
  • ai辅助开发:让智能体设计并实现基于rabbitmq的日志分析系统
  • PyBullet仿真进阶:如何为你的UR5机器人模型自定义关节限位与颜色材质
  • Maya到Web 3D转换神器:5步掌握glTF插件使用技巧
  • Flutter Icons 图标库保姆级使用指南:从基础调用到自定义图标实战
  • 保姆级教程:在Windows 10上用PyBullet加载UR5机器人URDF模型(附完整文件下载)
  • 2026年天津二手车地址在哪?本地化服务与信任构建成竞争关键分水岭 - 2026年企业资讯
  • 从《哈利·波特》到代码:用Java词频统计带你发现文本中的秘密(附完整源码)
  • 避坑指南:Xilinx SelectIO IP核仿真中的异步复位与bitslip机制详解
  • 保姆级教程:用Omnic和Origin搞定FTIR光谱图,从CSV数据到发表级图表
  • 保姆级教程:不root不越狱,用华为电脑助手和MMRecovery完整导出微信聊天记录(含备份文件解析)
  • 告别一堆遥控器!用几十块钱成本搭建家庭红外控制中心,支持小爱、小度、天猫精灵
  • 别再只盯着集中式和分布式了:聊聊BMS硬件架构选型背后的那些‘坑’与实战考量
  • 抖音批量下载神器:三步搞定视频收藏与内容管理
  • LendNova:AI驱动的信用风险评估创新实践
  • 丝杆升降机运行不安全?一份完整检查指南送给你
  • 效率提升秘籍:用快马AI一键生成‘香香’宠物应用可扩展代码框架