Course Material Fusion · Plan v2

白老师课件与课堂照片融合方案 v2(改造版)

课件、课堂照片与语音文字稿三源融合的落地方案。四阶段流水线:素材归一化 → 页面级对齐 → 分片融合 → 人工审校导出。核心机制:pHash 主判据、单调序列对齐、evidence 强制字段、人工审核门。含 8 处改造的原因与利弊、环境能力实测与合规风险清单。

对齐优先 · 融合后置 · 每条结论带 evidence

版本 v2 改造版 日期 2026-09-24 适用 老师 PPT + 课堂照片 + 语音文字稿 → 可追溯课程资料

适用场景:老师提供 PPT,学员在课堂现场拍摄了大量投影、板书和演示照片,已有基于语音文字稿生成的讲稿或笔记。目标是把三部分内容合并成一份准确、可追溯、可继续编辑的课程资料。

本版说明:v2 在 v1(2026-09-24 初版)基础上做了 8 处改造,全部围绕一条原则——把"依赖模型能力"的环节,换成"在现有环境下真能跑起来、且可审计"的环节。改造原因与利弊见附录 A,环境能力实测见附录 B。


一、结论

最稳妥的做法不是把 PPT、全部照片和文字稿一次性交给大模型,而是建立一条四阶段流水线:

素材归一化 → 页面级对齐 → 分片融合 → 人工审校与导出

核心分工:

素材 在最终结果中的作用
老师 PPT 页面结构、标题、正文、图表和原始版式
课堂照片 证明老师现场实际展示了什么,以及临时修改、圈画、板书
语音文字稿 老师真正的讲解、举例、补充和口头强调
已有草稿 语言组织、章节结构和已完成的初步整理
模型推测 只能作为待确认信息,且必须显式标注为推测

需要遵守的基本原则:

  1. PPT 是页面骨架,但不能代替老师现场讲解。
  2. 课堂照片是现场证据,但不能默认与老师提供的 PPT 完全一致。
  3. 文字稿是讲解内容的主要来源,但可能存在错别字、同音字和断句错误。
  4. 已有草稿是二次加工结果,不能让草稿覆盖 PPT、照片或文字稿中的原始事实。
  5. 每一个重要结论都必须能追溯到具体页面、照片或文字稿时间点(v2 强化:落成字段,不只是要求)。

二、为什么不建议直接"全量喂给模型"

直接把几百张照片和完整 PPT、文字稿一次性输入,会遇到:

  • 模型上下文和图片数量有限,内容越多,早期页面越容易被忽略。
  • 手机照片存在倾斜、透视变形、反光、摩尔纹和遮挡,视觉识别不稳定。
  • 老师实际播放的 PPT 可能与文件版本不同,模型很难自行判断应相信哪一份。
  • 文字稿没有天然页码,无法自动对应到正确 PPT 页面。
  • 一整份输出很难核对错误来自 PPT、照片、转写还是模型改写。
  • 一旦模型判断错误,后续融合内容会连续错误,且难以定位。

v2 补充第 7 条:还要先确认"计划使用的能力是否真的存在"。v1 默认可用的"视觉向量/embedding"与"高质量中文 OCR",在本次实施环境里都不具备(见附录 B)。方案必须先落到环境能力上,否则流程设计得再漂亮也跑不起来。

因此应先把素材拆成"页面级小任务",每个任务只处理一页或少量页面。

三、建议的素材目录

course/
├─ ppt/
│  ├─ teacher.pptx
│  └─ slide-png/
│     ├─ 001.png
│     ├─ 002.png
│     └─ ...
├─ photos/
│  ├─ IMG_0001.jpg
│  ├─ IMG_0002.jpg
│  └─ ...
├─ transcript/
│  ├─ transcript.srt
│  └─ transcript.txt
├─ draft/
│  └─ openclaw-version.md
├─ work/          ← 中间产物(可重跑、可审计)
└─ out/           ← 最终交付

素材要求

1. 老师 PPT

优先准备三种形式:

  • 原始 .pptx:提取标题、正文、表格、讲者备注。
  • PDF:用于逐页阅读和页面渲染。
  • 逐页 PNG:最方便进行页面级视觉比较。

如果暂时不能导出 PNG,至少提供 PPTX + PDF。 v2 注意:python-pptx 只能抽文本,抽不出版式与图表关系;页面骨架必须靠渲染(libreoffice → PDF → pdftoppm),会有字体/版本漂移,渲染后需抽查几页版式。

2. 现场照片

  • 尽量保留原图,不要先压缩、改名或截屏转发。
  • 保留文件名和 EXIF 拍摄时间(v2:EXIF 只用于排序,不用于绝对时间对齐,见阶段二)。
  • 同一页面拍了多张时全部保留,后续去重和选优。
  • 不要只挑"看起来清楚"的照片——模糊照片有时仍能证明老师做了某个修改。

3. 语音文字稿

优先使用带时间戳的 SRT / VTT / JSON:

00:18:32,000 --> 00:18:47,000
这里我们不是直接把参数代入,而是先用它判断约束条件。

若无时间戳,也可用纯文本,但页面与讲解的自动对应准确率会下降。 v2 注意:如果连音频都还没转写,需要先跑 ASR(本机已装 whisper / faster-whisper,无 GPU,纯 CPU,2 小时录音需按小时级预算安排)。

4. 已有草稿

以 Markdown 或纯文本提供,保留原有章节标题,不要提前改成最终格式。

四、总体实现流程

┌────────────────────┐
│ PPTX / PDF / 页面图 │
└─────────┬──────────┘
          │ 抽文本、讲者备注;渲染逐页 PNG
          ▼
┌────────────────────┐
│ 课件页面索引 + pHash │
└─────────┬──────────┘
          │
┌─────────┴──────────┐     ┌──────────────────┐
│ 现场照片            │     │ 文字稿            │
│ EXIF 排序 / pHash   │     │ 分段 / 时间戳     │
│ 去重 / 清晰度分     │     │ 轻量纠错(留原文) │
└─────────┬──────────┘     └────────┬─────────┘
          └───────────┬─────────────┘
                      ▼
        ┌──────────────────────────┐
        │ 三路单调序列对齐           │  ← v2 核心改造
        │ 照片↔页 / 文字稿↔页        │
        │ 低置信 → VLM 复核 / 人工   │
        └─────────┬────────────────┘
                  ▼
        ┌──────────────────────────┐
        │ 人工审 alignment-review   │  ← 硬门,不确认不融合
        └─────────┬────────────────┘
                  ▼
        ┌──────────────────────────┐
        │ 分片融合(每批 1–3 页)    │
        │ 输出带 evidence 的结构化   │
        └─────────┬────────────────┘
                  ▼
        ┌──────────────────────────────────┐
        │ out/:JSON / Markdown / 增强PPT / 网站 │
        └──────────────────────────────────┘

五、阶段一:素材归一化

0. 先做素材体检(v2 新增,第一步)

只清点、不改写。输出一份体检表:课件页数、照片张数与拍摄时间范围、文字稿时长、缺什么。缺料直接阻断,不要带着残缺素材往下跑。

1. PPT 归一化

从 PPTX 提取:页码、标题、各文本框内容、表格、图片图表、讲者备注;再用 libreoffice → PDF → pdftoppm 渲染逐页 PNG。

{
  "slide_id": "S012",
  "page": 12,
  "title": "约束条件下的最优解",
  "text": ["目标函数", "约束条件", "可行域"],
  "speaker_notes": "此处补充课堂例题",
  "slide_image": "ppt/slide-png/012.png",
  "phash": "af2f68e0e09f9494"
}

2. 照片归一化

对每张照片:

  1. 读取拍摄时间和原始尺寸。
  2. 按 EXIF 方向自动旋转(保持原图不动)。
  3. 计算 pHash(感知哈希)——v2 用它替代 v1 的"视觉向量"。
  4. 计算清晰度分(拉普拉斯方差归一化)。
  5. 生成 512px 缩略图。
  6. 按 pHash 距离去重(≤6 视为同画面),保留清晰度更高的一张,被丢弃的标 dup_of,不删文件。
{
  "photo_id": "IMG_0037",
  "path": "photos/IMG_0037.jpg",
  "captured_at": "2026-09-20T14:32:18+08:00",
  "time_source": "exif",
  "phash": "af2d60e0e01f9f92",
  "quality_score": 0.86,
  "dup_of": null
}

v2 去掉了 v1 的"判断是否包含投影屏幕/白板/纸张/人物"和"透视校正"两项——它们需要目标检测模型或至少较重的 CV 流程,当前环境下性价比低。透视校正确认需要时再补。

3. 文字稿归一化

切分为带时间范围的语义片段,并做轻量纠错、同时保留原文:

{
  "segment_id": "T0184",
  "start": "00:18:32",
  "end": "00:20:11",
  "text": "这里的重点不是计算,而是先判断可行域。",
  "text_raw": "这里的可行欲先判断",
  "text_normalized": "这里的可行域要先判断",
  "keywords": ["可行域", "约束条件"]
}

六、阶段二:页面级对齐(v2 改造最大的地方)

这是整个方案最关键的一步,也是 v1 最脆弱的一步。

1. v1 的问题

  • v1 用 OCR 文字相似度做主判据,但环境里只有 tesseract chi_sim,对反光/倾斜/摩尔纹的投影照片识别率会明显掉——主判据建在弱 OCR 上,会系统性错配。
  • v1 用照片 EXIF「拍摄时间」对齐页序,但照片时间是墙钟时间、文字稿是相对秒数,两者之间缺一个时间基准。结果是前段对得上、后段整体漂移,而且错得很隐蔽。

2. v2 的判据组合

信号 作用 v2 变化
pHash 相似度 主判据:同一页面的重拍/压缩/亮度变化都能匹配 ✅ 替代"视觉向量"
拍摄顺序 约束:课堂按顺序拍,页码只增不减 ✅ 替代 EXIF 绝对时间
OCR 文字相似度 可选补证:版式极像的连续公式页用它二次确认 ⬇️ 从主判据降级
文字稿关键词重叠(字符 bigram) 文字稿归页、补足照片模糊的页 ✅ 保留并强化
VLM 复核 低置信度页人工前的一道机器复核 ✅ 新增

3. 单调序列对齐(v2 核心机制)

不再计算绝对时间,而是求解一个非降序最优指派:把"按拍摄顺序排列的照片序列"映射到"按页码排列的页面序列",要求页码单调不减。

  • 收益:彻底绕开时间基准问题——不需要找锚点、不需要处理时区。
  • 前提:课堂确实是按顺序拍的。若学员乱翻相册、跨节课混拍或补拍前面的页,单调性被破坏,会连锁错配。
  • 兜底:status != confirmed 的页一律进人工复核;不强迫每张照片都匹配页面。

4. 阈值与低置信处理

  • confirmed(自动确认)/ review(人工复核)/ weak(弱)/ no_photo(无对应照片)。
  • 低于 photo_floor 的照片-页指派直接作废,照片转入"未被指派照片",不污染页面。

务必注意:这些阈值是经验起点值,不是标定值。必须先跑 20–30 页人工标注集校准,把合格线定成"人工只需复核 ≤20% 的页面",而不是死卡 90%(手机拍投影达不到 90%,硬卡会永远过不了)。

5. 对齐结果表(人工审核用)

slide_id,slide_title,photo_ids,transcript_range,confidence,status,notes
S011,目标函数,IMG_0033;IMG_0034,00:16:10-00:18:31,0.94,confirmed,
S012,约束条件,IMG_0037,00:18:32-00:20:11,0.72,review,照片有遮挡
S013,可行域,,00:20:12-00:22:05,0.45,no_photo,未找到对应照片

审核重点:

  • status != confirmed 的页;
  • 没有匹配照片的 PPT 页(不代表该页不重要);
  • 一张照片对应多页的情况;
  • 文字稿跨页;
  • 老师现场跳过、增加或修改的页面;
  • 未被指派照片清单——里面往往藏着板书和临时演示。

七、阶段三:分片融合

1. 每批只处理少量页面

每批包含:1–3 页 PPT(含文字、页码、讲者备注)+ 3–5 张候选照片 + 对应时间段的文字稿 + 草稿中对应段落。不要整份喂模型。

2. 强制 evidence 字段(v2 核心机制)

v1 把"不要编造"写在提示词里——提示词里的约束不可审计。v2 把它落成数据结构:每一条结论都必须挂证据。

{
  "slide_id": "S012",
  "pptx_page": 12,
  "title": "约束条件",
  "ppt_content": [
    { "text": "目标函数与约束条件共同决定可行域", "evidence": ["S012"] }
  ],
  "teacher_explanation": [
    { "text": "老师强调先判断约束是否可行,再计算最优解。", "evidence": ["T0184"] }
  ],
  "photo_observations": [
    { "text": "老师在图上圈出了第二个约束条件。", "evidence": ["IMG_0037"], "confidence": 0.88 }
  ],
  "differences": [
    { "type": "live_annotation",
      "description": "现场 PPT 比原始文件多了第二个约束条件的圈注。",
      "evidence": ["S012", "IMG_0037"] }
  ],
  "merged_notes": [
    { "text": "先判断约束条件,再讨论目标函数的最优解。", "evidence": ["S012", "T0184"] }
  ],
  "confidence": 0.91,
  "requires_review": false
}

evidence 取值约定:S### = 课件页、T#### = 文字稿片段、IMG_#### = 课堂照片。

3. 融合顺序

  1. 确定 PPT 原始内容。
  2. 确定老师现场实际展示的内容。
  3. 加入老师的口头解释和例子。
  4. 对比已有草稿是否遗漏、误解或扩展。
  5. 标记冲突与不确定信息。
  6. 生成适合目标读者的讲解文本。

4. 防编造硬规则(写进提示词,逐条对应到上面的字段)

  • 只能使用输入材料中出现的事实。
  • 图片看不清时写"无法确认",不要根据上下文补全。
  • 数字、公式、专有名词必须回到原图和文字稿核对。
  • 模型推测必须标记为推测。
  • 不能因为某页没有照片就删掉老师 PPT 的内容。
  • 不能因为文字稿没讲某页就认为该页不重要。
  • 无 evidence 的结论一律标 [未核实]。
  • 冲突双写并标注来源,不得静默裁决。

八、阶段四:审校与导出

1. 审核清单

  • PPT 页面是否全部被处理。
  • 每页是否至少检查了对应照片。
  • 未匹配照片是否已经人工查看。
  • 时间戳是否存在明显跳跃或错位。
  • 公式、数字、人名、专有名词是否正确。
  • PPT、照片和文字稿冲突处是否保留说明。
  • 草稿中的新增内容是否有来源。
  • 最终文章是否混淆了"老师原话"和"整理者解释"。
  • 是否所有结论都带 evidence;[未核实] 项是否已清零或保留说明。

2. 建议导出格式

course_fusion.json     完整结构化数据(含 evidence)
alignment-review.csv   页面与照片对齐审核表
unmatched-photos/      未被指派的照片
conflicts.md           冲突和低置信度问题
final-notes.md         最终课堂笔记
enhanced.pptx          原 PPT + 讲者备注(不覆盖原文件)
index.html             可检索的课程网站

九、执行方式

适合承担:调度、文件读取、图片理解、结构化整理。不建议依赖单次长对话完成全部工作。

推荐执行步骤

  1. 把整个课程目录交出去,而不是逐张发照片。
  2. 第一步只做素材体检,不改写内容。
  3. 第二阶段做归一化与对齐,产出 alignment-review.csv。
  4. 暂停,人工审核对齐表。
  5. 第三阶段按页或按 3 页一批融合,逐页输出带 evidence 的 JSON。
  6. 最后做全局去重、章节合并与语言润色。
  7. 导出 out/ 下的全部交付物。

推荐提示词框架

请处理 course/ 目录中的课程素材。

第一步只做体检和索引,不要直接生成最终讲稿:
1. 清点 PPT、PPT 页面图、现场照片、文字稿和现有草稿,输出缺料清单。
2. 提取每页 PPT 的标题、正文和讲者备注。
3. 对照片做排序、pHash、清晰度评分与去重。
4. 用「单调序列对齐」把照片和文字稿匹配到 PPT 页面,给出置信度与证据。
5. 输出 alignment-review.csv 和 unmatched-photos 清单。

严格要求:
- 不修改原始文件。
- 不确定的信息进入待审核列表。
- 不根据上下文补全看不清的公式和数字。
- 每个匹配结果都必须给出证据。
- 对齐表完成后暂停,等待人工确认,再进入融合阶段。

融合阶段要求:
- 每批 1–3 页;每条结论必须带 evidence(S###/T####/IMG_####)。
- 无证据的结论标 [未核实];冲突双写并标注来源。

十、小样验证

不要一开始处理全部材料。先选:10 页 PPT + 20–30 张照片 + 5–10 分钟文字稿 + 一段现有草稿。

指标 合格标准(v2 修订)
页面与照片对齐 自动确认(confirmed)占比达标,人工只需复核 ≤20% 的页面
内容可追溯 100% 的重要结论带 evidence,能定位到 PPT、照片或时间戳
冲突可见 未匹配、低置信度和冲突内容不被隐藏,全部出现在审核表与 conflicts.md
阈值有效性 用 20–30 页人工标注集校准后,confirmed 的误配率 < 5%

v1 的"高置信匹配达到 90% 以上"取消:没有标注口径、也无法在手机拍投影的素材上稳定达成,改成上面可测量、可校准的版本。

小样通过后,再扩充到完整课程。

十一、实施优先级

第一优先级:必须做

  • 素材体检(缺料阻断);
  • 导出 PPT 页面图片;
  • 保留照片原图和拍摄时间;
  • 生成带时间戳的转写;
  • 先对齐、后融合;
  • 人工审核门;
  • evidence 字段机制。

第二优先级:显著提升效果

  • pHash 去重与清晰度优选;
  • 低置信页的 VLM 复核;
  • 页面级结构化 JSON;
  • 自动生成审核表。

第三优先级:后续扩展

  • 照片透视校正(侧拍严重时);
  • 时间锚点机制(需要按分钟切片讲稿时);
  • 自动生成增强版 PPT;
  • 课程网站与检索问答;
  • 多门课程的统一知识库。

十二、最终交付建议

第一版先交付:

  1. 一份完整的融合方案(本文档);
  2. 一套固定目录规范;
  3. 一个 10 页小样(含 alignment-review.csv 与 conflicts.md);
  4. 小样通过后,再批量处理全部照片和 PPT。

附录 A|改造原因与利弊(逐条)

# v1 做法 v2 改造 原因 利 弊
1 视觉向量 / embedding pHash(DCT 8×8) 环境无 embedding/CLIP 模型与 GPU 零模型依赖、纯 CPU、单张 <10ms;同页重拍/压缩/亮度变化极稳 对倾斜 >30°、透视、大遮挡不鲁棒
2 OCR 作主判据 OCR 降级为可选补证 仅有 tesseract chi_sim,投影照片中文识别不可靠 避免"错配还很自信";耗时大幅下降 失去文字级证据,连续相似版式页区分力下降
3 EXIF 时间对齐页序 单调序列对齐(DP) 墙钟时间 vs 相对秒数缺少基准,后段整体漂移 彻底绕开时间基准、时区问题 依赖"按顺序拍"的前提;乱序/混拍会连锁错配
4 提示词要求"别编造" 强制 evidence 字段 提示词约束不可审计 可审计、可抽检、可定位错误环节 输出变长,token 消耗上升
5 未定义未匹配照片 单列未指派照片 + photo_floor 板书/噪声照片不应被硬塞进页面 不丢板书,不污染页面 人工要看的东西变多
6 硬性 90% 合格线 可校准阈值 + "人工复核 ≤20%" 90% 无标注口径,手机拍投影达不到 可测量、可按课调参 默认阈值是经验值,未标定前不可当结论
7 融合自由发挥 结构化任务包(schema + 硬规则 + 提示词) 输出同构才能批量核验与回滚 可批量校验、可断点续跑 灵活性下降,特殊版式需人工改写
8 未提合规 明确课件著作权 + 学员肖像权须书面授权 不解决就不能对外交付 避免白做 增加一个非技术卡点,交付范围可能受限

保留不变的(v1 本来是对的):四阶段流水线、先对齐后融合、每批 1–3 页、保留原文与归一化文本双份、先跑小样、不覆盖原 PPT。

附录 B|环境能力实测(2026-09-24)

能力 状态
python-pptx 1.0.3 ✅ 可抽 pptx 文本与讲者备注
OpenCV 4.13 / Pillow 12 / numpy ✅ pHash、旋转、清晰度、缩略图
tesseract + chi_sim / eng ⚠️ 可用,但仅通用 OCR,不作主判据
libreoffice / pdftoppm ✅ pptx→pdf→逐页 PNG
ImageMagick / ffmpeg ✅
whisper / faster-whisper ✅ 已装,无 GPU,纯 CPU
VLM(看图理解) ✅ 可用(已实测)
视觉向量 / CLIP ❌ 未安装,且无 GPU
硬件 4 vCPU / 7GB 内存(可用约 3GB)/ 无 GPU;同机还跑着生产服务

结论:批量 OCR / ASR / VLM 必须限并发、走隔离进程或独立时段,避免与生产争抢资源。

附录 C|待办与风险

  1. 阈值标定:需要 20–30 页人工标注集才能定课程级阈值。
  2. 时间锚点机制:若需按分钟切片讲稿,仍需一张"能同时读到页码"的照片作为锚点。
  3. 透视校正:侧拍严重的课程需要补 cv2 四点变换。
  4. VLM 复核自动化:目前低置信页的机器复核仍是人工触发步骤。
  5. 增强版 PPT:讲者备注与照片引用的回写尚未实现。
  6. 合规:需要一份"课件使用 + 肖像使用"授权书模板;在拿到书面授权前,成果限定为内部学习用途,不对外发布。
  7. 资源隔离:整套批处理不得占用对话主会话,避免长任务把在线服务拖死。

版本:v2(改造版) 日期:2026-09-24 配套:一键审稿 式的"先对齐、后融合"脚本与技能见 projects/course-fusion/