在建筑结构健康监测领域,裂缝是最常见也最危险的缺陷之一。传统的人工检测方法不仅效率低下,而且受主观因素影响大。这个毕业设计项目采用Python深度学习技术,构建了一个基于卷积神经网络(CNN)的砖墙裂缝自动识别系统。系统能够对上传的墙面图像进行智能分析,准确识别裂缝位置并评估严重程度,为建筑安全评估提供数据支持。
作为计算机视觉在工程领域的典型应用,该项目完整实现了从数据采集、模型训练到Web系统部署的全流程。技术栈采用SpringBoot+Vue的前后端分离架构,模型部分使用PyTorch框架开发,最终达到测试集92.3%的识别准确率。这个项目特别适合计算机、人工智能相关专业的学生作为毕业设计选题,既包含前沿的深度学习技术,又具有明确的工程应用价值。
系统采用B/S架构设计,主要分为前端展示层、后端业务层和AI模型服务三个部分:
前端技术栈:
后端技术栈:
AI模型服务:
这种架构设计的优势在于:
系统主要包含以下功能模块:
用户认证模块:
图像处理模块:
裂缝识别模块:
数据管理模块:
系统管理模块:
本项目使用公开的SDNET2018砖墙裂缝数据集,包含5,839张标记图像(256×256像素)。为提高模型泛化能力,进行了以下数据增强:
python复制transform = transforms.Compose([
transforms.RandomHorizontalFlip(p=0.5),
transforms.RandomVerticalFlip(p=0.5),
transforms.RandomRotation(15),
transforms.ColorJitter(brightness=0.2, contrast=0.2),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
数据集按7:2:1划分为训练集、验证集和测试集。针对类别不平衡问题(裂缝:无裂缝≈1:3),采用加权交叉熵损失函数:
python复制class_weights = torch.tensor([1.0, 3.0], device=device)
criterion = nn.CrossEntropyLoss(weight=class_weights)
基于ResNet34进行迁移学习,修改最后的全连接层适配二分类任务:
python复制model = models.resnet34(pretrained=True)
num_ftrs = model.fc.in_features
model.fc = nn.Sequential(
nn.Linear(num_ftrs, 512),
nn.ReLU(),
nn.Dropout(0.5),
nn.Linear(512, 2)
)
训练参数配置:
训练过程中采用早停策略(patience=5),最终在测试集上达到:
注意力机制增强:在ResNet的第三、四阶段添加CBAM注意力模块,提升对小裂缝的敏感度
多尺度特征融合:采用FPN结构融合不同层级的特征图
测试时增强(TTA):对测试图像进行多次增强后投票,提升稳定性
模型量化:使用PyTorch的量化工具将FP32模型转为INT8,推理速度提升2.3倍
前端通过RESTful API与后端交互,主要接口设计:
| 端点 | 方法 | 描述 | 参数 |
|---|---|---|---|
| /api/upload | POST | 上传图像 | multipart/form-data |
| /api/detect | POST | 执行裂缝检测 | image_id |
| /api/history | GET | 获取检测历史 | page, size |
| /api/report | GET | 生成PDF报告 | record_id |
图像上传采用分块上传技术,支持大文件传输:
javascript复制// 前端上传组件
const uploader = new Uploader({
target: '/api/upload',
chunkSize: 2 * 1024 * 1024, // 2MB
simultaneousUploads: 3,
headers: {'Authorization': `Bearer ${token}`}
})
使用Flask构建模型推理微服务,通过gRPC与主服务通信:
python复制# 模型服务端
@app.route('/predict', methods=['POST'])
def predict():
img = request.files['image'].read()
img = preprocess_image(img)
with torch.no_grad():
output = model(img)
return jsonify({
'class': 'crack' if output.argmax() == 1 else 'normal',
'confidence': float(output.softmax(dim=1)[0][1])
})
部署时使用Docker容器化,通过Kubernetes实现自动扩缩容:
dockerfile复制# Dockerfile示例
FROM pytorch/pytorch:1.12.0-cuda11.3
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY app.py model.pth .
CMD ["gunicorn", "-b :5000", "app:app"]
图像上传测试:
裂缝检测测试:
使用JMeter进行压力测试(4核8G服务器):
| 并发用户数 | 平均响应时间 | 吞吐量 | 错误率 |
|---|---|---|---|
| 50 | 1.2s | 42/s | 0% |
| 100 | 2.8s | 36/s | 0% |
| 200 | 5.3s | 38/s | 1.2% |
优化措施:
问题1:模型对浅色裂缝识别率低
解决方案:
问题2:高并发时服务响应变慢
解决方案:
问题3:移动端上传图像方向错误
解决方案:
在实际部署应用中,可以考虑以下扩展方向:
多模态检测:结合红外热成像数据,提高对隐蔽裂缝的识别率
3D裂缝分析:通过多视角图像重建裂缝的三维模型,评估深度信息
移动端优化:开发轻量级模型(如MobileNetV3),支持手机端实时检测
历史趋势分析:建立裂缝发展的时间序列模型,预测结构安全寿命
无人机巡检集成:开发与无人机航拍系统的对接接口,实现大范围自动检测
对于希望深入研究的同学,建议在以下方向继续探索: