基于计算机视觉的安全区域检测系统

在工业环境中,确保工人的安全是至关重要的。一种有效的方法是通过创建一个计算机视觉系统来识别“红区”,即重型机械频繁移动的区域,工人在这些区域需要格外小心。本教程将指导完成构建红区检测系统的过程。完成本指南后,将拥有一个可以实时识别并突出显示危险区域的工作模型。

步骤 1:构建模型

首先,注册并创建一个Roboflow账户。然后,进入工作区并创建一个项目,自定义项目名称和注释组。确保选择的是目标检测项目。接下来,添加图像。使用的图像来自这个YouTube视频。可以将YouTube URL输入到Roboflow中,以快速创建数据集。然后,添加希望模型检测的类别。接下来,开始对数据集进行注释。建议在训练第一个模型之前至少获得50张注释图像。使用Roboflow中的边界框功能绘制注释,并为每张图像重复此步骤。最后,生成一个标记图像的数据集版本。每个版本都是唯一的,并且与训练的模型相关联,因此可以迭代进行增强和数据实验。

步骤 2:创建红区

使用Roboflow的多边形区域创建器,可以创建一个工人应该警惕重型机械的红区。将点保存在一个名为“zone”的变量中。

完成模型构建的所有先决条件后,可以开始编码应用程序。首先,下载所需的库。

!pip install roboflow pillow supervision numpy inference

步骤 4:导入库

接下来,导入库。

import supervision as sv import cv2 from typing import Union, List, Optional from inference.core.interfaces.camera.entities import VideoFrame from inference import InferencePipeline from google.colab.patches import cv2_imshow from datetime import datetime import numpy as np zone = np.array([[661, 1638],[1005, 2142],[1649, 1822],[1281, 1342],[665, 1638]])

步骤 5:添加检测代码

在这部分,将编写代码来处理预测结果,并在图像上添加不同的注释。

COLOR_ANNOTATOR = sv.ColorAnnotator() LABEL_ANNOTATOR = sv.LabelAnnotator() def on_prediction( predictions: Union[dict, List[Optional[dict]]], video_frame: Union[VideoFrame, List[Optional[VideoFrame]]], ) -> None: global zone if not isinstance(predictions, list): predictions = [predictions] video_frame = [video_frame] for prediction, frame in zip(predictions, video_frame): if prediction is None: continue # SOME PROCESSING image = frame.image detections = sv.Detections.from_inference(prediction) annotated_frame = image annotated_frame = COLOR_ANNOTATOR.annotate( scene = annotated_frame, detections = detections ) annotated_frame = LABEL_ANNOTATOR.annotate( scene = annotated_frame, detections = detections, ) polyzone = sv.PolygonZone( polygon=zone, ) label = "Clear" zone_presence = polyzone.trigger(detections) for presence in zone_presence: if presence: label = "Occupied" print("NOT SAFE") zone_annotated = sv.PolygonZoneAnnotator( zone=polyzone, color=sv.Color.RED, thickness=5, ) annotated_frame = zone_annotated.annotate( scene=annotated_frame, label=label ) start_point = (2450, 0) end_point = (2900, 300) cv2.rectangle(annotated_frame, start_point, end_point, (255, 255, 255), cv2.FILLED) text = label font = cv2.FONT_HERSHEY_SIMPLEX font_scale = 3 font_color = (0, 0, 255) line_type = 5 center_x = (start_point[0] + end_point[0]) // 2 center_y = (start_point[1] + end_point[1]) // 2 # Get the text size (text_width, text_height), baseline = cv2.getTextSize(text, font, font_scale, line_type) # Calculate the bottom-left corner of the text to center it text_x = center_x - text_width // 2 text_y = center_y + text_height // 2 # Add the text cv2.putText(annotated_frame, text, (text_x, text_y), font, font_scale, font_color, line_type) cv2.imshow("frame", annotated_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break

步骤 6:整合一切

现在,可以将所有部分整合在一起,创建一个可以实时检测工人是否安全以及他们是否处于红区的模型。

pipeline = InferencePipeline.init(         video_reference="VIDEO_PATH",         model_id="PATH_TO_MODEL",         max_fps = 30,         confidence=0.8,         api_key="YOUR_API_KEY",         on_prediction=on_prediction, ) pipeline.start()

确保使用的是用于模型的数据源相同的视频。现在,能够根据工人的位置判断他们是否安全,以及他们是否处于红区。

通过遵循这些步骤,可以创建一个强大的红区检测模型,通过识别危险区域来增强工人的安全。本指南已经带了解了如何使用Roboflow设置模型,定义红区,并将检测系统集成到实时视频流中。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485