基于 Geo-SAM 的核心思想(预编码 + 交互式分割),结合 PyQt 构建独立桌面应用


img

基于 Geo-SAM 的核心思想(预编码 + 交互式分割),结合 PyQt 构建独立桌面应用,以下是高内聚、低耦合的文件模块规划,兼顾当前功能与未来扩展性:

一、整体架构设计思路

将应用分为 核心层(Core)数据层(Data)界面层(UI)工具层(Utils) 四大模块,通过明确的接口交互,便于后续添加新模型、新格式或新功能。

二、详细文件模块规划

Geo-SAM-PyQt/
├── main.py                  # [入口] 程序启动文件
├── requirements.txt         # 依赖清单(PyTorch, PyQt5, GDAL/Rasterio, OpenCV等)
│
├── core/                    # [核心层] SAM模型与分割逻辑
│   ├── __init__.py
│   ├── sam_base.py          # SAM模型基类(抽象接口,便于后续扩展SAM变体)
│   ├── sam_wrapper.py       # 封装原始SAM/精简SAM模型(加载权重、图像编码、掩码解码)
│   ├── image_encoder.py     # 大图像分块编码逻辑(处理超大遥感影像,保存特征)
│   └── interactive_segmentor.py  # 交互式分割控制器(处理点/框提示、实时推理)
│
├── data/                    # [数据层] 影像、特征、结果的读写
│   ├── __init__.py
│   ├── raster_reader.py     # 遥感影像读取(支持多波段、大文件分块、坐标信息保留)
│   ├── feature_io.py        # 编码特征文件的保存/加载(定义二进制/JSON格式)
│   └── result_exporter.py   # 分割结果导出(Shapefile、GeoJSON、Mask PNG等)
│
├── ui/                      # [界面层] PyQt界面组件
│   ├── __init__.py
│   ├── main_window.py       # 主窗口(整合菜单栏、工具栏、各功能面板)
│   ├── panels/              # 功能面板
│   │   ├── encoder_panel.py # 图像编码面板(选择影像、设置分块、运行编码)
│   │   ├── segment_panel.py # 交互式分割面板(加载特征、点/框工具、掩码预览)
│   │   └── settings_panel.py # 设置面板(模型路径、渲染参数、快捷键配置)
│   ├── widgets/             # 自定义控件
│   │   ├── image_canvas.py  # 影像画布(显示大影像、缩放平移、绘制点/框/掩码)
│   │   ├── prompt_toolbar.py # 提示工具栏(点选、框选、撤销、清除)
│   │   └── layer_list.py    # 图层列表(管理影像、掩码、矢量层)
│   └── dialogs/             # 对话框
│       ├── about_dialog.py  # 关于对话框
│       └── progress_dialog.py # 进度条对话框(编码/导出时显示)
│
├── utils/                   # [工具层] 辅助功能
│   ├── __init__.py
│   ├── config.py            # 配置管理(默认参数、路径管理)
│   ├── image_utils.py       # 影像预处理(归一化、多波段转RGB、分块逻辑)
│   ├── geo_utils.py         # 地理坐标转换(像素坐标与地理坐标互转)
│   └── logger.py            # 日志记录(调试信息、错误日志)
│
├── resources/               # [资源] 图标、样式表
│   ├── icons/               # 工具栏图标(点、框、保存等)
│   └── styles.qss           # PyQt样式表(美化界面)
│
└── tests/                   # [测试] 单元测试
    ├── test_sam_wrapper.py  # 测试SAM模型封装
    ├── test_raster_reader.py # 测试影像读取
    └── test_ui_components.py # 测试UI组件

三、模块职责与扩展方向说明

模块 核心职责 未来可扩展点
core/ 封装 SAM 模型逻辑,实现 “预编码 + 实时分割” 核心流程 1. 支持 SAM-HQ、MobileSAM 等轻量 / 增强模型2. 添加自动分割(无提示)模式3. 支持批量图像编码
data/ 处理遥感影像读写、特征文件 IO、结果导出 1. 支持更多遥感格式(NetCDF、HDF5)2. 特征文件压缩存储3. 导出为 COCO、VOC 等数据集格式
ui/ 提供交互式界面,包含画布、工具栏、图层管理 1. 添加多边形提示工具2. 支持掩码编辑(擦除、合并)3. 多语言切换(国际化)4. 快捷键自定义
utils/ 提供配置、日志、坐标转换等辅助功能 1. 增加影像增强工具(对比度、直方图均衡)2. 支持插件系统(第三方扩展功能)

四、关键设计原则(保障扩展性)

  1. 接口抽象core/sam_base.py 定义模型基类,后续添加新 SAM 变体只需继承并实现接口,无需修改核心逻辑。
  2. 数据与界面分离:UI 层不直接操作模型,通过 interactive_segmentor.py 中转,便于后续替换 UI 框架(如改用 PySide6)。
  3. 插件化预留:在 ui/panels/ 中预留接口,未来可通过插件形式添加 “后处理工具”(如掩码平滑、矢量简化)。