| | |
| | """ |
| | 快速后端测试脚本 |
| | """ |
| | import os |
| | import sys |
| | from pathlib import Path |
| |
|
| | |
| | project_root = Path(__file__).resolve().parent.parent |
| | sys.path.insert(0, str(project_root)) |
| | os.chdir(project_root) |
| |
|
| | output_file = project_root / "output" / "quick_test_results.txt" |
| | output_file.parent.mkdir(exist_ok=True) |
| |
|
| | def log(msg): |
| | """写入日志""" |
| | with open(output_file, "a", encoding="utf-8") as f: |
| | f.write(msg + "\n") |
| | print(msg) |
| |
|
| | |
| | with open(output_file, "w") as f: |
| | f.write("=== NeuroScan 快速测试 ===\n\n") |
| |
|
| | log("1. 测试模块导入...") |
| |
|
| | try: |
| | from app.services.dicom import DicomLoader |
| | log(" DicomLoader: OK") |
| | except Exception as e: |
| | log(f" DicomLoader: FAIL - {e}") |
| |
|
| | try: |
| | from app.services.registration import ImageRegistrator |
| | log(" ImageRegistrator: OK") |
| | except Exception as e: |
| | log(f" ImageRegistrator: FAIL - {e}") |
| |
|
| | try: |
| | from app.services.analysis import ChangeDetector |
| | log(" ChangeDetector: OK") |
| | except Exception as e: |
| | log(f" ChangeDetector: FAIL - {e}") |
| |
|
| | try: |
| | from app.services.report import ReportGenerator |
| | log(" ReportGenerator: OK") |
| | except Exception as e: |
| | log(f" ReportGenerator: FAIL - {e}") |
| |
|
| | log("\n2. 测试数据加载...") |
| |
|
| | try: |
| | loader = DicomLoader() |
| | data_dir = project_root / "data" / "processed" / "real_lung_001" |
| | if data_dir.exists(): |
| | baseline = data_dir / "baseline.nii.gz" |
| | if baseline.exists(): |
| | import nibabel as nib |
| | img = nib.load(baseline) |
| | data = img.get_fdata() |
| | log(f" 加载成功: shape={data.shape}") |
| | else: |
| | log(f" baseline.nii.gz 不存在") |
| | else: |
| | log(f" 数据目录不存在: {data_dir}") |
| | except Exception as e: |
| | log(f" 加载失败: {e}") |
| |
|
| | log("\n3. 测试报告生成...") |
| |
|
| | try: |
| | generator = ReportGenerator(llm_backend="template") |
| | report = generator.generate_longitudinal_report( |
| | patient_id="TEST001", |
| | baseline_date="2025-06-15", |
| | followup_date="2026-01-28", |
| | baseline_findings=[{"organ": "肺", "max_diameter_mm": 15.0, "volume_cc": 1.0, "mean_hu": -25, "shape": "圆形", "density_type": "实性"}], |
| | followup_findings=[{"organ": "肺", "max_diameter_mm": 12.0, "volume_cc": 0.8, "mean_hu": -20, "shape": "圆形", "density_type": "实性"}], |
| | registration_results={"rigid": "completed"}, |
| | change_results={"changed_voxels": 1000, "change_percent": 0.05}, |
| | modality="CT" |
| | ) |
| | log(f" 报告生成成功: {len(report)} 字符") |
| | |
| | |
| | report_path = project_root / "output" / "test_longitudinal_report.md" |
| | with open(report_path, "w", encoding="utf-8") as f: |
| | f.write(report) |
| | log(f" 报告保存至: {report_path}") |
| | except Exception as e: |
| | import traceback |
| | log(f" 报告生成失败: {e}") |
| | log(traceback.format_exc()) |
| |
|
| | log("\n4. 测试 LLM 连接...") |
| |
|
| | try: |
| | import ollama |
| | models = ollama.list() |
| | model_names = [m.model for m in models.models] |
| | log(f" Ollama 可用,模型: {model_names}") |
| | except Exception as e: |
| | log(f" Ollama 不可用: {e}") |
| |
|
| | log("\n=== 测试完成 ===") |
| |
|