基于YOLOV5和PYQT5的智慧工地检测系统
数据集获取:工地环境复杂多变,获取大规模标注数据困难。 复杂场景:工地环境中存在遮挭、光照变化等问题,影响目标检测准确性。 实时性要求:系统需在保证准确性的同时,满足实时监测需求。 硬件资源限制:在大规模工地部署时,面临硬件资源和成本限制。 系统集成:将算法与界面设计相结合,确保系统稳定性和功能完整性。 工地安全管理:系统可监测潜在安全隐患,如未佩戴安全帽等,并及时发出警报,降低事故发生率。 效率提升:减少人工巡检工作量,实时反馈工地状态,提升管理效率。 数据分析:收集并分析工地数据,为管理决策提供支持。 远程监控:实现远程监控功能,便于管理人员随时掌握工地情况。 实时时间显示:系统自动显示当前北京时间。 多种检测模式:支持安全帽检测、反光背心检测和火灾检测三种模型。 可调节参数:用户可调节置信度和iou值,优化检测效果。 提示器区域:显示报警时间、类型和相关信息。 多种检测方式:支持图片检测、视频检测和摄像头检测,左右分屏显示原始和检测结果。 数据下载:检测完成后,可下载检测图片或报警数据。 报警处理:系统自动记录报警信息,并可通过下载按钮获取详细数据。
发布日期:2025-06-18 17:30:47
浏览次数:3
分类:精选文章
本文共 5201 字,大约阅读时间需要 17 分钟。
基于YOLOv5和PyQt5的智慧工地检测系统
一、背景
智慧工地检测系统是一种结合计算机视觉和人工智能技术的智能化监控系统。该系统基于YOLOv5目标检测算法和PyQt5图形用户界面库,能够实时监测和识别工地场景中的目标,如工人是否佩戴安全帽、穿防护服等,并提供相应的告警和管理功能。
传统工地管理依赖大量人工巡检,存在监控范围有限、效率低下等问题。为了提升监控智能化水平,基于YOLOv5和PyQt5的智慧工地检测系统应运而生。YOLOv5算法凭借其高效性和准确性,适合处理工地复杂场景,而PyQt5则为系统提供了直观的用户界面,便于管理和配置。
系统通过摄像头获取实时视频流,对场景进行分析,检测违规行为并发出警报。例如,检测到未佩戴安全帽或穿反光背心等安全隐患时,系统会及时提醒相关人员采取措施,预防事故发生。
二、挑战与动机
尽管系统具备诸多优势,但仍面临诸多挑战,同时也具有显著的应用价值。
挑战:
动机:
三、界面与功能
系统界面简洁直观,功能涵盖多种检测模式和数据管理。主要功能包括:
四、主要代码
(1)切换检测模型
def selectionChanged(self, index): select_weight = self.comboBox.itemText(index) if select_weight == '安全帽检测': self.model = torch.hub.load("./", "custom", path="runs/train/exp3/weights/helmet_head_person_s.pt", source="local") self.weight = "det_helmet" elif select_weight == '反光背心检测': self.model = torch.hub.load("./", "custom", path="runs/train/reflect_clothes.pt", source="local") self.weight = "det_reflect_clothes" elif select_weight == '火灾检测': self.model = torch.hub.load("./", "custom", path="runs/train/det_fire.pt", source="local") self.weight = "det_fire" (2)图片检测
def image_pred(self, file_path): results = self.model(file_path) image = results.render()[0] self.judge(results) return convert2QImage(image)
(3)视频检测
def video_pred(self): ret, frame = self.video.read() if not ret: self.timer.stop() else: frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) self.input.setPixmap(QPixmap.fromImage(convert2QImage(frame))) self.results = self.model(frame) image = self.results.render()[0] self.output.setPixmap(QPixmap.fromImage(convert2QImage(image))) return self.judge(self.results)
(4)摄像头检测
def open_camera(self): self.video = cv2.VideoCapture(0) self.timer.start()
(5)判断报警类型
def judge(self, result): alarm = None person_count = 0 helmet_count = 0 preds = result.pandas().xyxy[0] self.current_time = datetime.now() formatted_datetime = self.current_time.strftime("%Y-%m-%d %H:%M:%S") labels = preds.values if self.weight == 'det_helmet': for label in labels: if label[6] == 'person': person_count += 1 if label[6] == 'helmet': helmet_count += 1 self.textBrowser.append(f"人数为:{person_count}") self.textBrowser.append(f"头盔个数为:{helmet_count}") if helmet_count < person_count: alarm = "没佩戴头盔!" if self.weight == 'det_reflect_clothes': for label in labels: if label[6] != 'reflective_clothes': alarm = "没穿戴反光背心!" if self.weight == 'det_fire': for label in labels: if label[6] == 'fire': alarm = "检测到火焰!" self.textBrowser.append(formatted_datetime) self.textBrowser.append(f"警告:{alarm}") if alarm is not None: self.record(alarm) (6)记录报警
def record(self, type): with open('Attendance.csv', 'r+') as f: myDatalist = f.readlines() List = [] for line in myDatalist: entry = line.split(',') List.append(entry[0]) current_time = datetime.now() dtString = current_time.strftime("%Y-%m-%d %H:%M:%S") f.writelines(f'{type},{dtString}') f.write('\n') alarm_thread = threading.Thread(target=self.sound_alarm) alarm_thread.start() (7)下载数据
def Download_data(self): source_file_path = "Attendance.csv" save_path, _ = QFileDialog.getSaveFileName(self, "Save File", "", "CSV Files (*.csv)") if save_path: try: shutil.copyfile(source_file_path, save_path) self.textBrowser.append("报警数据下载成功!") except Exception as e: print("Error while downloading file:", str(e)) else: print("No save path selected.") (8)信号绑定
def bind_slots(self): self.det_image.clicked.connect(self.open_image) self.det_video.clicked.connect(self.open_video) self.det_camera.clicked.connect(self.open_camera) self.comboBox.currentIndexChanged.connect(self.selectionChanged) self.dL_data.clicked.connect(self.Download_data) self.download.clicked.connect(self.Download_image) self.slider.valueChanged.connect(self.Conf_change) self.Iou_Slider.valueChanged.connect(self.Conf_change) self.timer.timeout.connect(self.video_pred)
五、实验效果
通过实验验证了系统在不同检测场景下的表现。
(1)模型选择
系统支持安全帽检测、反光背心检测和火灾检测三种模型,用户可根据需求切换。(2)图片检测
- 安全帽检测:系统能准确识别佩戴安全帽的工人,报警机制有效。
- 反光背心检测:在复杂背景下也能识别反光背心,具有一定鲁棒性。
- 火焰检测:实验视频显示了系统对火焰的及时检测和报警。
(3)摄像头检测
系统调用笔记本摄像头进行测试,取得了初步效果,但由于设备性能限制存在一定卡顿。(4)视频检测
实验视频显示系统能有效检测火焰,但在低性能设备上存在帧率不均衡的问题。(5)报警数据下载
系统支持报警数据下载,数据格式清晰,便于分析和管理。六、小结
基于YOLOv5和PyQt5的智慧工地检测系统实现了多种场景下的智能监测功能,具有较高的实用价值。然而,系统仍存在一些不足之处,例如报警数据处理的简化、安全帽检测易受遮挡影响、视频检测性能有限等。这些问题需要在实际应用中进一步优化和解决。
本系统是个人计算机视觉课程项目的一部分,旨在通过动手实践加深对技术的理解。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2026年06月08日 11时31分12秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!