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

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

View File

@ -536,7 +536,7 @@ class VisualizationWorkerThread(QThread):
wp = Path(self.work_dir)
if self.task == "mask_glint":
from src.postprocessing.visualization_reports import WaterQualityVisualization
viz = WaterQualityVisualization(output_dir=str(wp / "9_visualization"))
viz = WaterQualityVisualization(output_dir=str(wp / "14_visualization"))
preview_paths = viz.generate_glint_deglint_previews(
work_dir=str(wp),
output_subdir="glint_deglint_previews",
@ -572,7 +572,7 @@ class VisualizationWorkerThread(QThread):
csv_path = str(csv_files[0])
from src.postprocessing.point_map import SamplingPointMap
map_generator = SamplingPointMap(
output_dir=str(wp / "9_visualization" / "sampling_maps"),
output_dir=str(wp / "14_visualization" / "sampling_maps"),
fast_mode=True,
)
map_path = map_generator.create_sampling_point_map(
@ -597,7 +597,7 @@ class VisualizationWorkerThread(QThread):
)
elif self.task == "spectrum":
from src.postprocessing.visualization_reports import WaterQualityVisualization
viz = WaterQualityVisualization(output_dir=str(wp / "9_visualization"))
viz = WaterQualityVisualization(output_dir=str(wp / "14_visualization"))
csv_file = self.extra.get("csv_path")
wl = self.extra.get("wavelength_start_column", "UTM_Y")
n_groups = int(self.extra.get("n_groups", 5))
@ -641,7 +641,7 @@ class VisualizationWorkerThread(QThread):
)
elif self.task == "statistics":
from src.postprocessing.visualization_reports import WaterQualityVisualization
viz = WaterQualityVisualization(output_dir=str(wp / "9_visualization"))
viz = WaterQualityVisualization(output_dir=str(wp / "14_visualization"))
csv_file = self.extra.get("csv_path")
param_cols = self.extra.get("param_cols") or []
output_paths = viz.plot_statistical_charts(
@ -660,7 +660,7 @@ class VisualizationWorkerThread(QThread):
self.failed.emit("训练光谱 CSV 无效或不存在请确认已选择步骤5输出的文件。")
return
if not models_dir or not Path(models_dir).is_dir():
self.failed.emit("模型目录无效或不存在请确认步骤6已生成 6_models 下的参数子文件夹。")
self.failed.emit("模型目录无效或不存在请确认步骤6已生成 7_models 下的参数子文件夹。")
return
pipeline = WaterQualityInversionPipeline(work_dir=str(wp))
scatter_paths = pipeline.generate_model_scatter_plots(
@ -670,7 +670,7 @@ class VisualizationWorkerThread(QThread):
self.finished_ok.emit({"task": "scatter", "scatter_paths": scatter_paths or {}})
elif self.task == "generate_all_selected":
from src.postprocessing.visualization_reports import WaterQualityVisualization
viz = WaterQualityVisualization(output_dir=str(wp / "9_visualization"))
viz = WaterQualityVisualization(output_dir=str(wp / "14_visualization"))
parts = []
if self.extra.get("gen_mask_glint"):
preview_paths = viz.generate_glint_deglint_previews(
@ -703,7 +703,7 @@ class VisualizationWorkerThread(QThread):
csv_path = str(csv_files[0])
from src.postprocessing.point_map import SamplingPointMap
map_generator = SamplingPointMap(
output_dir=str(wp / "9_visualization" / "sampling_maps"),
output_dir=str(wp / "14_visualization" / "sampling_maps"),
fast_mode=True,
)
map_path = map_generator.create_sampling_point_map(
@ -2699,12 +2699,12 @@ class Step9Panel(QWidget):
params_group.setLayout(params_layout)
layout.addWidget(params_group)
# 输出目录可选在此目录下生成「CSV文件名_distribution.png」留空则用工作目录/9_visualization
# 输出目录可选在此目录下生成「CSV文件名_distribution.png」留空则用工作目录/14_visualization
self.output_dir = FileSelectWidget(
"输出分布图目录:",
"Directories;;All Files (*.*)"
)
self.output_dir.line_edit.setPlaceholderText("留空→工作目录/9_visualization")
self.output_dir.line_edit.setPlaceholderText("留空→工作目录/14_visualization")
# 修改浏览按钮为选择目录
self.output_dir.browse_btn.clicked.disconnect()
self.output_dir.browse_btn.clicked.connect(self.browse_output_dir)
@ -3404,10 +3404,10 @@ class ImageCategoryTree(QTreeWidget):
if not work_path.exists():
return
# 查找所有图像文件:9_visualization 为主,同时扫描步骤产出目录(如 1_water_mask 下的预览/叠置图)
# 查找所有图像文件:14_visualization 为主,同时扫描步骤产出目录(如 1_water_mask 下的预览/叠置图)
image_extensions = ['*.png', '*.jpg', '*.jpeg', '*.tif', '*.tiff', '*.bmp']
scan_roots: List[Path] = []
_viz = work_path / "9_visualization"
_viz = work_path / "14_visualization"
if _viz.is_dir():
scan_roots.append(_viz)
_wm = work_path / "1_water_mask"
@ -3761,7 +3761,7 @@ class VisualizationPanel(QWidget):
self,
"成功",
f"掩膜和耀斑缩略图生成完成,共 {cnt} 个预览图。\n"
f"保存位置: 9_visualization/glint_deglint_previews/",
f"保存位置: 14_visualization/glint_deglint_previews/",
)
else:
QMessageBox.warning(
@ -3776,7 +3776,7 @@ class VisualizationPanel(QWidget):
"成功",
"采样点地图生成完成。\n"
f"输出: {Path(map_path).name if map_path else ''}\n"
"路径: 9_visualization/sampling_maps/",
"路径: 14_visualization/sampling_maps/",
)
if map_path:
self.show_chart_viewer(map_path, "采样点分布图")
@ -3787,7 +3787,7 @@ class VisualizationPanel(QWidget):
errs = payload.get("errors") or []
msg = (
f"已为 {len(ok_paths)} 个水质参数生成光谱对比图。\n"
f"保存目录: 工作目录/9_visualization/"
f"保存目录: 工作目录/14_visualization/"
)
if errs:
msg += f"\n\n以下列未生成或出错 ({len(errs)} 项,详见日志):\n"
@ -3818,14 +3818,14 @@ class VisualizationPanel(QWidget):
self,
"成功",
f"已生成 {len(ok_paths)} 个模型评估散点图。\n"
f"保存位置: 9_visualization/scatter_plots/",
f"保存位置: 14_visualization/scatter_plots/",
)
self.show_chart_viewer(ok_paths[0], "模型评估散点图")
else:
QMessageBox.warning(
self,
"提示",
"未生成任何散点图。请确认 6_models 下已有各参数子目录及模型文件,"
"未生成任何散点图。请确认 7_models 下已有各参数子目录及模型文件,"
"且训练 CSV 与建模时一致。",
)
elif t == "generate_all_selected":
@ -3935,7 +3935,7 @@ class VisualizationPanel(QWidget):
self.gen_scatter_btn = QPushButton("📊 散点图")
self.gen_scatter_btn.setToolTip(
"基于工作目录下 5_training_spectra/training_spectra.csv 与 6_models 生成模型评估散点图"
"基于工作目录下 5_training_spectra/training_spectra.csv 与 7_models 生成模型评估散点图"
)
self.gen_scatter_btn.clicked.connect(lambda: self.generate_chart('scatter'))
specific_layout.addWidget(self.gen_scatter_btn)
@ -4000,7 +4000,7 @@ class VisualizationPanel(QWidget):
self.image_tree.scan_directory(str(work_path))
# 如果有图像,自动选择第一个
viz_dir = work_path / "9_visualization"
viz_dir = work_path / "14_visualization"
if viz_dir.exists():
image_files = list(viz_dir.glob("**/*.png")) + list(viz_dir.glob("**/*.jpg"))
if image_files:
@ -4082,7 +4082,7 @@ class VisualizationPanel(QWidget):
)
return
training_csv = training_spectra_csv
models_dir = work_path / "6_models"
models_dir = work_path / "7_models"
if not models_dir.is_dir() or not any(
d.is_dir() for d in models_dir.iterdir()
):
@ -4188,9 +4188,9 @@ class VisualizationPanel(QWidget):
return
work_path = Path(self.work_dir)
viz_dir = work_path / "9_visualization"
viz_dir2 = work_path / "9_visualization/boxplots"
viz_dir3 = work_path / "9_visualization/scatter_plots"
viz_dir = work_path / "14_visualization"
viz_dir2 = work_path / "14_visualization/boxplots"
viz_dir3 = work_path / "14_visualization/scatter_plots"
if not viz_dir.exists():
QMessageBox.warning(self, "警告",
f"可视化目录不存在:\n{viz_dir}\n\n请先生成图表。")
@ -4338,7 +4338,7 @@ class ReportGenerationPanel(QWidget):
layout.setSpacing(10)
intro = QLabel(
"根据工作目录下的可视化结果(9_visualization 等)生成 Word 分析报告。"
"根据工作目录下的可视化结果(14_visualization 等)生成 Word 分析报告。"
"需已存在可视化图表AI 分析通过 Ollama /api/chat 调用本地或远程服务。"
)
intro.setWordWrap(True)
@ -4350,7 +4350,7 @@ class ReportGenerationPanel(QWidget):
wd_row = QHBoxLayout()
self.work_dir_edit = QLineEdit()
self.work_dir_edit.setPlaceholderText("选择流程工作目录(含 9_visualization")
self.work_dir_edit.setPlaceholderText("选择流程工作目录(含 14_visualization")
wd_browse = QPushButton("浏览…")
wd_browse.clicked.connect(self.browse_work_dir)
sync_btn = QPushButton("同步主窗口工作目录")
@ -4362,7 +4362,7 @@ class ReportGenerationPanel(QWidget):
out_row = QHBoxLayout()
self.output_dir_edit = QLineEdit()
self.output_dir_edit.setPlaceholderText("留空则保存到 工作目录/9_visualization")
self.output_dir_edit.setPlaceholderText("留空则保存到 工作目录/14_visualization")
out_browse = QPushButton("浏览…")
out_browse.clicked.connect(self.browse_output_dir)
out_row.addWidget(self.output_dir_edit, 1)
@ -4494,7 +4494,7 @@ class ReportGenerationPanel(QWidget):
if not wd or not os.path.isdir(wd):
QMessageBox.warning(self, "提示", "请选择有效的工作目录。")
return
viz = Path(wd) / "9_visualization"
viz = Path(wd) / "14_visualization"
if not viz.is_dir():
QMessageBox.warning(
self,
@ -4755,7 +4755,7 @@ class Step6_5Panel(QWidget):
"输出模型目录:",
"Directories;;All Files (*.*)"
)
self.output_dir.line_edit.setPlaceholderText("6_5_non_empirical_models")
self.output_dir.line_edit.setPlaceholderText("8_non_empirical_models")
# 修改浏览按钮为选择目录
self.output_dir.browse_btn.clicked.disconnect()
self.output_dir.browse_btn.clicked.connect(self.browse_output_dir)
@ -4825,9 +4825,9 @@ class Step6_5Panel(QWidget):
# 如果output_dir为空使用工作目录或当前目录
main_window = self.parent().window()
if hasattr(main_window, 'work_dir') and main_window.work_dir:
output_dir = str(Path(main_window.work_dir) / "6_5_non_empirical_models")
output_dir = str(Path(main_window.work_dir) / "8_non_empirical_models")
else:
output_dir = str(Path.cwd() / "6_5_non_empirical_models")
output_dir = str(Path.cwd() / "8_non_empirical_models")
config['output_dir'] = output_dir
# 添加训练数据路径(用于独立运行)
@ -5044,7 +5044,7 @@ class Step6_75Panel(QWidget):
output_layout = QFormLayout()
self.output_dir = QLineEdit()
self.output_dir.setText("6_75_custom_regression")
self.output_dir.setText("9_custom_regression")
output_layout.addRow("输出目录名:", self.output_dir)
output_group.setLayout(output_layout)
@ -5202,7 +5202,7 @@ class Step6_75Panel(QWidget):
checkbox.setChecked(method in selected_methods)
if 'output_dir' in config:
self.output_dir.setText(config['output_dir'] or "6_75_custom_regression")
self.output_dir.setText(config['output_dir'] or "9_custom_regression")
if 'enabled' in config:
self.enable_checkbox.setChecked(config['enabled'])