news 2026/8/6 8:51:56

深度学习框架YOLOV8模型训练行人持刀检测数据集 如何建立基于深度学习Yolov8的行人持刀检测系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习框架YOLOV8模型训练行人持刀检测数据集 如何建立基于深度学习Yolov8的行人持刀检测系统

基于深度学习Yolov8的行人持刀检测系统

Python + PyQt5可视化界面

可对图片,视频,摄像头进行识别、

🛠️ 基于深度学习 YOLOv8 的行人持刀检测系统(完整源码 + 数据集 + 模型)

✅ 支持图片、视频、摄像头实时检测
✅ 提供已标注数据集训练好的模型
✅ 使用PyQt5 可视化界面,操作简单直观
✅ 附带完整代码与运行说明


📦 一、项目结构说明

knife_detection_system/ ├── datasets/# 已标注的行人持刀数据集│ ├── images/ │ │ ├── train/ │ │ └── val/ │ └── labels/ │ ├── train/ │ └── val/ ├── models/# 训练好的模型文件│ └── knife.pt# 最佳模型权重├── runs/# 训练结果输出目录│ ├── detect/ │ │ └── knife_detection/ │ └── train/ ├── save_data/# 检测结果保存路径├── TestFiles/# 测试用图片/视频├── UIProgram/# GUI 界面代码│ ├── CameraTest.py# 摄像头测试脚本│ ├── Config.py# 配置文件│ ├── detect_tools.py# 检测工具类│ ├── imgTest.py# 图片测试脚本│ ├── VideoTest.py# 视频测试脚本│ └── MainProgram.py# 主程序入口├── train.py# 模型训练脚本├── yolo8n.pt# YOLOv8n 预训练模型(可选)├── requirements.txt# 依赖包└── README.md# 使用说明文档

🔧 二、环境配置(requirements.txt

python==3.11 torch==2.7.1 torchvision==0.18.1 opencv-python==4.8.0.76 pyqt5==5.15.10 ultralytics==8.2.0 numpy==1.26.0 pillow==10.0.1

安装命令:

pipinstall-r requirements.txt

💡 推荐使用 Anaconda 创建虚拟环境:

conda create -n knife_detectpython=3.11-y conda activate knife_detect pipinstall-r requirements.txt

📁 三、数据集说明(datasets/

数据来源

  • 公开数据集(如:Knife Detection Dataset)或自采集
  • 包含行人持刀场景,包括近景、远景、遮挡、不同光照等复杂情况

标注格式

  • 使用LabelImg工具进行标注
  • 输出为 YOLO 格式.txt文件
  • 每张图像对应一个.txt文件,内容如下:
0 0.34 0.45 0.21 0.15
字段含义
0类别 ID(0表示“刀”)
0.34中心点 x 坐标(归一化)
0.45中心点 y 坐标(归一化)
0.21宽度(归一化)
0.15高度(归一化)

类别定义

names:['knife']

📂 四、训练好的模型(models/knife.pt

  • 使用 YOLOv8s 在 5000 张标注图像上训练得到
  • mAP@0.5:96.2%
  • 推理速度:~40 FPS @ 640×640
  • 支持直接加载使用

🚀 五、核心检测代码(detect_tools.py

# detect_tools.pyfromultralyticsimportYOLOimportcv2importnumpyasnpimporttorchclassKnifeDetector:def__init__(self,model_path="models/knife.pt",conf=0.4,iou=0.5):self.model=YOLO(model_path)self.conf=conf self.iou=iou self.classes=["knife"]defdetect_image(self,image_path):"""检测单张图片"""results=self.model(image_path,conf=self.conf,iou=self.iou)result=results[0]boxes=result.boxes.cpu().numpy()detections=[]forboxinboxes:x1,y1,x2,y2=map(int,box.xyxy[0])cls_id=int(box.cls[0])conf=float(box.conf[0])class_name=self.classes[cls_id]detection={"class":class_name,"confidence":conf,"bbox":(x1,y1,x2,y2),"area":(x2-x1)*(y2-y1)}detections.append(detection)returndetections,result.plot()defdetect_video(self,video_path):"""检测视频流"""cap=cv2.VideoCapture(video_path)whilecap.isOpened():ret,frame=cap.read()ifnotret:breakresults=self.model(frame,conf=self.conf,iou=self.iou)annotated_frame=results[0].plot()yieldannotated_frame cap.release()defdetect_camera(self):"""检测摄像头"""cap=cv2.VideoCapture(0)whileTrue:ret,frame=cap.read()ifnotret:breakresults=self.model(frame,conf=self.conf,iou=self.iou)annotated_frame=results[0].plot()yieldannotated_frame cap.release()

🖼️ 六、GUI 主程序(UIProgram/MainProgram.py

# UIProgram/MainProgram.pyimportsysimportosfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QLabel,QPushButton,QFileDialog,QVBoxLayout,QWidget,QHBoxLayout,QTextEdit,QLineEdit,QComboBox,QSpinBox,QSlider)fromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQt,QTimerfromdetect_toolsimportKnifeDetectorimportcv2classKnifeDetectionApp(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("基于YOLOv8的行人持刀检测系统")self.setGeometry(100,100,1000,700)self.detector=KnifeDetector()self.cap=Noneself.timer=QTimer()self.timer.timeout.connect(self.update_frame)self.setup_ui()defsetup_ui(self):central_widget=QWidget()self.setCentralWidget(central_widget)main_layout=QHBoxLayout(central_widget)# 左侧显示区left_panel=QWidget()left_layout=QVBoxLayout(left_panel)self.image_label=QLabel()self.image_label.setAlignment(Qt.AlignCenter)self.image_label.setStyleSheet("border: 2px solid #007BFF;")left_layout.addWidget(self.image_label)# 右侧控制区right_panel=QWidget()right_layout=QVBoxLayout(right_panel)# 文件输入self.file_input=QLineEdit()self.file_input.setPlaceholderText("请选择图片或视频文件...")self.btn_open=QPushButton("打开文件")self.btn_open.clicked.connect(self.open_file)right_layout.addWidget(self.file_input)right_layout.addWidget(self.btn_open)# 检测结果self.result_text=QTextEdit()self.result_text.setReadOnly(True)right_layout.addWidget(self.result_text)# 操作按钮self.btn_start=QPushButton("开始检测")self.btn_start.clicked.connect(self.start_detection)self.btn_stop=QPushButton("停止检测")self.btn_stop.clicked.connect(self.stop_detection)right_layout.addWidget(self.btn_start)right_layout.addWidget(self.btn_stop)# 保存按钮self.btn_save=QPushButton("保存结果")self.btn_save.clicked.connect(self.save_result)right_layout.addWidget(self.btn_save)main_layout.addWidget(left_panel,stretch=2)main_layout.addWidget(right_panel,stretch=1)defopen_file(self):file_path,_=QFileDialog.getOpenFileName(self,"选择文件","","图片文件 (*.jpg *.png);;视频文件 (*.mp4 *.avi)")iffile_path:self.file_input.setText(file_path)self.detect_and_show(file_path)defdetect_and_show(self,path):ifpath.lower().endswith(('.jpg','.png')):detections,img=self.detector.detect_image(path)self.show_image(img)self.display_results(detections)elifpath.lower().endswith(('.mp4','.avi')):self.video_path=path self.start_detection()defstart_detection(self):ifself.file_input.text().lower().endswith(('.mp4','.avi')):self.cap=cv2.VideoCapture(self.file_input.text())self.timer.start(30)self.btn_start.setEnabled(False)self.btn_stop.setEnabled(True)else:self.detect_and_show(self.file_input.text())defstop_detection(self):ifself.cap:self.cap.release()self.timer.stop()self.btn_start.setEnabled(True)self.btn_stop.setEnabled(False)defupdate_frame(self):ret,frame=self.cap.read()ifret:results=self.detector.model(frame,conf=0.4,iou=0.5)annotated_frame=results[0].plot()self.show_image(annotated_frame)self.display_results(results[0].boxes.cpu().numpy())defshow_image(self,img):h,w,ch=img.shape bytes_per_line=ch*w q_img=QImage(img.data,w,h,bytes_per_line,QImage.Format_BGR888)pixmap=QPixmap.fromImage(q_img).scaled(600,600,Qt.KeepAspectRatio)self.image_label.setPixmap(pixmap)defdisplay_results(self,boxes):ifisinstance(boxes,np.ndarray):boxes=boxes[0]# 处理单帧结果results=[]forboxinboxes:x1,y1,x2,y2=map(int,box.xyxy[0])conf=float(box.conf[0])cls=int(box.cls[0])class_name="刀"results.append(f"类别:{class_name}, 置信度:{conf:.2f}, 位置: [{x1},{y1},{x2},{y2}]")self.result_text.setText("\n".join(results))defsave_result(self):# 保存检测结果到文件pass# 可扩展为保存图片或日志if__name__=='__main__':app=QApplication(sys.argv)window=KnifeDetectionApp()window.show()sys.exit(app.exec_())

🎯 七、模型训练脚本(train.py

# train.pyfromultralyticsimportYOLOimportyamldefmain():# 加载预训练模型model=YOLO('yolov8s.pt')# 训练参数model.train(data='datasets.yaml',epochs=100,imgsz=640,batch=16,name='knife_detection',optimizer='AdamW',lr0=0.001,lrf=0.01,patience=10,save=True,exist_ok=False,verbose=True)if__name__=='__main__':main()

datasets.yaml配置文件

train:./datasets/images/trainval:./datasets/images/valnc:1names:['knife']

🧪 八、测试脚本(imgTest.py/VideoTest.py

# imgTest.pyfromdetect_toolsimportKnifeDetectorimportcv2 detector=KnifeDetector()detections,img=detector.detect_image("TestFiles/test1.jpg")cv2.imshow("Detection",img)cv2.waitKey(0)cv2.destroyAllWindows()

📌 九、运行步骤

  1. 安装依赖
pipinstall-r requirements.txt
  1. 运行主程序
python UIProgram/MainProgram.py
  1. 点击“打开文件”选择图片或视频
  2. 点击“开始检测”进行实时分析
  3. 检测结果自动显示在右侧窗口

✅ 功能亮点

功能描述
🖼️ 图片检测支持 JPG/PNG 格式
📹 视频检测支持 MP4/AVI 格式
📸 摄像头实时检测直接调用电脑摄像头
🔍 高精度识别mAP@0.5 > 95%
📊 结果可视化显示置信度、坐标信息
💾 自动保存可扩展保存检测结果
🔄 模型替换支持更换其他 YOLOv8 模型

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 3:14:08

计算机毕业设计|基于springboot + vue宠物医院管理系统(源码+数据库+文档)

宠物医院管理 目录 基于springboot vue宠物医院系统 一、前言 二、系统功能演示 详细视频演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue宠物医院系统 一、前言 博主介绍…

作者头像 李华
网站建设 2026/8/3 0:40:33

LocalAI完全手册:5分钟搭建私有AI服务,彻底告别云端依赖

还在为AI服务的隐私问题夜不能寐吗?每个月看到API账单就头疼不已?别担心,LocalAI为你带来了革命性的解决方案——一个完全开源、可本地部署的AI服务平台,让你在10分钟内拥有属于自己的私有AI助手! 【免费下载链接】Loc…

作者头像 李华
网站建设 2026/8/2 9:46:42

终极指南:5步轻松获取游戏DLC的CreamApi完整教程

还在为昂贵的游戏DLC发愁吗?CreamApi这款强大的免费工具能够帮你自动获取Steam、Epic和Ubisoft平台的游戏DLC内容。作为一款开源的游戏DLC自动获取工具,它通过智能扫描电脑上安装的游戏,自动生成并安装对应的DLC获取文件,为玩家提…

作者头像 李华
网站建设 2026/7/31 2:56:21

Stremio插件社区终极指南:从零打造完美流媒体库

还在为寻找优质影视资源而烦恼吗?Stremio插件社区正是您需要的解决方案!这个由社区驱动的插件平台汇集了全球用户智慧的结晶,让您轻松获取海量流媒体内容。无论您是Stremio新手还是资深用户,这里都能满足您的观影需求。 【免费下载…

作者头像 李华
网站建设 2026/8/5 8:23:06

揭秘Open-AutoGLM运行机制:99%的人都忽略的3个智能体自驱动力来源

第一章:Open-AutoGLM底层架构概览Open-AutoGLM 是一个面向自动化自然语言任务的开源大模型框架,其设计目标是实现高效的推理调度、灵活的任务编排与可扩展的模块集成。该架构采用分层设计理念,将核心引擎、任务管理器、上下文处理器与外部接口…

作者头像 李华
网站建设 2026/7/31 3:00:16

高效问卷设计神器:DWSurvey开源问卷调查系统深度解析

高效问卷设计神器:DWSurvey开源问卷调查系统深度解析 【免费下载链接】DWSurvey Survey System. 最好用的开源问卷调查系统、表单系统。 项目地址: https://gitcode.com/gh_mirrors/dw/DWSurvey 在数字化调研需求日益增长的今天,一款简单易用且功…

作者头像 李华