笔记照片提取与PDF生成
任务目标
- 本 Skill 用于:从用户上传的笔记照片中提取文字内容并生成结构化的PDF文档
- 能力包含:OCR文字识别、智能纠错、内容整理、PDF文档生成
- 触发条件:用户上传照片并要求"提取笔记内容"、"生成PDF"、"整理照片中的文字"等
前置准备
- 依赖说明:OCR和PDF生成所需的Python包
paddlepaddle>=2.5.0 paddleocr>=2.7.0 reportlab>=4.0.0 Pillow>=10.0.0
操作步骤
1. 接收和预处理照片(支持分批上传)
- 初始化空的照片列表
-
循环上传流程(因单次限制最多10张,需分批上传):
1. 等待用户上传第一批照片(最多10张)
2. 将上传的照片路径添加到照片列表
3. 统计当前已上传照片数量
4. 询问用户: "是否还有照片需要上传?(回答'是'继续上传,回答'否'或'完毕'开始处理)"
5. 如果用户回答"是"或类似肯定表达:- 询问"请继续上传下一批照片"
- 返回步骤2继续接收
- 同时提示"已上传X张照片,最多支持50张"
6. 如果用户回答"否"、"完毕"、"已全部上传"或类似否定表达: - 退出循环,进入后续处理步骤
- 终止条件:用户明确表示上传完毕或达到50张上限
-
上传完成后的检查:
- 确认最终照片数量(不超过50张)
- 获取所有照片的文件路径列表
- 检查照片格式是否支持(jpg/jpeg/png/bmp等)
2. OCR文字提取
- 调用
scripts/extract_text.py批量识别照片中的文字
bash python3 scripts/extract_text.py <image_path1> <image_path2> ... - 该脚本返回每张照片的识别结果,包括:
image_path: 图片路径text: 识别的文本内容confidence: 识别置信度line_count: 识别的行数
3. 内容整理和排序
- 照片顺序判断:
- 如果照片文件名包含序号(如"page1.jpg", "note_001.png"等),按文件名排序
- 如果文件名无序,根据识别内容的语义逻辑判断顺序(例如:章节编号、页码、时间标记等)
-
对于无法确定顺序的情况,向用户确认或按文件名默认排序
-
内容整理:
- 清理OCR识别的噪音和错误(重复字符、乱码等)
- 识别章节标题、重点内容等结构信息
- 合并跨页内容的断点
-
保持原始笔记的逻辑结构
-
3.5 文字纠错(智能体自动执行):
- 错别字纠正: 利用上下文语义识别并修正OCR识别的错字、漏字、多字
- 例: "机器学习"识别为"机骰学习" → 修正为"机器学习"
- 例: "数据分析"识别为"数据分析"(少"的"字)→ 补全为"数据分析"
- 标点符号修正: 修正识别错误的标点符号
- 例: 句号识别为逗号、引号不匹配等问题
- 统一中英文标点的使用(根据内容语境判断)
- 格式规范化:
- 修复不当的换行和空格
- 统一段落缩进和间距
- 修正数字、字母的格式错误(如"O"识别为"0")
- 语义一致性检查:
- 确保专业术语的一致性
- 检查上下文逻辑是否连贯
- 对于明显的语义冲突进行修正
- 纠错原则:
- 仅修复有把握的明显错误,避免过度修改
- 对于模糊不清或不确定的内容,保留原文并标记"[识别模糊]"
- 保持原笔记的表达风格和用词习惯
- 修正后的内容应在语义上与原意图一致
4. PDF文档生成
- 将整理后的内容组织为章节结构:
json { "title": "笔记文档标题", "sections": [ { "title": "章节标题", "content": "章节内容..." }, ... ] } - 调用
scripts/create_pdf.py生成PDF:
bash python3 scripts/create_pdf.py <output_path> '<json_data>' - PDF文档会自动生成在用户可访问的位置
5. 结果交付
- 确认PDF文件生成成功
- 向用户说明:
- 提取的文字内容概要
- 照片数量和处理结果
- PDF文件位置
- 识别置信度情况(如果有低质量识别需提醒用户检查)
资源索引
- OCR识别脚本:见 scripts/extract_text.py(用途:批量识别图片中的文字,返回JSON格式结果)
- PDF生成脚本:见 scripts/create_pdf.py(用途:根据结构化内容生成PDF文档)
注意事项
- 分批上传机制: 由于单次上传限制为10张照片,必须使用循环上传流程,每次上传后询问用户是否继续,直到用户明确表示全部上传完毕
- 文字纠错原则: 智体会自动进行文字纠错,但仅修复有把握的明显错误;对于不确定的内容会保留原文并标记,避免过度修改导致语义改变
- 照片顺序处理是关键环节,需要根据文件名或内容语义智能判断
- OCR识别可能存在误差,建议提示用户重点检查关键信息;纠错功能可大幅提升准确率,但仍需用户最终确认
- 支持中英文混合识别,但手写字体识别准确率可能较低
- 如果某张照片识别失败(置信度极低),应在最终文档中标注并提示用户
- PDF文档的标题和章节结构由智能体根据内容自动设计,确保文档的可读性
- 达到50张上限时,应提示用户并询问是否开始处理,不再接受新照片
使用示例
示例1: 按文件名有序的照片
场景: 用户上传了按页码命名的照片(page1.jpg, page2.jpg, ...)
处理流程:
1. 获取照片列表并按文件名排序
2. 批量OCR识别
3. 按识别结果的顺序组织章节
4. 生成PDF,章节标题可使用"第1页"、"第2页"等
示例2: 文件名无序的照片
场景: 用户上传的照片文件名是随机生成的(IMG_001.jpg, IMG_002.jpg等)
处理流程:
1. OCR识别所有照片
2. 分析每张照片的识别内容,寻找序号、日期、章节标题等排序线索
3. 根据线索重新排序
4. 提取章节标题作为PDF章节名
5. 生成结构化PDF
示例3: 课程笔记整理
场景: 用户上传了课堂板书照片,要求整理为学习笔记
处理流程:
1. 批量OCR识别
2. 识别课程主题、章节标题、重点内容
3. 按课程逻辑组织内容结构
4. 生成PDF,标题使用课程名称,章节使用课程单元名称
5. 在最终提示中说明提取的笔记要点
示例4: 分批上传完整流程
场景: 用户有35张笔记照片需要处理,单次只能上传10张
对话流程示例:
智能体: 请上传您的笔记照片(每次最多10张)
用户: [上传10张照片]
智能体: 已收到10张照片。是否还有照片需要上传?(回答"是"继续上传,回答"否"开始处理)
用户: 是
智能体: 请继续上传下一批照片(已上传10/50张)
用户: [上传10张照片]
智能体: 已收到10张照片,总计20张。是否还有照片需要上传?(回答"是"继续上传,回答"否"开始处理)
用户: 是
智能体: 请继续上传下一批照片(已上传20/50张)
用户: [上传10张照片]
智能体: 已收到10张照片,总计30张。是否还有照片需要上传?(回答"是"继续上传,回答"否"开始处理)
用户: 是
智能体: 请继续上传下一批照片(已上传30/50张)
用户: [上传5张照片]
智能体: 已收到5张照片,总计35张。是否还有照片需要上传?(回答"是"继续上传,回答"否"开始处理)
用户: 否,已全部上传完毕
智能体: 好的,收到35张照片,开始提取笔记内容并生成PDF文档...
[执行OCR识别、内容整理、文字纠错、PDF生成]
智能体: PDF已生成完成,提取了35张照片的笔记内容...
智能体: 已自动纠正了以下识别错误:
- 修正了15处错别字(如"机骰学习"→"机器学习")
- 修正了8处标点符号错误
- 修复了3处格式问题(不当换行和空格)
- 有2处内容标记为"[识别模糊]",建议您重点检查