推荐OpenCV+Pytesseract预处理(灰度化、Otsu二值化、透视校正、中值滤波)提升OCR精度;PDF需区分类型,图片型转高DPI图再OCR,并用pdfplumber获取坐标以支持表格结构还原。

用PythonOCR精准识别扫描文档
扫描件常因分辨率低、倾斜、阴影或背景噪点导致识别不准。直接调用OCR接口往往效果一般,需先做图像预处理。推荐使用OpenCV + Pytesseract组合:先灰度化、二值化(Otsu阈值),再做透视校正(针对歪斜文档)和去噪(中值滤波)。若文档含手写体或印章干扰,可叠加形态学操作(如闭运算连接断裂笔画)提升文字连通性。关键参数如tessedit_char_whitelist可限定只识别数字+字母+中文,避免符号误判。
从PDF中稳定提取文字内容
PDF分“可复制文本型”和“图片型”。前者用PyPDF2或pdfplumber直接提取;后者必须转图再OCR。建议统一走pdf2image转为高DPI(≥300)PNG,再送入OCR。注意多页PDF要批量处理并保留页码索引——可用字典结构存储:{'page_1': '文字内容', 'page_2': '...'}。若PDF含复杂排版(多栏、图文混排),pdfplumber的extract_words()比单纯extract_text()更可控,能获取每个字的坐标,便于后续按区域切分。
自动识别并还原表格结构
通用OCR(如Tesseract)默认输出纯文本,会丢失表格行列关系。进阶做法是“两步走”:先用OpenCV检测表格线框(Canny边缘+霍夫直线),定位单元格坐标;再对每个单元格区域单独OCR,最后按坐标排序拼成二维列表或DataFrame。更省力的选择是Camelot(适合规则线表)或LayoutParser检测标题、段落、列表等文档元素,再结合文字位置聚类还原逻辑表格。
提升准确率的关键细节
• 中文识别务必指定语言包:lang='chi_sim'(简体)或'chi_tra'(繁体),且确保tessdata路径正确
• 小字号文字(
• 对关键字段(如发票号、金额、日期),可加正则后处理过滤:例如re.search(r'¥\d+\.?\d*', text)提取金额
• 批量处理时保存中间图像(如校正后、二值化图),方便出错时人工核对环节
• 遇到固定模板文档(如报销单、体检报告),训练轻量级模板匹配模型(OpenCV模板匹配+OCR微调)比通用OCR更鲁棒










