如何检测照片中的文字

How to detect text in a photo

我正在研究使用开源库检测照片测试的最佳方法。

我认为标准的方式如下(注意:步骤1-4全部使用OpenCV):

1) 检测文档的轮廓

2) 使用所述轮廓

转换文档,使其变平并裁剪

3) 使用滤镜将文档背景设为白色

4) 将生成的图像提供给 Tesseract

这是最佳流程,还是有更好的方法或更好的工具? 另外,如果照片没有文档大纲(可能第 1 步和第 2 步是多余的),会发生什么情况?

有没有自动检测文档方向(即纵向/横向)的方法?

我觉得你的流程没问题。我对 Android 项目使用了类似的过程。
我认为您可以发现文档是否为 portrait/landscape 的唯一方法是根据轮廓边界框的边长进行推理。
我不认为有一种自动的方法可以做到这一点,也许你可以找到最接近的 4 段折线的外部轮廓(在 opencv 中都可行)。
为了得到这个,你必须使用 contour hierarchy and contous approximation(参见 cv2.approxPolyDP)。
这就是我进行自动轮廓检测的方法。
正如我所说,您算法的其余部分对我来说似乎没问题。

PS。我会离开我的 Android project GitHub link。我不知道它是否对你有用,但在这里我通过拖动一些手柄来指定轮廓,然后使用 Java 和 OpenCV 转换图像并将其提供给 Tesseract。是的,在 Android 应用程序的主线程中执行此操作是一个非常糟糕的主意,是的,该应用程序尚未完成。我只是想尝试OCR,所以我不太关心性能和可用性,因为这不是为了使用,而是为了学习。

查找统一宽度变换。

它的作用是检测相对于相对边缘具有大致相同宽度的边缘。所以诸如排水管之类的东西(可以在以后通过时消除)以及大部分文本。虽然在概念上它类似于距离变换,但已发布的方法使用了相当特殊的法线投影方法和 Canny 边缘检测。