RCv*_*ram 5 python opencv tesseract dpi python-imaging-library
OpenCv 不读取图像的元数据。这样,我们就无法获取图像的 dpi。当有人在stackoverflow中询问dpi相关的ocr问题时,
\n大多数答案都说我们不需要 DPI。我们只需要像素大小。
\n\n\n在某些地方,没有人询问 dpi 并且需要提高 OCR 准确性,有人会想出将 DPI 设置为 300 会提高准确性的想法。
\n\n\n还有一件事是,Tesseract 在他们的官方页面上说
\n\n\nTesseract 在 DPI 至少为 300 dpi 的图像上效果最佳,因此调整图像大小可能会有好处。
\n
经过一番谷歌搜索后,我发现了以下内容。
\n下面引用的内容来自 tesseract 官方页面。\n有最小/最大文本大小吗?(它不会\xe2\x80\x99t读取屏幕文本!)
\n\n\n为了保证合理的准确性,有最小文本大小。您必须考虑分辨率和点大小。精度低于 10pt x 300dpi,迅速低于 8pt x 300dpi。快速检查是计算字符 x 高度的像素。(X 高度是小写字母 x 的高度。)在 10pt x 300dpi 下,x 高度通常约为 20 像素,尽管不同字体之间的差异可能很大。x 高度低于 10 像素时,获得准确结果的机会很小,低于大约 8 像素时,大部分文本将被 \xe2\x80\x9cnoise 删除\xe2\x80\x9d。
\n
\n\n使用 LSTM 时,最大 x 高度似乎也约为 30 px。除此之外,Tesseract 不会产生准确的结果。旧版引擎似乎不太容易出现这种情况(请参阅https://groups.google.com/forum/#!msg/tesseract-ocr/Wdh_JJwnw94/24JHDYQbBQAJ)。
\n
从这些事情中,我得出一个解决方案,那就是,\n我们需要 10 到 12 pt 字体大小的文本用于 OCR。这意味着如果我们有 120 ppi(每英寸像素),那么我们需要 20 像素大小的高度。如果我们有 300 ppi,那么我们需要 50 像素的文本高度。
\n如果Opencv没有读取dpi信息。通过 OpenCV 的 imread 方法获取图像的超立方体输入的默认 dpi 值是多少?
\nTesseract 内部是否根据图像的 dpi 调整图像大小?
\n如果我使用 opencv 调整图像大小,那么如果内部基于 dpi 调整大小,我需要将 dpi 设置为 300 dpi。在 OpenCV + pytesseract 中设置 DPI 最简单的方法是什么?但我们可以用PIL做到这一点
\n回答您的问题:
DPI 仅在扫描文档时才真正相关 - 它衡量的是每英寸有多少个点用于表示扫描的图像。一旦 tesseract 处理图像,它只关心像素。
据我所知还没有。
您链接的 SO 答案涉及写入图像,而不是读取图像。
我想我理解你想要表达的核心内容。您正在尝试提高结果的准确性,因为它与字体/文本大小相关。
一般来说,tesseract 似乎最适合高度约为 32 px 的文本。
如果您正在处理一小组图像或一组一致的图像,则可以手动调整这些图像的大小,使其大写字母高度约为 32 像素。理论上这应该在超立方体中给出最好的结果。
我正在处理不一致的数据集,因此我需要一种自动调整图像大小的方法。我所做的是找到图像中文本的边界框(使用 tesseract 本身,但您可以使用 EAST 或类似的东西)。
然后,我计算这些边界框的中值高度。使用它,我可以计算需要调整图像大小多少,以使图像中大写字母的中位高度约为 32 像素高。
调整图像大小后,我重新运行 tesseract 并希望得到最好的结果。耶!
希望能有所帮助!:)
奖励:我在这个要点中分享了这个函数的源代码