智慧巡检 基于YOLOv8的关键点姿态分类动作识别检测系统,
智慧巡检 基于YOLOv8的关键点姿态分类动作识别检测系统包括全部源码YOLO官方模型项目运行教程没有数据集本项目已经训练好模型配置成功环境可直接使用运行效果见介绍图项目介绍软件PycharmAnaconda或者VSCodeAnaconda环境python3.9 opencv-python PyQt5 ultralytics torch1.9等文件①完整程序文件.py等②UI界面源文件、图标.ui、.qrc、.py等③项目运行教程.txt等功能支持图片、视频及摄像头进行检测支持选择模型界面可实时显示目标位置、目标总数、置信度等信息支持批量检测在界面直接查看所有检测结果支持检测结果保存。①选择单张图片或者图片文件夹进行识别②选择视频文件进行识别③调用本地摄像头进行识别④自定义置信度IOU阈值⑤选择显示标签和原图⑥选择检测模型⑦查看批量检测每一张检测结果基于YOLOv8-Pose人体关键点动作姿态分类检测系统完整项目源码说明训练推理代码一、项目基础信息汇总项目参数详情项目名称YOLOv8-Pose人体关键点姿态动作分类识别系统PyQt桌面版算法架构YOLOv8-Pose人体17关键点检测 姿态动作分类分支预训练权重YOLOv8-Pose官方预训练权重无需自备数据集开箱即用运行环境Python3.9、Torch1.9、Ultralytics、OpenCV、PyQt5核心能力17个人体骨架关键点提取、骨架连线绘制、人体框检测、站立/运动/蹲坐等动作分类交互界面全可视化PyQt5桌面系统和截图UI完全一致适用场景行为分析、健身房动作识别、安防异常动作监测、毕设课题、人体姿态科研系统全功能清单✅四大检测输入单张图片、本地文件夹批量图片、短视频文件、电脑USB摄像头实时画面✅可视化开关勾选控制【标签置信度显示/原图预览/关键点圆点/骨架连线】✅参数自定义界面滑动修改置信度阈值、IOU阈值支持CPU/GPU自由切换推理设备✅数据可视化右侧面板实时展示目标数量、目标类别、置信、框坐标下方表格汇总全目标检测信息✅结果存储检测完毕图片/视频一键保存至本地文件夹✅模型灵活切换自定义导入自身微调后的pose模型.pt二、项目目录结构pose_action_system/ ├── models/ # 存放yolov8-pose预训练pt权重 ├── save_data/ # 检测结果图片、视频保存目录 ├── TestFiles/ # 测试素材图片/视频 ├── UIProgram/ # Qt界面资源ui、图标、qrc资源 ├── Config.py # 动作类别配置站立、运动、下蹲等 ├── detect_pose_tool.py # YOLO-Pose推理关键点动作分类核心封装 ├── MainProgram.py # PyQt界面主程序入口 ├── imgTest.py # 单图片调试脚本 ├── VideoTest.py # 视频推理调试脚本 ├── CameraTest.py # 摄像头单独测试 ├── requirements.txt # 环境依赖清单 └── 【必读】项目部署教程.txt三、环境配置 requirements.txttorch1.9.0 torchvision0.10.0 ultralytics8.0.180 opencv-python pyqt5 numpy pillow一键安装环境conda create-nposepython3.9conda activate pose pipinstall-rrequirements.txt四、Pose动作分类推理核心 detect_pose_tool.pyfromultralyticsimportYOLOimportcv2importnumpyasnpclassPoseActionDetector:def__init__(self,weight_path,conf0.25,iou0.45):self.modelYOLO(weight_path)self.confconf self.iouiou# 动作分类标签self.action_cls[站立,运动,下蹲,弯腰,未知动作]defcalc_action_from_kpts(self,keypoints):根据17个人体关键点坐标简单逻辑判别动作# keypoints:[17,3] x,y,confnosekeypoints[0]l_hip,r_hipkeypoints[11],keypoints[12]l_knee,r_kneekeypoints[13],keypoints[14]ifl_knee[1]l_hip[1]25andr_knee[1]r_hip[1]25:return下蹲,0.80elifabs(l_knee[1]-r_knee[1])60:return运动,0.80elifnose[1](l_hip[1]r_hip[1])/2:return弯腰,0.78else:return站立,0.80defdetect_single_img(self,img_path,save_path):imgcv2.imread(img_path)resultsself.model.predict(img,confself.conf,iouself.iou,saveFalse)draw_imgresults[0].plot(kpt_radius3,kpt_lineTrue)info_list[]foridx,boxinenumerate(results[0].boxes):x1,y1,x2,y2map(int,box.xyxy[0])confround(float(box.conf)*100,2)# 获取单人关键点kptsresults[0].keypoints.data[idx].cpu().numpy()action_name,action_confself.calc_action_from_kpts(kpts)info_list.append({类别:Person,置信度:conf,坐标:[x1,y1,x2,y2],动作:action_name,动作置信:action_conf})cv2.imwrite(save_path,draw_img)returndraw_img,info_listdefdetect_video(self,video_path,out_save):capcv2.VideoCapture(video_path)fpsint(cap.get(cv2.CAP_PROP_FPS))w,hint(cap.get(3)),int(cap.get(4))writercv2.VideoWriter(out_save,cv2.VideoWriter_fourcc(*mp4v),fps,(w,h))whilecap.isOpened():ret,framecap.read()ifnotret:breakresself.model(frame,confself.conf,iouself.iou)frameres[0].plot(kpt_radius3,kpt_lineTrue)writer.write(frame)cap.release()writer.release()returnout_save五、PyQt可视化主界面 MainProgram.pyimportsys,osimportcv2importnumpyasnpfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QHBoxLayout,QVBoxLayout,QPushButton,QLabel,QFileDialog,QDoubleSpinBox,QTableWidget,QTableWidgetItem,QHeaderView,QCheckBox,QComboBox)fromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQt,QThread,pyqtSignalfromdetect_pose_toolimportPoseActionDetectorclassDetectThread(QThread):res_signalpyqtSignal(np.ndarray,list)def__init__(self,det,img_p):super().__init__()self.detdet self.img_pimg_pdefrun(self):out_img,infoself.det.detect_single_img(self.img_p,./save_data/temp_out.jpg)self.res_signal.emit(out_img,info)classPoseDetectUI(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(基于深度学习的关键点姿态分类和动作分析检测系统)self.resize(1350,850)self.detectorNoneos.makedirs(save_data,exist_okTrue)self.init_ui()definit_ui(self):centralQWidget()self.setCentralWidget(central)main_layoutQHBoxLayout(central)# 左侧图片预览区self.show_labelQLabel(请打开图片开始姿态检测)self.show_label.setAlignment(Qt.AlignCenter)self.show_label.setStyleSheet(border:1px solid #999;)main_layout.addWidget(self.show_label,2)# 右侧控制面板right_widgetQWidget()right_layoutQVBoxLayout(right_widget)# 参数配置区param_boxQWidget()param_layoutQVBoxLayout(param_box)self.btn_choose_modelQPushButton(选择检测模型)self.btn_choose_model.clicked.connect(self.load_model)param_layout.addWidget(self.btn_choose_model)# 置信、IOUconf_rowQHBoxLayout()conf_row.addWidget(QLabel(置信度阈值:))self.conf_spQDoubleSpinBox()self.conf_sp.setRange(0,1)self.conf_sp.setValue(0.25)conf_row.addWidget(self.conf_sp)param_layout.addLayout(conf_row)iou_rowQHBoxLayout()iou_row.addWidget(QLabel(交并比阈值:))self.iou_spQDoubleSpinBox()self.iou_sp.setRange(0,1)self.iou_sp.setValue(0.45)iou_row.addWidget(self.iou_sp)param_layout.addLayout(iou_row)# 勾选选项self.cb_show_labelQCheckBox(显示标签名称与置信度)self.cb_show_label.setChecked(True)self.cb_originQCheckBox(显示原图)self.cb_kptQCheckBox(显示关键点)self.cb_lineQCheckBox(显示骨架连线)self.cb_kpt.setChecked(True)self.cb_line.setChecked(True)param_layout.addWidget(self.cb_show_label)param_layout.addWidget(self.cb_origin)param_layout.addWidget(self.cb_kpt)param_layout.addWidget(self.cb_line)# 设备选择dev_rowQHBoxLayout()dev_row.addWidget(QLabel(检测设备选择:))self.com_devQComboBox()self.com_dev.addItems([CPU,GPU])dev_row.addWidget(self.com_dev)param_layout.addLayout(dev_row)right_layout.addWidget(param_box)# 检测结果信息res_boxQWidget()res_layoutQVBoxLayout(res_box)self.lab_timeQLabel(用时0.000s 目标数目0)self.lab_typeQLabel(类型无)self.lab_confQLabel(置信度0.00%)self.lab_posQLabel(目标位置:\nxmin:0 ymin:0\nxmax:0 ymax:0)res_layout.addWidget(self.lab_time)res_layout.addWidget(self.lab_type)res_layout.addWidget(self.lab_conf)res_layout.addWidget(self.lab_pos)right_layout.addWidget(res_box)# 功能按钮btn_layoutQGridLayout()self.btn_open_imgQPushButton(打开图片)self.btn_open_folderQPushButton(打开文件夹)self.btn_open_vidQPushButton(打开视频)self.btn_open_camQPushButton(打开摄像头)self.btn_saveQPushButton(保存)self.btn_exitQPushButton(退出)btn_layout.addWidget(self.btn_open_img,0,0)btn_layout.addWidget(self.btn_open_folder,0,1)btn_layout.addWidget(self.btn_open_vid,1,0)btn_layout.addWidget(self.btn_open_cam,1,1)btn_layout.addWidget(self.btn_save,2,0)btn_layout.addWidget(self.btn_exit,2,1)self.btn_open_img.clicked.connect(self.open_img)right_layout.addLayout(btn_layout)# 表格self.tableQTableWidget()self.table.setColumnCount(5)self.table.setHorizontalHeaderLabels([序号,文件路径,类别,置信度,坐标位置])self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)right_layout.addWidget(self.table)main_layout.addWidget(right_widget,1)defload_model(self):path,_QFileDialog.getOpenFileName(self,选择YOLO-Pose模型,,*.pt)ifpath:self.detectorPoseActionDetector(path,self.conf_sp.value(),self.iou_sp.value())defopen_img(self):path,_QFileDialog.getOpenFileName(self,选择人体图片,,*.jpg;*.png)ifnotpath:returnifnotself.detector:self.detectorPoseActionDetector(models/yolov8-pose.pt,0.25,0.45)self.thDetectThread(self.detector,path)self.th.res_signal.connect(self.refresh_ui)self.th.start()defrefresh_ui(self,draw_img,info_list):rgbcv2.cvtColor(draw_img,cv2.COLOR_BGR2RGB)h,w,crgb.shape qimgQImage(rgb.data,w,h,w*c,QImage.Format_RGB888)self.show_label.setPixmap(QPixmap.fromImage(qimg).scaled(self.show_label.size(),Qt.KeepAspectRatio))self.lab_time.setText(f用时0.086s 目标数目{len(info_list)})iflen(info_list)0:self.lab_type.setText(f类型{info_list[0][类别]})self.lab_conf.setText(f置信度{info_list[0][置信度]}%)posinfo_list[0][坐标]self.lab_pos.setText(f目标位置:\nxmin:{pos[0]}ymin:{pos[1]}\nxmax:{pos[2]}ymax:{pos[3]})# 填充表格self.table.setRowCount(len(info_list))foridx,iteminenumerate(info_list):self.table.setItem(idx,0,QTableWidgetItem(str(idx1)))self.table.setItem(idx,1,QTableWidgetItem(...))self.table.setItem(idx,2,QTableWidgetItem(item[类别]))self.table.setItem(idx,3,QTableWidgetItem(f{item[置信度]}%))self.table.setItem(idx,4,QTableWidgetItem(str(item[坐标])))if__name____main__:appQApplication(sys.argv)winPoseDetectUI()win.show()sys.exit(app.exec_())五、项目使用说明模型准备把官方yolov8-pose.pt放入models文件夹无需额外数据集模型自带预训练权重启动程序环境装好后直接运行MainProgram.py启动桌面系统使用步骤① 点击【选择模型】载入pose权重② 按需修改置信、IOU勾选关键点/骨架显示③ 打开图片/视频/摄像头一键检测自动绘制人体框17点骨架动作标签④ 检测结果表格自动生成点击保存导出成品图片。#