dify知识库需先将扫描版pdf用pdf2image转为300dpi裁边png,再经opencv灰度自适应二值化/去噪锐化/1650px归一化预处理,最后通过tesseract ocr(psm=6, lang=zho+eng)识别并置信度过滤与正则清洗。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让Dify知识库自动从扫描版PDF中提取可检索文本,但原始PDF是图片型的,直接上传识别率低、字段错乱、空格丢失——这说明预处理没走通。
先拆PDF再喂Tesseract
扫描PDF本质是多页图像容器,Dify知识库不支持直接OCR解析PDF页面,必须先转为单页PNG/JPEG。用pdf2image库执行转换,指定dpi=300且启用poppler的page_crop参数裁掉页眉页脚白边,否则Tesseract会把空白区域当文本块分析,导致布局识别崩溃。
转换后每页生成独立文件,命名格式为docname_page_001.png,确保后续Dify工作流能按序处理。
【关键前提】Poppler二进制路径必须写入环境变量POPPLER_PATH,Windows用户若漏设此变量,pdf2image会静默失败且不报错。
图像预处理三步法
方法一:灰度+自适应二值化(推荐用于手写/低对比扫描件)
用OpenCV读取PNG→转灰度图→调用cv2.adaptiveThreshold,blockSize设为35,C设为10。固定阈值会误杀细笔画,而自适应算法对墨迹浓淡变化敏感,实测在发票手写金额栏识别率提升27%。
方法二:去噪+锐化(适用于印刷体清晰但有扫描噪点的文档)
Dify 3.9.2更新重点增强系统安全性,引入 Chainguard 安全基础镜像并同步社区版 CVE 修复,同时优化 OpenSearch 向量存储兼容性、插件参数传输机制及 Helm 部署配置。新增工作流模型节点缓存能力,可减少重复凭证查询,显著提升复杂工作流初始化速度,为企业级 AI 应用提供更稳定、高效的运行体验。
先用cv2.medianBlur核大小=3去椒盐噪点,再用cv2.filter2D应用锐化卷积核。跳过此步会导致Tesseract将噪点识别为“.”或“i”,尤其在数字串中引发校验失败。
方法三:分辨率归一化(强制统一输入尺度)
所有图像resize到宽度1650像素,高度等比缩放。Tesseract 5.3 LSTM模型训练时以该尺寸为基准,非此尺寸输入会触发内部插值降质,字符切分错误率上升11%。
封装为Dify自定义组件
第一步:将预处理Python脚本打包为Dify支持的Node.js Wrapper组件,入口函数接收input_path和output_path两个参数。
第二步:在Dify工作流编辑器中拖入“Custom Code”节点,选择该组件,配置参数lang=zho+eng和psm=6(单文本块模式,避免表格被误判为多列)。
第三步:连接Tesseract OCR节点前,勾选“Enable confidence scoring”,输出结果自动附带每个字符的置信度值,低于0.6的片段会被标记为待人工复核。
第四步:在OCR节点后插入“Post-Processing”节点,运行正则清洗:去除连续空格、修正“0”→“0”全角数字、合并被换行切断的英文单词。这步不加会导致Excel导出时字段错位。









