基于深度学习的人体姿态(人体动作)识别系统 基于深度学习的人体姿态人体动作识别系统以下文字及代码仅供参考。文章目录**项目结构****1. 安装依赖****2. 数据集与模型**数据集模型**3. 核心代码**pose_utils.pyvideo_utils.pyui_main.py**4. PyQt5 UI 文件**ui_main.ui**5. 主程序入口**main.py**6. 测试与运行****总结**模型resnet34软件PycharmAnaconda环境python3.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-python4.7.0.72 PyQt55.15.9 torch1.13.1 torchvision0.14.1 numpy1.23.5安装依赖pipinstall-rrequirements.txt2. 数据集与模型数据集可使用公开的人体行为数据集如 NTU RGBD 或 UCF101进行模型训练。标注类别包括以下动作‘Fell’‘Sit’‘Stand’‘calling’‘cycling’‘dancing’‘drinking’‘fighting’‘hugging’‘laughing’‘listening_to_music’模型使用 ResNet34 作为基础模型加载预训练权重并根据数据集微调。模型输出为上述 11 种行为类别。3. 核心代码pose_utils.pyimportcv2importtorchimporttorchvision.transformsastransformsfromPILimportImage# 加载预训练模型defload_model(model_path,num_classes11):modeltorch.hub.load(pytorch/vision:v0.10.0,resnet34,pretrainedFalse)model.fctorch.nn.Linear(model.fc.in_features,num_classes)model.load_state_dict(torch.load(model_path))model.eval()returnmodel# 图像预处理defpreprocess_image(image):transformtransforms.Compose([transforms.Resize((224,224)),transforms.ToTensor(),transforms.Normalize(mean[0.485,0.456,0.406],std[0.229,0.224,0.225])])imageImage.fromarray(cv2.cvtColor(image,cv2.COLOR_BGR2RGB))returntransform(image).unsqueeze(0)# 推理函数defpredict_action(model,image):withtorch.no_grad():inputspreprocess_image(image)outputsmodel(inputs)_,predictedtorch.max(outputs,1)returnpredicted.item()# 行为类别映射ACTION_LABELS[Fell,Sit,Stand,calling,cycling,dancing,drinking,fighting,hugging,laughing,listening_to_music]video_utils.pyimportcv2# 处理视频帧defprocess_video_frame(model,frame):action_idpredict_action(model,frame)action_labelACTION_LABELS[action_id]returnaction_label# 实时摄像头检测defdetect_from_camera(model):capcv2.VideoCapture(0)whileTrue:ret,framecap.read()ifnotret:breakaction_labelprocess_video_frame(model,frame)display_frame(frame,action_label)ifcv2.waitKey(1)0xFFord(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.pyfromPyQt5.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.modelload_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:imagecv2.imread(file_path)action_labelACTION_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:capcv2.VideoCapture(file_path)whileTrue:ret,framecap.read()ifnotret:breakaction_labelACTION_LABELS[predict_action(self.model,frame)]self.display_image(frame,action_label)ifcv2.waitKey(30)0xFFord(q):breakcap.release()cv2.destroyAllWindows()defstart_camera(self):detect_from_camera(self.model)defdisplay_image(self,image,action_label):ifaction_labelFell:QMessageBox.warning(self,警告,检测到摔倒行为)rgb_imagecv2.cvtColor(image,cv2.COLOR_BGR2RGB)h,w,chrgb_image.shape bytes_per_linech*w q_imgQImage(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.pyimportsysfromPyQt5.QtWidgetsimportQApplicationfromui_mainimportMainWindowif__name____main__:appQApplication(sys.argv)windowMainWindow()window.show()sys.exit(app.exec_())6. 测试与运行准备测试数据在data/images和data/videos文件夹中放置测试图片和视频。运行程序python main.py功能验证选择图片或视频观察是否正确识别行为。启动摄像头实时检测人体行为。检测到摔倒行为时确认弹出警告窗口。总结基于深度学习的人体姿态识别系统支持图片、视频、摄像头三种输入方式。系统能够快速识别多种人体行为并在检测到摔倒行为时发出警告。