多区域不同倾斜文档的OCR倾斜校正Python方案咨询
同图多倾斜角度文本的OCR预处理实现方案
全局统一倾斜角校正的思路从根上不适用当前场景,必须切换为独立文本块拆分→单块角度计算→单块校正识别的处理流程,基于Python+OpenCV+PyTesseract即可落地,不需要额外引入深度学习模型。
- 独立文本块拆分
原图先转灰度,用自适应阈值做二值化,拿宽高比3:1左右的横向矩形核对二值图做膨胀,让同一倾斜角度下的连续文本粘连成独立连通块;调用OpenCV的连通域检测接口,筛掉面积小于阈值的噪点区域,每个保留的连通域就是一个倾斜角度一致的独立文本单元,截出每个连通域的最小外接矩形区域作为单独处理对象。 - 单块倾斜角计算
对每个单独的文本块,优先用最小面积外接矩形算角度:提取块内所有文本像素的坐标,计算其最小面积外接矩形的旋转参数,对返回的角度做归一化,把角度值映射到[-15°,15°]的正常文本倾斜区间,超出范围的自动加减90°修正,避免把倒置、竖排的文本角度算错。如果遇到字体稀疏、外接矩形角度偏差大的块,直接调用pytesseract.image_to_osd()传入单块图像,用Tesseract自带的方向与脚本检测模块返回准确倾斜角,准确率比手写霍夫线检测高不少。 - 单块校正与识别
拿到单块的倾斜角后,仅对当前块做旋转仿射变换,用双线性插值补全旋转后的边缘空白,得到水平正向的单块文本图,直接传入PyTesseract做内容识别即可。完全不需要把校正后的块拼回整图,拼回过程涉及坐标对齐、边缘重叠处理,反而会引入额外误差,识别后直接按数据提取规则匹配字段就行,处理速度也比整图旋转快很多。
之前试过的三类校正方法全部失效,核心原因是都是整图计算单一倾斜角做全局旋转,根本解决不了同图不同块角度不一致的问题,和参数调优没有关系。
内容的提问来源于stack exchange,提问作者Atish
相关产品推荐
相关产品推荐

