feat(ceus): 任务书 02 第一阶段——底层和分割之前的算法;修复 C14

任务书 01 遗留修复(C14):
- library 新增 check_key_image(path):关键图能逐像素保真重编码时返回 None,否则返回原因;
  _write_clean_png 的判断移过去,自身保留断言性质报错(走到这里说明 build 漏了检查)。
- build 写库前对每例调用,返回原因的整例跳过,记 C14「关键图能原样重编码」,涉及值写原因。
- 原来三条「关键图格式不对整次构建停下」的测试改为整例跳过,另加非 PNG、library 漏检报错两条。
- 结构.md 第八部分、guides/装配两个库.md 相应几行改掉。

第一阶段(src/cadx/ceus/):
- 照搬旧 geometry、video_decoder、research_config、split_screen、green_prompt、prompt_frames、
  mapping,去掉产品层,注释改中文。
- 配置类去掉全部默认值,strict、extra=forbid、frozen;新建 config/ceus.yaml(paths、ceus 两段),
  数值照抄旧 yaml,逐项注明出处。删去 source_view/target_view、effective_region、mapping 锚点;
  旧代码写死的分屏抽帧数 25 和搜索区间 (0.35, 0.65) 改成配置,值不变。
- 视频解码改为按路径用 cv2 逐帧读。
- 坐标换算改为两个视图矩形左上角之差,不再用按某种宽度写死的锚点。
- 造影画面在哪一半:两半各自选提示帧,恰好一半有才定,否则抛 ContrastSideError(CeusCaseError
  子类,带步号和原因,供第三阶段记 failed.csv)。
- 旧测试照搬(改 import 与配置读取方式),因上述改动不再成立的删去;新增两处修改的手算测试。
- import-linter 加「ceus 不引用其他 cadx 模块」。依赖加 numpy、opencv-python-headless。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-16 03:46:56 -04:00
parent de1d6b2d51
commit 9a916c65a5
29 changed files with 3634 additions and 45 deletions
+5 -3
View File
@@ -4,7 +4,7 @@
## 当前目标
第 2 步「装配两个库(不含 CEUS)」已按任务书 01 实现,等监督者验收。之后是第 3 步 CEUS 定量或会诊口径讨论(`结构.md` 第七部分)。
第 3 步 CEUS 定量,按任务书 02 分四个阶段做;第一阶段(底层和分割之前的算法)与 C14 修复已提交,下一个是第二阶段(MedSAM2 与后半段算法)。
## 已完成
@@ -17,6 +17,8 @@
- 2026-10-16 任务书 01 装配两个库:delivery、library、answers、runs(快照)、build 五个模块,`scripts/build.py`、`scripts/scan_library.py`、`config/build.yaml`,91 条测试,`make check` 通过(6 条导入契约)。两轮独立审阅的会悄悄漏答案的意见已修(C11–C13 加严、泄露扫描 NFKC、关键图只收能保真重编码的 PNG、YAML 拒绝重复键)。真实 40 例:40 例中 34 例进库,跳过 6 例全为 C10(跨表不一致,与 `待定问题/04` 一致),复核清单 2 条,泄露扫描命中 0;构建号与提交号见提交说明和本次汇报。使用说明 `guides/装配两个库.md`。
- 2026-10-16 任务书 02 第一阶段:`src/cadx/ceus/` 迁入配置(去掉全部默认值)、视频解码(按路径逐帧读)、分屏、绿框、提示帧、两半坐标换算;新写判断造影画面在哪一半(两半各选提示帧,恰好一半有才行,否则 `ContrastSideError`);坐标换算改为两个视图左上角之差,不再用锚点。`config/ceus.yaml` 只有 `paths`、`ceus` 两段。同一提交修了任务书 01 的关键图问题:不能保真重编码的关键图整例跳过,记 C14。`make check` 通过(348 条测试、7 条导入契约)。
## 未完成
- 2026-10-16 任务书 01 由执行者完成(提交 bceb01e),监督者验收通过:真实 40 例进库 34、跳过 6(C10 跨表不一致),独立脚本核对资料库内容与跳过名单一致,泄露扫描 0 命中。
@@ -37,8 +39,8 @@
## 下一步
- 监督者验收任务书 01。
- 待负责人定:关键图格式不合要求时整次停下还是整例跳过;化名种子在 git 里,拿到种子可反推进库病例的病例号先后(专家拿不到种子);含「造影提示:」的那份超声描述所在病例被 C10 跳过,故不在复核清单里。
- 任务书 02 第二阶段:MedSAM2 拷代码和权重、segment 模块、其余 11 个 ceus 模块迁移。
- 待负责人定:化名种子在 git 里,拿到种子可反推进库病例的病例号先后(专家拿不到种子);含「造影提示:」的那份超声描述所在病例被 C10 跳过,故不在复核清单里。
- 向临床方要编码映射表(性别、诊断、症状、既往史、化验档位)。
- 把 `待定问题/04`(6 例跨表不一致)、`待定问题/06`(1 份超声描述中段的「造影提示:」)转给医生;06 定之前的构建不做正式会诊。
- 等临床方交付 40 例的医生标注工作簿(含造影剂到达时间和注射时间)。