无人机结构损伤检测系统

在建筑和桥梁等结构的损伤检测中,传统的人工检查方法不仅成本高昂,而且存在一定的危险性。为了全面检查结构的每一部分,需要近距离观察并记录所有表面。无人机搭载的近距离拍摄技术已被证明在结构评估中非常有效,但如何从大量图像中快速识别损伤,而不需要人工逐一评估,成为了一个亟待解决的问题。这时,计算机视觉技术便发挥了重要作用。

本文将详细介绍如何构建一个计算机视觉模型,以识别包括裂缝、碱骨料反应(ASR)、混凝土退化等在内的结构损伤,适用于高层建筑、桥梁和房屋等基础设施。

系统工作原理

在这个系统中,无人机捕获的图像数据被输入到使用Roboflow平台构建的目标检测模型中。该检测模型能够识别各种类型的结构损伤。一个简单的Python脚本接收实时摄像头流,并运行目标检测模型以检测裂缝。下图展示了系统的工作原理以及如何构建和部署。

构建结构损伤检测系统的过程涉及到收集建筑物裂缝的图像,然后使用这些图像进行标记和训练模型。Roboflow平台用于标记图像并准备在这些图像上训练的模型。此外,Roboflow还提供了一个按需API,该API可以在给定图像或视频的情况下,返回托管模型的结果。这个API使用Python脚本进行查询。

项目需求

要构建此项目,需要以下设备:

- 四旋翼无人机套件; - AI Thinker ESP32 CAM开发板; - Roboflow账户; - Python开发环境。

例如,本项目使用了来自dronaaviation.com的Big Quad Expension Drone Kit和Primus X飞行控制器。可以使用任何其他无人机套件进行此项目。下图显示了用于收集数据和项目的无人机。

步骤1:收集和标记项目图像

收集了不同建筑物墙面裂缝的图像。总共收集了755张大小为800x800像素的图像。使用Roboflow将这些图像调整为640x640像素,这是训练前的标准化转换。然后,Roboflow将图像分为训练集、验证集和测试集:

- 527张图像用于训练。 - 149张图像用于验证。 - 79张图像用于测试。

以下是一些标记图像的示例:

数据集中的每个图像都使用Roboflow平台上的矩形“边界框”工具进行标记。下图展示了不同图像的标记方式:

在每张图像上,都会在建筑物墙面的每个裂缝周围绘制一个框。

步骤2:训练模型

在数据集标记完成后,使用Roboflow Train管理和托管模型的训练。要使用Roboflow训练模型,请点击界面中的“开始训练”按钮:

按下开始按钮后,将看到以下选项:

这提供了两个训练选项,“快速”和“准确”。可以选择其中任何一个。本项目使用了“准确”选项,以实现模型的更高准确性,尽管训练时间会更长。

点击“继续”后,将获得另一个对话框,其中有三个训练选项可供选择,如下所示。这些选项如下:

- 从上一个检查点训练; - 从公共检查点训练; - 从头开始训练。

由于没有现成的类似主题的已训练模型,因此选择了“从头开始训练”,这选择了Roboflow 2.0目标检测(准确)模型,并从头开始训练。Roboflow首先导出训练数据集,然后开始训练,如下所示:

显示训练过程已经开始的对话框。

在模型训练期间,Roboflow会显示一个漂亮的训练图,这有助于了解模型是如何被训练的。图表显示了模型在不同“周期”中的性能。一个周期是训练过程中的单次迭代。图表显示了平均精度均值(mAP)指标,该指标衡量模型性能,随着模型在更多周期上的训练而变化。随着时间的推移,mAP应该上升。

模型训练完成后,可以看到在验证集上的mAP为93.7%,精确度为92.8%,召回率为89.6%,类别平均精度为92%,在测试集上为89%。

下图显示了更详细的训练图。这些图表展示了精确度、召回率等方面的变化:

步骤3:使用模型进行预测

一旦模型训练完成,它就会自动部署在Roboflow平台上,并且可以被使用。Roboflow提供了多种测试和部署模型的选项,从在浏览器中实时尝试模型到将项目部署到像Luxonis OAK这样的边缘设备。这在下图中显示。

本项目使用Roboflow GitHub上的代码在个人计算机上使用模型。该代码接受摄像头输入,并将摄像头的视频数据通过训练好的模型运行。

在Python脚本中使用模型之前,需要用几个值填充“roboflow_config.json”配置文件。这些值包含有关模型和API密钥的信息,以便可以与Roboflow进行身份验证。

{ "__comment1": "通过Roboflow获得这些值", "ROBOFLOW_API_KEY": "XXXXXXXXXX", "ROBOFLOW_WORKSPACE_ID": "XXXXXXXXXX", "ROBOFLOW_MODEL_ID": "XXXXXXXXXX", "ROBOFLOW_VERSION_NUMBER": "XXXXXXXXXX", "ROBOFLOW_SIZE": XXXX, "EMAIL": "XXXXXXXXXX", "__comment2": "以下仅infer-async.py需要", "FRAMERATE": 24, "BUFFER": 0.5 }

在上面的代码中,替换ROBOFLOW_API_KEY、ROBOFLOW_WORKSPACE_ID、ROBOFLOW_MODEL_ID、ROBOFLOW_VERSION_NUMBER、ROBOFLOW_SIZE和EMAIL的值。

在下面的Python代码中,添加了“confidence”参数,设置为20,因为希望突出显示检测到的每一个裂缝,即使精度较低。“20”值意味着任何预测的置信度超过20%将由模型返回。

upload_url = "".join([ "https://detect.roboflow.com/", ROBOFLOW_MODEL_ID, "/", ROBOFLOW_VERSION_NUMBER, "?api_key=", ROBOFLOW_API_KEY, "&format=json", "&confidence=20", "&stroke=5" ])

在Python源文件中的以下代码行中,使用了安装在无人机上的ESP32摄像头的URL。摄像头的数据将反馈给模型,以识别建筑物中的裂缝。这个URL可能与ESP32摄像头部署不同。

URL = "http://192.168.175.247" video = cv2.VideoCapture(URL + ":81/stream")

上面的代码应该替换以下代码行:

video = cv2.VideoCapture(0)

有关如何准备和使用ESP32 Cam进行此项目的详细教程,请参见此处。

可以使用前面复制的Python脚本的调整版本,使用以下命令运行:

python script.py

在Roboflow Universe上有一个名为damage-detection的公共版本项目,可以使用它来测试模型。从Roboflow Universe,还可以下载用于训练模型的数据集。

结果

现在是时候尝试模型了。让将无人机指向墙上的裂缝。结果如下:

在上面的图像中,无人机指向的墙上的裂缝被正确识别。可以使用这些信息作为记录建筑物结构问题的调查报告的一部分。下图显示了摄像头指向具有两个不同背景的墙壁,每个背景都穿过一个裂缝:

在上面的图像中,识别出了两个裂缝。这表明模型按预期工作。给定无人机镜头,成功地在墙壁上识别出裂缝。在终端输出中,每个裂缝都被赋予了“裂缝”类别。

可以扩展模型,以识别其他类型的结构损伤,例如屋顶上的碎瓦片。这将涉及遵循文章开头讨论的相同过程:收集代表性的结构损伤数据,标记图像中的损伤特征,然后训练使用数据的模型。

按照上述说明,并使用随附于此项目的公共数据集,可以构建自己的无人机,以识别结构中的裂缝。祝构建愉快!

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