使用 OpenCV,如何在执行 OCR 之前检测文本方向?

Posted

技术标签:

【中文标题】使用 OpenCV,如何在执行 OCR 之前检测文本方向?【英文标题】:Using OpenCV, how can I detect text orientation before performing OCR? 【发布时间】:2012-04-24 17:50:46 【问题描述】:

我在 ios 应用程序中使用 OpenCV。我想对某些文本执行 OCR,但我首先需要确定它的方向。

如何在 OpenCV 中做到这一点?

【问题讨论】:

我想这可以通过估计文本对齐来完成。 太模糊了 - 没有关于提议的库或用例(手动扫描等)的更多细节。 @ScottCorscadden 使用 openCV 【参考方案1】:

我不确定在 Objective-C 中不提供 OCR 的情况下是否可以回答问题 - 如果不使用 OCR 库,几行文本很难做到这一点。

嗯,20 年前,我编写了一个 OCR 系统(不使用任何 OCR 库)来实时读取银行支票。顺便说一句,它还在验证手写签名。

检查方向的问题很严重,因为支票可以(由人工操作员)随机插入小型电动银行支票扫描仪中。

由于所有银行都使用不同的页面布局和装饰,不依赖磁性墨水(扫描仪未检测到)查找方向的唯一方法是实际尝试对在顶部找到的第一个字符进行 OCR 识别“页面”。

有些字符像“O”一样模棱两可,但大多数其他字符会告诉您图片是倒置还是镜像,因此只需阅读前 3-5 个字符即可完成工作(除非您有重复)。

祝你好运!

【讨论】:

【参考方案2】:

此答案已更新

如果需要检测文字的旋转角度,可以看this article(分享源码):

文本被校正后,可以执行 OCR 程序并将其结果与字典进行比较。如果匹配率很高,则说明文本已正确旋转并且方向现在正常。

【讨论】:

【参考方案3】:

几周前我遇到了类似的问题,只是在我分心之前才开始研究它。无论如何,您可以使用离散傅立叶变换(在一定程度上)实现您想要的。模糊或侵蚀图像,使单个单词/行中的所有小白色间隙都填充成一条实心黑线(这有助于从图像中去除大量高频噪声),对图像进行 DFT,应用低-通过或带通滤波器(频率根据相对于图像大小的所需字体大小),并分析生成的幅度图。您将需要进行一些研究,否则其他人将需要详细说明,但这绝对是我找到的最佳解决方案。

我现在正在做另一个项目,但我会在一周左右的时间内回到这个项目,如果其他人还没有这样做的话,我会告诉你更多的细节。当然,这个帖子现在有点老了,所以我什至可能没有得到回应哈哈,但无论如何它对将来的其他人来说是一个很好的参考。

【讨论】:

【参考方案4】:

Hough transform 可能是help you。霍夫投票地图上的最大值(准确地说是占主导地位的集群,但您需要 k-means 和 k=1)将为您提供所需的角度。

【讨论】:

以上是关于使用 OpenCV,如何在执行 OCR 之前检测文本方向?的主要内容,如果未能解决你的问题,请参考以下文章

文本的检测识别实战:使用 Tesseract 进行 OpenCV OCR 和文本识别

如何按位置对矩形数组进行排序?

使用 OpenCV 检测表

如何使用 OpenCV 进行 OCR 和文本检测识别

进行 OCR 之前的预处理(tesseract、OpenCV)

使用Python,OpenCV进行卡类型及16位卡号数字的OCR