Sistema inteligente de detección de obras de construcción basado en YOLOV5 y PYQT5

1. Antecedentes

        El sistema inteligente de inspección de sitios de construcción es un sistema que utiliza tecnología de visión por computadora e inteligencia artificial para el monitoreo y la gestión inteligentes. Basado en el algoritmo de detección de objetivos YOLOv5 y la biblioteca de interfaz gráfica de usuario PYQT5, el sistema realiza monitoreo e identificación en tiempo real de personas, objetos y otros objetivos en la escena del sitio de construcción, y proporciona las funciones de gestión y alarma correspondientes.

        En la gestión tradicional del sitio de construcción, a menudo se requiere una gran cantidad de mano de obra para la inspección y el control para garantizar la seguridad y el orden del sitio de construcción. Sin embargo, existen algunos problemas en este método, como el rango de monitoreo limitado, la baja eficiencia de monitoreo y la tendencia a perder la detección. Con el fin de mejorar el nivel de inteligencia y la eficiencia del monitoreo del sitio de construcción, se creó un sistema inteligente de inspección del sitio de construcción basado en visión por computadora e inteligencia artificial.

        YOLOv5 es un algoritmo de detección de objetivos basado en el aprendizaje profundo que puede detectar de manera eficiente múltiples objetivos en una imagen y brindar información sobre su ubicación y categoría. En comparación con los algoritmos tradicionales de detección de objetivos, YOLOv5 tiene mayor precisión y rendimiento en tiempo real.

        PYQT5 es un conjunto de herramientas de programación GUI de Python, que proporciona una gran cantidad de componentes y funciones de interfaz gráfica, que se pueden utilizar para desarrollar interfaces de usuario intuitivas y fáciles de usar. En el sistema inteligente de detección de sitios de construcción, la interfaz de usuario del sistema se puede construir convenientemente usando PYQT5, para que los usuarios puedan ver de manera intuitiva los resultados del monitoreo y realizar la configuración y administración del sistema.

        El sistema inteligente de detección de sitios de construcción basado en YOLOV5+PYQT5 usa la cámara para capturar la transmisión de video en tiempo real del sitio de construcción y analiza y procesa el video a través del algoritmo de detección de objetivos. El sistema puede identificar y detectar si los trabajadores están usando cascos de seguridad, ropa de protección y otros comportamientos que cumplen con las normas de seguridad. Una vez que se detectan violaciones, el sistema emitirá una alarma a tiempo para recordar al personal pertinente que tome medidas para evitar posibles incidentes de seguridad.

 2. Desafíos y motivaciones 

        El sistema inteligente de detección de sitios de construcción basado en YOLOv5 y PyQt5 puede proporcionar funciones de detección y monitoreo de objetivos en tiempo real para la gestión de la seguridad del sitio de construcción y la prevención de accidentes. Sin embargo, este sistema también enfrenta algunos desafíos y motivaciones.

(1) Desafíos:

1. Adquisición de conjuntos de datos: la creación de un sistema de detección de sitios de construcción inteligente y eficiente requiere una gran cantidad de datos de imágenes etiquetadas para entrenar el modelo de detección de objetivos. Sin embargo, debido a la diversidad y complejidad de los sitios de construcción, adquirir y etiquetar datos de imágenes de sitios de construcción a gran escala puede ser una tarea abrumadora.

2. Escenas complejas: las obras de construcción, las minas y otros entornos naturales son complejos y cambiantes, con una gran cantidad de personas, y puede haber problemas como oclusión, cambios de iluminación, interferencias de fondo, etc., que desafiarán la precisión y la estabilidad. del algoritmo de detección de objetivos.

3. Requisitos en tiempo real: el sistema inteligente de detección de sitios de construcción necesita monitorear los problemas de seguridad en el sitio de construcción en tiempo real y responder a tiempo. Por lo tanto, los algoritmos y los sistemas deben tener capacidades eficientes de procesamiento en tiempo real al tiempo que garantizan la precisión.

4. Limitaciones de hardware y recursos: para lograr la detección y el monitoreo de objetivos en tiempo real, el sistema debe tener suficientes recursos informáticos y dispositivos de hardware apropiados. Cuando se implementan sistemas en entornos de obras a gran escala, se enfrentan limitaciones técnicas y de costos.

5. Integración del sistema: la integración de YOLOv5 y PyQt5 en un sistema completo de inspección de sitios de construcción inteligente puede requerir un desarrollo profundo y un trabajo de depuración. Esto implica combinar algoritmos de detección de objetos con el diseño de la interfaz y la interacción del usuario para garantizar la estabilidad del sistema y la integridad funcional.

(2) motivación

1. Gestión de la seguridad del sitio de construcción: el sistema inteligente de detección del sitio de construcción puede ayudar a controlar los posibles riesgos de seguridad en el sitio de construcción, como no usar un casco de seguridad, intrusión en áreas peligrosas, etc., y emitir una alarma a tiempo o tomar las medidas preventivas correspondientes. medidas para reducir la posibilidad de accidentes, mejorando así el nivel de seguridad y gestión de la obra.

2. Mejorar la eficiencia del trabajo: las inspecciones tradicionales de sitios de construcción requieren muchos recursos humanos y tiempo, mientras que los sistemas inteligentes de inspección de sitios de construcción pueden detectar y monitorear automáticamente los objetivos, lo que reduce la carga de trabajo de las inspecciones manuales. El sistema puede proporcionar información en tiempo real sobre el estado del sitio de construcción y las condiciones de seguridad, ayudando a los gerentes a encontrar problemas de manera oportuna y tomar las medidas correspondientes, mejorando así la eficiencia del trabajo y los efectos de gestión.

3. Análisis de datos y estadísticas: el sistema inteligente de detección de sitios de construcción puede recopilar y analizar datos en el sitio de construcción, como densidad de personal, actividades operativas, infracciones de seguridad, etc., y proporciona información valiosa e informes estadísticos para que los administradores del sitio optimicen el sitio. gestión y toma de decisiones.

4. Monitoreo y administración remotos: el sistema inteligente de detección de sitios de construcción puede realizar funciones de monitoreo y administración remotas, lo que permite a los administradores de sitios de construcción acceder y controlar el sistema de forma remota a través de Internet. De esta manera, pueden monitorear el estado del sitio de construcción en cualquier momento y en cualquier lugar, mantenerse al tanto de la situación del sitio de construcción y llevar a cabo la gestión y programación necesarias, mejorando las capacidades de monitoreo y gestión en tiempo real del sitio de construcción.

        En resumen, el sistema inteligente de inspección del sitio de construcción basado en YOLOv5 y PyQt5 tiene los requisitos de tiempo real, precisión y eficiencia, y tiene como objetivo mejorar la gestión de la seguridad del sitio y la eficiencia del trabajo, y brindar soporte para el análisis de datos y estadísticas. Sin embargo, estos objetivos también deben superar desafíos como la adquisición de conjuntos de datos, escenarios complejos y requisitos en tiempo real.

3. Interfaz y funciones

(1) interfaz de compilación pyqt5

 (2) Introducción a la función

1. Ejecute el sistema para mostrar la hora de Beijing en tiempo real.

2. Los usuarios pueden elegir tres modelos: detección de casco, detección de incendios y detección de chaleco reflectante.

3. Los usuarios pueden ajustar el nivel de confianza y el pagaré. Confianza: indica la confiabilidad de los resultados de la predicción; iou: se utiliza para medir el grado de superposición entre los resultados de la predicción y las anotaciones reales en tareas como la detección de objetivos, la segmentación semántica y la segmentación de instancias.

4. Área de avisos: se utiliza para mostrar la hora de la alarma, el tipo de alarma, el número de personas y otra información.

5. El usuario puede elegir tres métodos: detección de imagen, detección de video y detección de cámara. La imagen o video original se muestra en el lado izquierdo de la interfaz y el resultado de la detección se muestra en el lado derecho.

6. Una vez completada la detección, el usuario puede hacer clic en el botón "Descargar" en la esquina superior derecha para guardar la imagen de detección, o hacer clic en el botón "Descargar datos de alarma" a continuación para guardar la información de los datos.

Cuatro, el código principal 

(1) Modelo de detección de interruptor

def selectionChanged(self, index):
    select_weight = self.comboBox.itemText(index)
    print('selected weight:', select_weight)
    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"
    if select_weight == '反光背心检测':
            self.model = torch.hub.load("./", "custom", path="runs/train/reflect_clothes.pt",
                                        source="local")  # 加载反光背心检测模型
            self.weight = "det_reflect_clothes"
    if select_weight == '火灾检测':
            self.model = torch.hub.load("./", "custom", path="runs/train/det_fire.pt",
                                        source="local")  # 加载火情检测模型
            self.weight = "det_fire"

 (2) Detección de imágenes

def image_pred(self, file_path):
    results = self.model(file_path)  # 加载模型检测
    # print("model信息:", self.model)
    image = results.render()[0]
    # 调用检测结果
    self.judge(results)
    return convert2QImage(image)  # 转换图片格式

def open_image(self):
    print("点击了检测图片")
    self.textBrowser.clear()  # 清除textBrowser文本框的文字
    self.timer.stop()  # 停止计时
    file_path = QFileDialog.getOpenFileName(self, directory="./data/images", filter="*.jpg;*.png;*.jpeg")  # 选择图片
    if file_path[0]:
         file_path = file_path[0]
         self.input.setPixmap(QPixmap(file_path))  # 显示原始图片
         qimage = self.image_pred(file_path)  # 调用图片检测
         self.input.setPixmap(QPixmap(file_path))
         self.output.setPixmap(QPixmap.fromImage(qimage))  # 显示检测结果图片
         self.result_image_path = file_path

(3) Detección de vídeo

def video_pred(self):
    ret, frame = self.video.read()
    if not ret:  # 未读取视频,停止计时(使用计时器,在pyqt5中实时更新视频图片)
         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]
         # qimage = self.video_pred(frame)
    self.output.setPixmap(QPixmap.fromImage(convert2QImage(image)))  # 播放检测后视频
    return self.judge(self.results)  # 判断检测结果

def open_video(self):
    print("点击了视频检测")
    file_path = QFileDialog.getOpenFileName(self, directory="./data", filter="*.mp4")  # 选择视频
    if file_path[0]:
       file_path = file_path[0]
       self.video = cv2.VideoCapture(file_path)  # 加载视频
       self.timer.start()  # 计时器开始计时

 (4) Detección de cámara

def open_camera(self):
    print("点击了摄像头检测")
    self.video = cv2.VideoCapture(0)  # 调用笔记本摄像头(在实际项目里,通过调用不同区域的联网摄像头来实时检测工地)
    self.timer.start()

(5) Determinar el tipo de alarma

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")
    # print(formatted_datetime)
    labels = preds.values
    # 安全帽检测报警
    if self.weight == 'det_helmet':
        for label in labels:
            # print("lab:", label)
            if label[6] == 'person':
                person_count += 1
            if label[6] == 'helmet':
                helmet_count += 1
        print("person:", person_count)
        print("helmet:", helmet_count)
        self.textBrowser.append(f"人数为:{person_count}")
        self.textBrowser.append(f"头盔个数为:{helmet_count}")
        if helmet_count < person_count:
            print("没佩戴头盔!")
            alarm = "没佩戴头盔!"

     # 反光背心检测报警 label为1
     if self.weight == 'det_reflect_clothes':
         for label in labels:
             if label[6] != 'reflective_clothes':
                 print("检测到没穿戴反光背心!")
                 alarm = "没穿戴反光背心!"

     # 明火检测报警
     if self.weight == 'det_fire':
         for label in labels:
             if label[6] == 'fire':
                 print("检测到火焰!")
                 alarm = "检测到火焰!"

     # 提示板显示
     self.textBrowser.append(formatted_datetime)
     self.textBrowser.append(f"警告:{alarm}")
     # 记录报警
     if alarm is not None:
         return self.record(alarm)

(PD: De hecho, en la detección del chaleco reflectante, también se puede agregar la función de detección del número de personas, pero como el modelo de detección del chaleco reflectante no está entrenado por el autor, no marca a la persona).

(6) Registre la hora y el tipo de alarma

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) Descargar datos

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)
            print("File downloaded successfully!")
            self.textBrowser.append("报警数据下载成功!")
        except Exception as e:
                print("Error while downloading file:", str(e))
    else:
        print("No save path selected.")

(8) Vinculación de función de señal y ranura

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) #调节iou
    self.timer.timeout.connect(self.video_pred) #视频处理

5. Resultados experimentales

 (1) Selección de modelo

A continuación, los tres métodos de detección de imágenes, detección de cámara y detección de video se utilizan para detectar los efectos de reconocimiento y detección de los tres modelos de escena anteriores.

 (2) Detección de imágenes

1. Detección de casco 

2. Detección de chaleco reflectante

3. Detección de llama 

 (3) Detección de cámara

Aquí se llama a la cámara del portátil para completar la tarea de prueba.

1. Detección de casco

(PD: la razón para no detectar la cantidad de personas aquí es: esta imagen se probó el día 24 y la función de la cantidad de personas no se agregó en ese momento. El autor es demasiado perezoso para actualizar el mosaico) 

 2. Detección de chaleco reflectante

(4) Detección de vídeo

Para ahorrar tiempo, solo se coloca aquí el video experimental de detección de llama.

detección de llama

A través del video, el sistema puede detectar efectivamente la llama y realizar la función de alarma, pero descubrió que hay un retraso y una congelación evidentes, que se ven afectados por el rendimiento de la tarjeta gráfica de la computadora (la CPU de la computadora portátil Xiaomi que utilicé, la registro de entrenamiento de 120 imágenes durante 6 horas), el impacto de problemas como la latencia de E/S y el procesamiento simultáneo. Los amigos calificados pueden usar tarjetas gráficas de alto rendimiento u optimizar el modelo de algoritmo yolo para reducir las demoras.

(5) Descarga de datos de alarma

 Los datos de la alarma son los siguientes:

 6. Resumen

        El sistema inteligente de detección de sitios de construcción basado en YOLOV5 y PyQt5 combina el algoritmo de detección de objetivos y el diseño de la interfaz, con el objetivo de realizar el monitoreo y la detección inteligentes del entorno del sitio de construcción. El sistema generalmente realiza las funciones de reconocimiento y detección bajo diferentes modelos de escena, pero todavía hay muchos defectos. Por ejemplo, el procesamiento de registros de datos de alarma es demasiado simple, lo que puede aumentar la cantidad de personas detectadas, los lugares de detección, etc.; al detectar cascos, el sistema es propenso a falsas alarmas porque los cascos son pequeños y fáciles de usar. bloqueado; además, durante la detección de video, debido a que el rendimiento de la tarjeta gráfica del equipo informático es insuficiente, lo que da como resultado una velocidad de procesamiento de detección lenta, congelación de cuadros de video y demora. También hay algunas deficiencias en la prueba. No se considera la complejidad del entorno real. Al detectar imágenes y videos, se debe realizar un preprocesamiento de imágenes para mejorar la tasa de reconocimiento y la tasa de procesamiento del sistema. Este experimento proviene de mi tarea del curso de visión por computadora, y también es un pequeño proceso práctico de implementación del artículo "Reconocimiento de personal y detección de cascos" escrito en mayo . Puede considerarse como la aplicación de lo que ha aprendido.

Supongo que te gusta

Origin blog.csdn.net/weixin_44686138/article/details/131253672
Recomendado
Clasificación