当前位置: 首页 > 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.rkmt.cn/news/1464225.html

相关文章:

  • YOLO模型训练GPU训练环境配置方法
  • Prometheus子查询避坑指南:从‘一小时平均响应时间’案例看avg_over_time的正确用法
  • 深度学习目标检测中yolov5单目相机测速测距,,pyqt
  • DoIP网关实战:如何用Python模拟一个简易的DoIP网关(支持CAN转以太网)
  • 三菱PLC通信避坑指南:从GX Works2设置到C#代码,一步步排查MX Component连接失败
  • 2026年6月市面上靠谱的冷冻库供应商推荐,防爆冷库/冷库/土建冷库/大型冷库/气调库/双温冷库,冷冻库公司哪家好 - 品牌推荐师
  • 2026年天津二手车地址在哪?本地化服务与信任构建成竞争关键分水岭 - 2026年企业资讯
  • 告别一堆遥控器!用几十块钱成本搭建家庭红外控制中心,支持小爱、小度、天猫精灵
  • 别再只盯着集中式和分布式了:聊聊BMS硬件架构选型背后的那些‘坑’与实战考量
  • 抖音批量下载神器:三步搞定视频收藏与内容管理
  • 丝杆升降机运行不安全?一份完整检查指南送给你
  • 告别一堆遥控器!用NodeMCU搭建家庭红外控制中枢,一个App搞定所有设备
  • 2026年5月AI无损测糖分选机品牌推荐,冬枣选果机/智能无损选果机/圣女果分选机,AI无损测糖分选机供应商推荐 - 品牌推荐师
  • 嵌入式开发必知:Hex、Bin、Srec文件到底有啥区别?看完这篇别再搞混了
  • 声学引力波的非线性效应与宇宙学研究
  • GEO优化行业权威白皮书:GEO优化的核心定义
  • 从‘异步’到‘同步’:聊聊电源里MOS管如何‘卷’掉了二极管(附SP6012驱动芯片实战解析)
  • 2026年当下北京专业滚针轴承直销厂商市场格局剖析与选择指南 - 2026年企业资讯
  • 嵌入式Linux启动提速:手把手教你配置Buildroot生成带Ramdisk的内核镜像
  • 告别拍照模糊!用Python+OpenCV手把手教你实现一个简单的自动对焦模拟程序
  • 告别32位限制!手把手教你用MX Component V5在Win10/11上搞定三菱PLC通信(C#/VB.NET通用)
  • 婴幼儿人脸识别技术挑战与深度学习解决方案
  • 【鸿蒙 PC三方库构建系统】SHA 库 鸿蒙PC 适配详解
  • 一文讲清楚 Agent 权限怎么做:从最小权限到提示注入防护
  • 别再死记硬背BMS架构了!用一张图搞懂集中式与分布式的核心差异与选型指南
  • 从MobileNetV3的h-swish激活函数聊起:为什么Google要放弃Swish?手把手复现与性能对比
  • HMS Core 5.2.0实战:用Network Kit给你的App网络请求和文件传输“提提速”
  • 如何突破文档下载限制:kill-doc一站式解决方案
  • 逆向思维抓包:当APP检测代理时,如何用Fiddler+夜神模拟器依然搞定数据捕获?
  • 从“分不清”到“分得清”:用粗糙集思想,5分钟看懂数据挖掘中的特征选择核心