如何检测照片中的文字
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 边缘检测。
我正在研究使用开源库检测照片测试的最佳方法。
我认为标准的方式如下(注意:步骤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 边缘检测。