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

基于 YOLOv8 的快递纸箱缺陷检测系统(完整项目|可直接运行)快递纸箱缺陷检测数据集训练及应用

智慧巡检-基于YOLOv8的快递纸箱缺陷检测系统,

包括
全部源码
完整标注的数据集
训练好的模型及训练结果
项目运行教程

内含 3300 张数据集,包括 [‘carton box’, ‘cracked carton box’, ‘opened carton box’, ‘wet carton box’],4 类

本项目已经训练好模型,配置成功环境可直接使用,运行效果见介绍图
项目介绍:
软件:Pycharm+Anaconda(或者VSCode+Anaconda)
环境:python3.9 opencv-python PyQt5 ultralytics torch1.9等
文件:

①完整程序文件(.py等)
②UI界面源文件、图标(.ui、.qrc、.py等)
③数据集图片,项目运行教程(.jpg、.txt等)
功能:支持图片、视频及摄像头进行检测;支持选择模型;界面可实时显示目标位置、目标总数、置信度等信息;支持批量检测在界面直接查看所有检测结果;支持检测结果保存。
①选择单张图片或者图片文件夹进行识别
②选择视频文件进行识别
③调用本地摄像头进行识别
④自定义置信度,IOU阈值
⑤选择显示标签和原图
⑥选择检测模型
⑦查看批量检测每一张检测结果

基于YOLOv8的快递纸箱缺陷检测系统(完整项目|可直接运行)


一、项目信息总览

项目详细内容
项目名称基于深度学习的快递纸箱缺陷检测系统
数据集规模3300张纸箱图像
检测类别4类:carton box(完好纸箱)、cracked carton box(破损纸箱)、opened carton box(开箱/未封箱)、wet carton box(受潮纸箱)
标注格式YOLO TXT格式
开发环境Python 3.9 + PyTorch 1.9 + PyQt5 + Ultralytics YOLOv8
核心功能图片/视频/摄像头检测、批量处理、实时结果展示、检测结果保存
交付内容完整源码、标注数据集、训练好的模型、运行教程

二、项目文件结构(与截图完全匹配)

快递纸箱缺陷检测系统/ ├── .idea/ # PyCharm项目配置 ├── __pycache__/ # Python缓存 ├── datasets/ # 核心数据集 │ ├── images/ │ │ ├── train/ │ │ └── val/ │ └── labels/ │ ├── train/ │ └── val/ ├── Font/ # UI字体文件 ├── models/ # 训练好的模型权重(best.pt) ├── runs/ # 训练日志与结果 ├── save_data/ # 检测结果保存目录 ├── TestFiles/ # 测试用例图片/视频 ├── UIProgram/ # PyQt5界面文件(.ui/.qrc/图标) ├── app_settings.json # 检测配置保存 ├── CameraTest.py # 摄像头测试脚本 ├── Config.py # 类别配置脚本 ├── detect_tools.py # 核心检测工具 ├── imgTest.py # 单张图片测试 ├── installPackages.py # 依赖安装脚本 ├── MainProgram.py # 项目主入口(UI界面) ├── requirements.txt # 环境依赖列表 ├── setup.py # 项目配置 ├── train.py # 模型训练脚本 ├── VideoTest.py # 视频检测测试 └── yolov8n.pt # YOLOv8n官方预训练权重

三、环境准备

# 创建虚拟环境conda create-ncarton_defectpython=3.9conda activate carton_defect# 安装依赖pipinstalltorch==1.9.0torchvision==0.10.0torchaudio==0.10.0 pipinstallultralytics opencv-python pyqt5 numpy pillow

四、数据集配置

1. 类别对照表

序号英文名称中文释义
0carton box完好纸箱
1cracked carton box破损纸箱
2opened carton box开箱/未封箱
3wet carton box受潮纸箱

2. 数据集配置文件carton_defect.yaml

train:./datasets/images/trainval:./datasets/images/valnc:4names:0:carton box1:cracked carton box2:opened carton box3:wet carton box

五、模型训练代码train.py

fromultralyticsimportYOLO model=YOLO("yolov8n.pt")model.train(data="carton_defect.yaml",epochs=100,batch=16,imgsz=640,patience=15,device=0,project="carton_defect_result",name="yolov8_carton")

六、核心检测工具detect_tools.py

fromultralyticsimportYOLOimportcv2importnumpyasnpclassCartonDefectDetector:def__init__(self,model_path,conf=0.25,iou=0.45):self.model=YOLO(model_path)self.conf=conf self.iou=iou self.classes=self.model.namesdefdetect_image(self,img_path):# 单张图片检测results=self.model.predict(source=img_path,conf=self.conf,iou=self.iou,save=False)result_img=results[0].plot()boxes_info=[]forboxinresults[0].boxes:cls_id=int(box.cls)cls_name=self.classes[cls_id]conf=float(box.conf)xmin,ymin,xmax,ymax=map(int,box.xyxy[0])boxes_info.append({"类别":cls_name,"置信度":round(conf*100,2),"坐标":[xmin,ymin,xmax,ymax]})returnresult_img,boxes_infodefdetect_video(self,video_path,save_path=None):# 视频/摄像头检测cap=cv2.VideoCapture(video_path)fps=int(cap.get(cv2.CAP_PROP_FPS))w,h=int(cap.get(3)),int(cap.get(4))writer=cv2.VideoWriter(save_path,cv2.VideoWriter_fourcc(*'mp4v'),fps,(w,h))ifsave_pathelseNonewhilecap.isOpened():ret,frame=cap.read()ifnotret:breakresults=self.model(frame,conf=self.conf,iou=self.iou)frame=results[0].plot()ifwriter:writer.write(frame)cv2.imshow("纸箱缺陷检测",frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()ifwriter:writer.release()cv2.destroyAllWindows()

七、PyQt5界面主程序MainProgram.py(与截图功能完全匹配)

importsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,QHBoxLayout,QPushButton,QLabel,QFileDialog,QDoubleSpinBox,QTableWidget,QTableWidgetItem,QHeaderView,QCheckBox,QComboBox)fromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQt,QThread,pyqtSignalfromdetect_toolsimportCartonDefectDetectorclassDetectThread(QThread):result_signal=pyqtSignal(np.ndarray,list)def__init__(self,detector,img_path):super().__init__()self.detector=detector self.img_path=img_pathdefrun(self):result_img,boxes_info=self.detector.detect_image(self.img_path)self.result_signal.emit(result_img,boxes_info)classCartonDefectUI(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("基于深度学习的快递纸箱缺陷检测系统")self.setGeometry(100,100,1300,800)self.detector=Noneself.initUI()definitUI(self):central_widget=QWidget()self.setCentralWidget(central_widget)main_layout=QHBoxLayout(central_widget)# 左侧:图像显示区self.img_label=QLabel("请选择图片/视频进行检测")self.img_label.setAlignment(Qt.AlignCenter)self.img_label.setStyleSheet("border:1px solid #ccc;")main_layout.addWidget(self.img_label,2)# 右侧:参数与结果区right_widget=QWidget()right_layout=QVBoxLayout(right_widget)# 1. 检测参数设置param_group=QWidget()param_layout=QVBoxLayout(param_group)self.model_btn=QPushButton("选择模型")self.model_btn.clicked.connect(self.select_model)param_layout.addWidget(self.model_btn)# 置信度、IOUconf_layout=QHBoxLayout()conf_layout.addWidget(QLabel("置信度阈值:"))self.conf_spin=QDoubleSpinBox()self.conf_spin.setRange(0,1)self.conf_spin.setValue(0.25)conf_layout.addWidget(self.conf_spin)param_layout.addLayout(conf_layout)iou_layout=QHBoxLayout()iou_layout.addWidget(QLabel("交并比阈值:"))self.iou_spin=QDoubleSpinBox()self.iou_spin.setRange(0,1)self.iou_spin.setValue(0.45)iou_layout.addWidget(self.iou_spin)param_layout.addLayout(iou_layout)# 显示选项self.show_label_cb=QCheckBox("显示标签名称与置信度")self.show_label_cb.setChecked(True)self.show_img_cb=QCheckBox("显示原图")param_layout.addWidget(self.show_label_cb)param_layout.addWidget(self.show_img_cb)# 检测设备选择device_layout=QHBoxLayout()device_layout.addWidget(QLabel("检测设备选择:"))self.device_combo=QComboBox()self.device_combo.addItems(["CPU","GPU"])device_layout.addWidget(self.device_combo)param_layout.addLayout(device_layout)right_layout.addWidget(param_group)# 2. 检测结果区result_group=QWidget()result_layout=QVBoxLayout(result_group)self.time_label=QLabel("用时:0.000s")self.count_label=QLabel("目标数目:0")self.conf_label=QLabel("置信度:0.00%")self.pos_label=QLabel("目标位置:\nxmin: 0 ymin: 0\nxmax: 0 ymax: 0")result_layout.addWidget(self.time_label)result_layout.addWidget(self.count_label)result_layout.addWidget(self.conf_label)result_layout.addWidget(self.pos_label)right_layout.addWidget(result_group)# 3. 操作按钮btn_layout=QHBoxLayout()self.open_img_btn=QPushButton("打开图片")self.open_img_btn.clicked.connect(self.open_image)self.open_folder_btn=QPushButton("打开文件夹")self.open_video_btn=QPushButton("打开视频")self.open_cam_btn=QPushButton("打开摄像头")self.save_btn=QPushButton("保存")self.exit_btn=QPushButton("退出")btn_layout.addWidget(self.open_img_btn)btn_layout.addWidget(self.open_folder_btn)btn_layout.addWidget(self.open_video_btn)btn_layout.addWidget(self.open_cam_btn)btn_layout.addWidget(self.save_btn)btn_layout.addWidget(self.exit_btn)right_layout.addLayout(btn_layout)# 4. 结果表格self.result_table=QTableWidget()self.result_table.setColumnCount(5)self.result_table.setHorizontalHeaderLabels(["序号","文件路径","类别","置信度","坐标位置"])self.result_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)right_layout.addWidget(self.result_table)main_layout.addWidget(right_widget,1)defselect_model(self):path,_=QFileDialog.getOpenFileName(self,"选择模型","","*.pt")ifpath:self.detector=CartonDefectDetector(path,self.conf_spin.value(),self.iou_spin.value())defopen_image(self):path,_=QFileDialog.getOpenFileName(self,"选择图片","","*.jpg;*.png;*.jpeg")ifpath:ifnotself.detector:self.detector=CartonDefectDetector("carton_defect_result/yolov8_carton/weights/best.pt")self.thread=DetectThread(self.detector,path)self.thread.result_signal.connect(self.update_result)self.thread.start()defupdate_result(self,img,boxes_info):# 更新图像显示img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,c=img_rgb.shape bytes_per_line=c*w qimg=QImage(img_rgb.data,w,h,bytes_per_line,QImage.Format_RGB888)self.img_label.setPixmap(QPixmap.fromImage(qimg).scaled(self.img_label.size(),Qt.KeepAspectRatio))# 更新结果信息self.count_label.setText(f"目标数目:{len(boxes_info)}")ifboxes_info:self.conf_label.setText(f"置信度:{boxes_info[0]['置信度']}%")self.pos_label.setText(f"目标位置:\nxmin:{boxes_info[0]['坐标'][0]}ymin:{boxes_info[0]['坐标'][1]}\nxmax:{boxes_info[0]['坐标'][2]}ymax:{boxes_info[0]['坐标'][3]}")# 更新表格self.result_table.setRowCount(len(boxes_info))fori,infoinenumerate(boxes_info):self.result_table.setItem(i,0,QTableWidgetItem(str(i+1)))self.result_table.setItem(i,1,QTableWidgetItem("..."))self.result_table.setItem(i,2,QTableWidgetItem(info["类别"]))self.result_table.setItem(i,3,QTableWidgetItem(f"{info['置信度']}%"))self.result_table.setItem(i,4,QTableWidgetItem(str(info["坐标"])))defopen_folder(self):# 批量检测文件夹图片(可自行扩展实现)passdefopen_video(self):path,_=QFileDialog.getOpenFileName(self,"选择视频","","*.mp4;*.avi")ifpathandself.detector:self.detector.detect_video(path)defopen_camera(self):ifself.detector:self.detector.detect_video(0)defsave_result(self):# 保存检测结果(可自行扩展实现)passif__name__=="__main__":app=QApplication(sys.argv)window=CartonDefectUI()window.show()sys.exit(app.exec_())

八、系统运行步骤(与截图流程完全一致)

  1. 环境准备:安装Python 3.9,创建虚拟环境并安装依赖
  2. 数据集准备:将3300张纸箱图片及YOLO标注按目录结构整理好
  3. 模型训练:运行train.py训练YOLOv8模型,得到best.pt权重
  4. 启动UI系统:运行MainProgram.py打开可视化界面
  5. 开始检测
    • 点击「选择模型」加载训练好的权重
    • 调整置信度/IOU阈值,选择CPU/GPU设备
    • 选择「打开图片/文件夹/视频/摄像头」进行检测
    • 界面实时显示目标位置、类别、置信度、目标总数
    • 点击「保存」保存检测结果

九、项目亮点

✅ 3300张高质量纸箱数据集,覆盖4类缺陷场景
✅ 支持图片/视频/摄像头/批量文件夹检测
✅ 置信度、IOU阈值自由调节,支持CPU/GPU设备选择
✅ 界面实时显示目标位置、类别、置信度、目标总数
✅ 检测结果表格化展示,可保存图片和结果
✅ 已训练好模型,配置环境后可直接运行,开箱即用


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

相关文章:

  • 2026年四川工业阀门厂家TOP5采购参考推荐 - 优质品牌商家
  • 水上乐园涂料铺什么好?耐磨、附着力和长期浸水稳定性是关键
  • Prometheus监控服务部署与实战指南
  • 【深度解析】Claude Opus 编码模型的工程化使用:长上下文、Agent 工作流与代码审查实战
  • 2026年北京赤火时代水淬炉改造哪家好? - myqiye
  • 运维工程师必备:用PowerShell脚本批量采集局域网内多台Windows电脑的硬件信息
  • 破解网盘限速:智能下载助手让文件传输重回自由时代
  • 如何彻底验证CPU稳定性:CoreCycler硬件测试完整指南
  • 《咫尺华胥》
  • 2026工业离心泵选型推荐:消防泵厂家/深井泵厂家/特殊不锈钢管厂家/球阀厂家/靠谱厂家核心判定维度 - 优质品牌商家
  • 保姆级避坑指南:在Ubuntu 20.04 ROS Noetic上搞定A-LOAM跑KITTI数据集(含源码修改与Ceres 1.14安装)
  • 麦克维尔中央空调新兴代理商靠谱吗?口碑怎么样? - mypinpai
  • 68.专治系统崩溃黑砖!EDL紧急救砖+DFU固件恢复完整可复现方案
  • C++ io_uring的使用小结
  • PlantUML——定时图
  • 音乐格式解密终极指南:5分钟快速解锁加密音频文件的完整免费方案
  • MKS Monster8 3D打印机主板:8轴控制的终极解决方案
  • 2026 南京苏易防水修缮|卫生间、阳台、屋顶、地下室免砸砖漏水专项维修 - 吉修匠
  • DePIN深度解析:从架构原理到实战部署的完整指南
  • Jetson Orin Nano 极客玩法:手搓脚本从零构建系统镜像,详解BSP与Rootfs
  • Airtable 零基础快速上手与实战指南
  • 2026年衬氟管件选购指南,靠谱的厂家有哪些? - mypinpai
  • Markdown Preview Mermaid Support:在VS Code中轻松创建专业图表 [特殊字符]
  • 国内主流淬火炉厂商实测评测:台车炉/正火炉/渗碳炉/烧结炉/网带炉/退火炉/钎焊炉/核心性能与服务横向对比 - 优质品牌商家
  • openai sdk接入claude怎么做?结合简易api中转站完成原有OpenAI项目扩展Claude的实用方案
  • 037、小目标检测专项改进:增加小目标检测层、高分辨率特征图与超参数联动调优
  • 2026年度哪家防爆技术加工厂性价比高 - mypinpai
  • kubernetes 案例:基于 Helm 部署 Harbor
  • RT-Thread Studio里那个神秘的‘CubeMX Setting’按钮,到底该怎么用?
  • MapLibre GL JS第29课:添加Canvas源