如何解决Tesseract是否在内部调整图像大小?
OpenCv无法读取图像的元数据。因此,我们无法获得图像的dpi。当有人在stackoverflow中询问与dpi相关的ocr问题时,
大多数答案都表示我们不需要DPI。我们只需要一个像素大小。
Changing image DPI for usage with tesseract
Change dpi of an image in OpenCV
在某些地方,没有人问dpi并需要提高OCR精度,有人想到将DPI设置为300会提高精度。
Tesseract OCR How do I improve result?
Best way to recognize characters in screenshot?
另一件事是,Tesseract在他们的官方页面上说过
Tesseract在DPI至少为300 dpi的图像上效果最好,因此调整图像大小可能会有所帮助。
- 我们无法根据高度和宽度分辨出图像分辨率
- 我们希望图像分辨率足够高以支持准确的OCR。
- 字体大小通常表示单位长度,而不是像素,例如,如果我们有72个点,则我们只有1英寸。字体大小12pt表示1/6英寸。
- 当我们有300 ppi图像和12pt字体大小的文本时,文本像素大小为300 1/6 = 50像素。 如果我们有60 ppi,则文本像素大小为60 1/6 = 10像素。
下面引用的是tesseract官方页面上的内容。 是否有最小/最大文本大小? (它不会读取屏幕文字!)
有一个最小的文本大小以确保合理的准确性。您必须考虑分辨率以及点大小。精度下降到10pt x 300dpi以下,迅速下降到8pt x 300dpi以下。快速检查是计算字符x高度的像素。 (X高度是小写字母x的高度。)在10pt x 300dpi时,x高度通常约为20像素,尽管字体之间的差异可能很大。在x高度小于10像素时,您几乎没有机会获得准确的结果,而在小于8像素时,大部分文本将被“消除噪声”。
使用LSTM似乎在30 px左右的地方还有一个最大x高度。除此之外,Tesseract无法产生准确的结果。传统引擎似乎不太容易做到这一点(请参见https://groups.google.com/forum/#!msg/tesseract-ocr/Wdh_JJwnw94/24JHDYQbBQAJ)。
从这些事情中,我得出一种解决方案,即 OCR需要10至12磅的字体大小的文本。这意味着如果我们有120 ppi(每英寸像素),那么我们需要20像素大小的高度。如果我们有300 ppi,则文本的高度需要50像素。
-
Tesseract是否在内部根据图像的dpi调整图像大小?
-
如果我确实使用opencv调整图像大小,那么如果在内部基于dpi进行调整大小,则需要将dpi设置为300 dpi。在OpenCV + PyTesseract中设置DPI的最简单方法是什么?但是我们可以使用PIL
解决方法
回答您的问题:
-
DPI 仅在扫描文档时才真正相关 - 它衡量每英寸使用多少点来表示扫描图像。一旦tesseract处理图像,它只关心像素。
-
据我所知没有。
-
您链接的 SO 答案与写图像有关,而不是阅读图像。
我想我了解您想要达到的核心内容。您正在尝试提高与字体/文本大小相关的结果的准确性。
一般来说,tesseract seems to work best on text that is about 32 px tall.
手动调整大小
如果您正在处理一小组图像或一组一致的图像,您可以手动调整这些图像的大小,使其具有大约 32 像素高的大写字母。这在理论上应该在 tesseract 中给出最好的结果。
自动调整大小
我正在处理不一致的数据集,因此我需要一种自动调整图像大小的方法。我要做的是找到图像中文本的边界框(使用 tesseract 本身,但你可以使用 EAST 或类似的东西)。
然后,我计算这些边界框的中间高度。使用它,我可以计算出我需要调整图像大小,以便图像中大写字母的中间高度为 ~32 像素高。
调整图像大小后,我重新运行 tesseract 并希望一切顺利。耶!
希望有所帮助! :)
奖励:我分享了这个函数的源代码 in this Gist
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。