本文共 5201 字,大约阅读时间需要 17 分钟。
智慧工地检测系统是一种结合计算机视觉和人工智能技术的智能化监控系统。该系统基于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的智慧工地检测系统实现了多种场景下的智能监测功能,具有较高的实用价值。然而,系统仍存在一些不足之处,例如报警数据处理的简化、安全帽检测易受遮挡影响、视频检测性能有限等。这些问题需要在实际应用中进一步优化和解决。
本系统是个人计算机视觉课程项目的一部分,旨在通过动手实践加深对技术的理解。
转载地址:http://czgfk.baihongyu.com/