更新工作目录子文件夹的序号

This commit is contained in:
2026-04-14 09:24:18 +08:00
parent 8025869b76
commit b0a94ba1e7
11 changed files with 244 additions and 255 deletions

175
docs/项目交接文档.md Normal file
View File

@ -0,0 +1,175 @@
# 水质参数反演分析系统 — 项目交接文档
> 文档用途:帮助新负责人快速理解仓库结构、运行方式、核心逻辑与维护要点。
> 适用仓库:本地工程 **fengzhuang-ui2V3**(水质 GUI + 反演流水线)。
---
## 1. 项目概述
本系统为 **基于遥感影像与机器学习的水质反演桌面应用**水域掩膜、耀斑检测与去除、CSV/光谱处理、监督与非经验建模、采样与预测、空间制图与报告生成。
- **图形界面**PyQt5主入口 `src/gui/water_quality_gui.py`
- **业务编排**GUI 使用 `src/core/water_quality_inversion_pipeline_GUI.py` 中的 `WaterQualityInversionPipeline`;命令行/无 GUI 场景可参考 `src/core/water_quality_inversion_pipeline.py`(子目录命名已与 GUI 管线对齐,但 **不含** 步骤 5.5 / 6.5 / 6.75 等扩展目录的完整定义,以 GUI 管线为准)。
- **打包**PyInstaller`scripts/water_quality_gui_file.spec`,单文件 exe`console=False`
---
## 2. 目录结构(精简)
```
项目根/
├── src/
│ ├── gui/ # PyQt5 主界面、步骤面板、工作线程
│ ├── core/ # 反演流水线、去耀斑、建模、预测、非经验反演
│ ├── preprocessing/ # 光谱预处理、水质数据加工
│ ├── postprocessing/ # 制图、可视化、Word 报告、航迹等
│ ├── visualization/ # 可视化包初始化(具体实现多在 postprocessing
│ └── utils/ # 水域提取、指数、采样、工具函数
├── data/ # 图标、公式子数据等静态资源
├── scripts/ # PyInstaller spec、构建产物常出现在 scripts/build|dist
├── docs/ # 说明文档(含本文)
├── requirements*.txt # pip/conda 依赖清单
├── README.md / README-conda.md # 安装与 conda 说明
└── README_SAMPLING_MAP.md # 采样地图相关说明(若仍写旧目录名,需与下文「工作目录」对照更新)
```
---
## 3. 运行方式
### 3.1 开发运行 GUI
在项目根目录(或已将 `src` 加入 `PYTHONPATH`)下:
```bash
python src/gui/water_quality_gui.py
```
依赖见 `requirements.txt`地理栈GDAL/rasterio 等)建议在 **Conda** 环境按 `README-conda.md` / `requirements-conda.txt` 安装。
### 3.2 打包 Windows exe
在已激活的构建环境中执行(路径按本机调整):
```bash
pyinstaller scripts/water_quality_gui_file.spec
```
产物一般为 `scripts/dist/water_quality_gui.exe`(以 spec 中 `name` 为准。spec 中已收集 rasterio 动态库、conda `Library/bin` 下 DLL、`data/icons` 等。
### 3.3 多进程说明Windows / 打包)
- 若使用 **sklearn `GridSearchCV(n_jobs=-1)`** 等并行joblib 会起子进程;**冻结 exe 时可能出现控制台窗口闪烁**。缓解思路:线程后端 `parallel_backend("threading")`、或 `n_jobs=1`、或模型内部 `n_jobs` 并行(需改 `modeling_batch.py`,交接时按需评估)。
- 入口脚本建议在 `if __name__ == "__main__":` 内、启动 GUI 前调用 `multiprocessing.freeze_support()`,以符合 PyInstaller + multiprocessing 规范(是否已加请以当前 `water_quality_gui.py` 为准)。
---
## 4. GUI 与流水线步骤对应关系
界面上的「步骤」通过 `WorkerThread.run_single_step` 映射到管线方法(配置键名与面板一致,如 `step6``step5_5`
| 配置键 / 逻辑步骤 | 管线方法名 |
|-------------------|------------|
| step1 | `step1_generate_water_mask` |
| step2 | `step2_find_glint_area` |
| step3 | `step3_remove_glint` |
| step4 | `step4_process_csv` |
| step5 | `step5_extract_training_spectra` |
| step5_5 | `step5_5_calculate_water_quality_indices` |
| step6 | `step6_train_models` |
| step6_5 | `step6_5_non_empirical_modeling` |
| step6_75 | `step6_75_custom_regression` |
| step7 | `step7_generate_sampling_points` |
| step8 | `step8_predict_water_quality` |
| step8_5 | `step8_5_predict_with_non_empirical_models` |
| step8_75 | `step8_75_predict_with_custom_regression` |
| step9 | `step9_generate_distribution_map` |
单步运行时会注入 `skip_dependency_check=True`,便于独立调试;全流程运行仍应保证输入/前置步骤产物存在。
---
## 5. 工作目录work_dir子文件夹命名
所有中间结果默认写在用户选择的 **工作目录** 下。当前代码中约定如下(**若磁盘上仍为旧文件夹名,需手动改名或重新跑流程**
| 子目录名 | 含义 |
|----------|------|
| `1_water_mask` | 水域掩膜 |
| `2_glint` | 耀斑相关 |
| `3_deglint` | 去耀斑影像 |
| `4_processed_data` | 处理后数据 |
| `5_training_spectra` | 训练光谱等 |
| `6_water_quality_indices` | 水质指数(原 `5_5_water_quality_indices` |
| `7_models` | 监督学习模型(原 `6_models` |
| `8_non_empirical_models` | 非经验模型(原 `6_5_non_empirical_models` |
| `9_custom_regression` | 自定义回归结果(原 `6_75_custom_regression` |
| `10_sampling` | 采样点/光谱(原 `7_sampling` |
| `11_12_13_predictions` | 预测 CSV 等(原 `8_predictions` |
| `14_visualization` | 图表、分布图、预览等(原 `9_visualization` |
| `reports` | 报告输出(原 `10_reports` |
**定义位置**`water_quality_inversion_pipeline_GUI.py` 构造函数中对 `self.*_dir` 的赋值GUI 中大量路径拼接需与此一致(如 `14_visualization``7_models`)。
---
## 6. 核心模块说明
| 模块路径 | 职责 |
|----------|------|
| `src/gui/water_quality_gui.py` | 主窗口、各步骤面板、线程 Worker、图像查看、配置收集与单步/全流程触发 |
| `src/core/water_quality_inversion_pipeline_GUI.py` | GUI 用流水线:步骤实现、目录管理、与可视化/报告类协作 |
| `src/core/water_quality_inversion_pipeline.py` | 无扩展步骤目录时的管线实现,供脚本或非 GUI 参考 |
| `src/core/modeling/modeling_batch.py` | 批量训练、`GridSearchCV`、模型落盘joblib |
| `src/core/prediction/inference_batch.py` | 批量预测与模型加载 |
| `src/core/glint_removal/*.py` | Goodman、Hedley、Kutser、SUGAR 等去耀斑算法 |
| `src/postprocessing/visualization_reports.py` | 水质可视化封装(输出目录常指向 `14_visualization` |
| `src/postprocessing/report_word.py` | Word 报告;默认从 `work_dir/14_visualization` 等读图 |
| `src/postprocessing/map.py` | 分布图、插值相关(内含开发者本地示例路径,勿当生产配置) |
---
## 7. 依赖与环境
- **Python**3.8+README 声明;实际环境以 `requirements-py310.txt` 等为准)。
- **关键库**PyQt5、numpy、pandas、scipy、scikit-learn、joblib、matplotlib、rasterio/geopandas视功能启用、opencv-python、Pillow 等。
- **Conda** GDAL 等二进制依赖推荐用 conda-forge`README-conda.md`
---
## 8. 维护与排错提示
1. **资源路径(打包后图标不显示)**:冻结运行时勿依赖 `Path(__file__)` 指向源码树;应使用 `sys._MEIPASS` 或项目内统一的 `get_icon_path()` 类逻辑。
2. **tqdm / 无控制台**:打包 GUI 时若 `sys.stdout``None`tqdm 可能报错;`Goodman.py` 等处已对 frozen GUI 做了 `disable` 处理,新增进度条时注意同样处理。
3. **配置与 YAML**:全流程配置由 GUI 各面板 `get_config()` 汇总;改字段名需同步管线 `**config['stepX']` 形参。
4. **文档滞后**`README_SAMPLING_MAP.md` 等若仍出现 `9_visualization` 等旧目录名,应以本文第 5 节为准或更新该文档。
---
## 9. 交接检查清单
- [ ] 已能在本机用 `python src/gui/water_quality_gui.py` 启动 GUI 并完成一次最小流程(或关键单步)。
- [ ] 已确认 Conda/pip 环境与 `README-conda.md``requirements.txt` 一致。
- [ ] 已阅读 `scripts/water_quality_gui_file.spec`,知悉打包入口与 `datas` 列表。
- [ ] 已知悉 `work_dir` 子目录当前命名,并能区分「配置键 step6」与「文件夹 `7_models`」。
- [ ] 已记录客户/内部使用的 **工作目录样例****典型输入数据格式**CSV 列、影像格式)。
- [ ] Git 远程、发布分支、Issue/需求跟踪方式已交接。
- [ ] 许可证与第三方库合规MIT 与 README 声明等)已确认。
---
## 10. 文档修订记录
| 日期 | 说明 |
|------|------|
| 2026-04-09 | 初版:目录结构、步骤映射、工作目录新命名、打包与多进程注意事项 |
---
**联系人(请交接时填写)**
| 角色 | 姓名 | 联系方式 |
|------|------|----------|
| 移交人 | | |
| 接收人 | | |