智能积水检测与分割系统

在这里插入图片描述

在这里插入图片描述

项目介绍

智能积水检测与分割系统是一个基于计算机视觉和深度学习技术的解决方案,旨在自动检测和分割道路积水区域。该系统集成了先进的大语言视觉模型(LLM-Vision)和精确分割模型,能够快速准确地识别图像中的积水区域,并提供相应的可视化结果和处理建议。

该系统可以帮助交通管理部门及时发现积水路段,为公众提供实时的路况信息,从而提高道路安全性和通行效率,尤其适用于雨季或洪涝灾害发生时的应急响应和交通疏导工作。

当然也适用于任何你想检测与分割的事物,只需要修改提示词即可
在这里插入图片描述
修改提示词、选择识别模型、分割模型
在这里插入图片描述
点击积水识别进行识别积水画框
在这里插入图片描述
点击积水分割进行精准分割
在这里插入图片描述

功能特点

核心功能

  • 高精度积水检测:利用先进的大语言视觉模型自动识别图像中的积水区域,支持多种模型选择
  • 边界框标注:在检测到的积水区域周围绘制精确的边界框,直观展示积水位置
  • 语义分割:使用Segment Anything Model (SAM) 或 MobileSAM 对积水区域进行像素级精确分割
  • 多模型支持:内置对GLM-4.5V和Qwen等多种大语言视觉模型的支持,满足不同场景需求
  • 智能处理建议:根据检测到的积水区域数量、大小和分布,自动生成相应的处理建议

用户体验

  • 友好的Web界面:提供简洁直观的Web界面,支持图像上传、检测和分割操作
  • 实时结果展示:检测和分割结果实时展示在Web界面上,便于用户查看和分析
  • 一键式操作:简单的点击操作即可完成从图像上传到结果查看的全部流程
  • 历史记录:支持保存和查看历史检测结果

技术优势

  • 模块化设计:采用清晰的模块化设计,便于扩展和维护
  • 高性能:优化的算法实现,确保在普通硬件上也能高效运行
  • 可扩展性:易于集成新的检测和分割模型
  • 跨平台兼容:支持Windows和Linux系统

系统架构

本系统采用前后端分离的架构设计,主要由以下几个部分组成:

前端层

  • 基于HTML/CSS/JavaScript构建的用户界面
  • 负责图像上传、显示结果和用户交互
  • 提供直观的操作流程和视觉反馈

后端层

  • 使用Flask框架构建RESTful API
  • 处理前端请求,调用核心算法模块
  • 管理文件上传和存储
  • 提供JSON格式的数据响应

核心算法层

  • 积水检测模块:利用大语言视觉模型识别积水区域
  • 坐标提取模块:从模型响应中提取积水区域的坐标信息
  • 分割模块:使用SAM或MobileSAM进行精确分割
  • 可视化模块:生成带标注的图像和分割结果

模型层

  • 集成GLM-4.5V、Qwen等大语言视觉模型
  • 集成SAM和MobileSAM分割模型
  • 支持模型的动态切换和配置

数据流

  1. 用户通过Web界面上传图像
  2. 前端将图像发送到后端API
  3. 后端调用积水检测模块处理图像
  4. 检测结果返回给前端显示
  5. 用户可选择进一步进行分割处理
  6. 分割结果返回给前端显示

项目结构

在这里插入图片描述

e:\SD\code\积水识别系统\
├── README.md                  # 项目说明文档
├── .gitignore                 # Git忽略文件配置
├── apikey.py                  # API密钥配置文件
├── app.py                     # Flask应用主入口
├── box_sam.py                 # SAM分割模型封装
├── extract_coordinates.py     # 坐标提取工具
├── image\                     # 示例图像文件夹
│   ├── 1.png
│   ├── 2.png
│   ├── 3.png
│   ├── 效果图.png
│   └── 效果图2.png
├── requirements.txt           # 项目依赖
├── run_script.py              # 运行脚本
├── sam_vit_b_01ec64.pth       # SAM模型文件
├── templates\                 # HTML模板
│   ├── index.html             # 主页面
│   └── index.html.bak         # 备份文件
├── uploads\                   # 上传文件存储目录
├── water_2\                   # MobileSAM相关模块
│   ├── __pycache__\
│   ├── mobile_sam.pt          # MobileSAM模型文件
│   └── qwen_mobile_sam_api.py # Qwen和MobileSAM集成API
├── water_detection.py         # 积水检测核心模块
└── 效果图.png                 # 效果展示图

主要文件说明

  • app.py:项目的主入口文件,包含Flask应用的配置和API路由定义
  • water_detection.py:实现积水区域检测的核心逻辑,调用大语言视觉模型进行识别
  • box_sam.py:封装了SAM模型的使用,提供边界框分割功能
  • extract_coordinates.py:提供从文本中提取坐标信息的工具函数
  • water_2/qwen_mobile_sam_api.py:集成Qwen模型和MobileSAM的API接口
  • apikey.py:集中管理API密钥配置,使用前需要填写有效的API密钥
  • templates/index.html:Web界面的前端实现
  • uploads/:存储用户上传的图像和处理结果

系统要求

硬件要求

  • CPU:Intel Core i5或AMD Ryzen 5以上处理器
  • 内存:至少8GB RAM(推荐16GB以上)
  • 存储:至少1GB可用空间
  • 显卡:支持CUDA的NVIDIA显卡(可选,用于加速深度学习模型,推荐RTX 2060以上)

软件要求

  • 操作系统:Windows 10/11 或 Linux(Ubuntu 20.04+/CentOS 7+)
  • Python:3.7 或更高版本
  • 浏览器:Chrome 90+、Firefox 88+、Safari 14+、Edge 90+等现代浏览器

安装步骤

手动安装

  1. 确保已安装Python 3.9 最好使用anaconda新建一个3.9的环境
  2. 克隆或下载本项目到本地计算机
  3. 打开命令行工具,进入项目目录
  4. 安装依赖项:
    pip install -r requirements.txt
    
  5. 运行应用:
    python app.py
    

或者直接点击run.bat
启动成功界面
上传积水识别后,终端会打印信息

在这里插入图片描述

使用方法

基本使用流程

  1. 启动应用后,在浏览器中访问 http://localhost:5000
  2. 点击上传按钮选择一张包含道路的图像
  3. 选择合适的检测模型(如GLM-4.5V或Qwen)
  4. 点击"检测积水"按钮进行积水区域检测
  5. 查看检测结果(带红色边界框的图像)和生成的处理建议
  6. 如需更精确的分割结果,可选择分割模型(SAM或MobileSAM),然后点击"分割积水"按钮
  7. 查看分割结果(带蓝色半透明覆盖的图像)

高级使用选项

  • 模型选择:根据需要选择不同的检测模型和分割模型
  • 自定义提示词:可根据特定场景调整检测提示词,提高检测精度
  • 参数调整:对于高级用户,可修改代码中的相关参数以获得更好的效果

API接口说明

1. 首页接口

  • URL/
  • 方法:GET
  • 功能:返回Web应用的主页面
  • 返回:HTML页面

2. 图像上传接口

  • URL/upload
  • 方法:POST
  • 功能:上传图像文件到服务器
  • 参数file - 图像文件(支持PNG、JPG、JPEG、GIF格式)
  • 返回:JSON格式的响应,包含成功状态、文件名和Base64编码的图像数据

3. 积水检测接口

  • URL/detect
  • 方法:POST
  • 功能:使用选定的模型检测图像中的积水区域
  • 参数
    • filename - 上传的图像文件名
    • detection_model - 检测模型名称(如"zai-org/GLM-4.5V"、"qwen"等)
    • prompt - 检测提示词(可选)
  • 返回:JSON格式的响应,包含成功状态、带边界框的图像数据、边界框坐标和带框图像的文件名

4. 积水分割接口

  • URL/segment
  • 方法:POST
  • 功能:使用选定的分割模型分割图像中的积水区域
  • 参数
    • filename - 带框图像的文件名
    • converted_boxes - 边界框坐标列表
    • detection_model - 检测模型名称
    • segment_model - 分割模型名称(如"SAM"、"MobileSAM"等)
  • 返回:JSON格式的响应,包含成功状态和分割后的图像数据

依赖项

本项目依赖以下Python库:

库名称 版本要求 用途
flask >=2.0.0 Web框架,提供API服务
openai >=1.0.0 调用大语言模型API
pillow >=9.0.0 图像处理
requests >=2.25.0 HTTP请求
torch >=2.0.0 深度学习框架
transformers >=4.30.0 提供预训练模型支持
matplotlib >=3.5.0 绘图和可视化
opencv-python >=4.5.0 计算机视觉处理
supervision >=0.14.0 目标检测辅助工具
numpy >=1.21.0 数值计算
segment_anything >=1.0.0 分割模型
torchvision >=0.15.0 计算机视觉工具

技术原理

积水检测原理

  1. 用户上传包含道路的图像
  2. 系统将图像编码为Base64格式,并发送给大语言视觉模型
  3. 大语言视觉模型分析图像内容,识别出积水区域的位置
  4. 系统从模型响应中提取积水区域的坐标信息
  5. 根据提取的坐标信息,在原始图像上绘制红色边界框

积水分割原理

  1. 以检测阶段得到的边界框作为输入
  2. 系统调用SAM或MobileSAM模型对边界框内的区域进行精确分割
  3. 生成半透明的蓝色覆盖层,表示分割出的积水区域
  4. 将分割结果与原始图像合并,生成最终的分割图像

注意事项

  1. 首次运行:首次运行时,系统会自动下载并安装所需的依赖项,这可能需要一些时间,请耐心等待
  2. API密钥配置:在使用前必须在 apikey.py 文件中填写有效的SiliconFlow API密钥,获取方式:访问 https://cloud.siliconflow.cn/i/drXm4W3U 登录后点击左侧API密钥进行创建
  3. 端口占用:如果遇到端口被占用的错误,可以修改 app.py 文件中的端口号,找到 app.run() 语句,添加端口参数,如 app.run(port=5001)
  4. 命令窗口:运行过程中不要关闭命令窗口,关闭窗口会停止服务器
  5. 停止服务器:如需停止服务器,可在命令窗口中按 Ctrl+C
  6. 网络连接:系统需要网络连接以调用大语言视觉模型API
  7. 模型文件:确保项目目录中包含 sam_vit_b_01ec64.pthwater_2/mobile_sam.pt 模型文件,否则分割功能将无法使用
  8. 性能考虑:对于大图像或高分辨率图像,处理时间可能会延长,建议使用适当分辨率的图像以获得最佳性能

故障排除

常见问题及解决方案

  1. Python未找到

    • 确保Python已正确安装并添加到系统环境变量
    • 检查系统的PATH环境变量中是否包含Python安装路径
  2. 依赖安装失败

    • 检查网络连接是否正常
    • 尝试使用管理员权限运行命令行
    • 手动安装requirements.txt中的依赖:pip install -r requirements.txt
    • 对于特定库的安装问题,可以尝试单独安装:pip install 库名称==版本号
  3. API密钥错误

    • 确保 apikey.py 文件中填写了有效的SiliconFlow API密钥
    • 检查API密钥的格式是否正确,应以 sk- 开头
    • 确认API密钥是否已过期或被禁用,可访问SiliconFlow官网查看密钥状态
  4. 端口被占用

    • 修改 app.py 中的 app.run() 语句,指定其他端口,如 app.run(port=5001)
    • 关闭占用相同端口的其他程序
  5. 内存不足

    • 对于大图像或高分辨率图像,可能需要更多内存来处理
    • 关闭其他占用内存的程序后重试
    • 降低输入图像的分辨率
  6. 模型文件缺失

    • 确保项目目录中包含 sam_vit_b_01ec64.pthwater_2/mobile_sam.pt 模型文件
    • 如文件缺失,需要从官方渠道下载并放入指定位置
  7. API连接失败

    • 检查网络连接是否正常
    • 验证API密钥是否正确
    • 检查防火墙设置,确保允许应用访问网络
  8. 检测精度不高

    • 尝试调整提示词,使其更符合特定场景
    • 尝试使用不同的检测模型
    • 确保输入图像清晰,光照条件良好

扩展与开发

如何添加新的检测模型

  1. water_detection.py 中添加新的检测函数
  2. app.py/detect 路由中添加对新模型的支持
  3. 在前端界面中添加新模型的选项

致谢

本项目的开发参考了以下开源项目和技术:

  • Segment Anything Model (SAM):由Meta AI开发的通用分割模型
  • Flask:轻量级Web框架
  • OpenCV:计算机视觉库
  • PyTorch:深度学习框架
  • GLM-4.5V:由智谱AI开发的大语言视觉模型
  • Qwen:由阿里云开发的大语言模型
  • MobileSAM:SAM模型的轻量化版本

完整项目代码获取链接

链接:https://pan.quark.cn/s/2e0f994d56a1
提取码:dmR8

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐