Tesseract是否在内部调整图像大小?

2024-05-16 09:51:17 发布

您现在位置:Python中文网/ 问答频道 /正文

OpenCv不读取图像的元数据。因此,我们无法获得图像的dpi。当有人在stackoverflow中询问与dpi相关的ocr问题时

大多数回答说我们不需要新闻部。我们只需要一个像素大小

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 works best on images which have a DPI of at least 300 dpi, so it may be beneficial to resize images.

在谷歌搜索之后,我发现了以下东西

  1. 我们无法根据高度和宽度来判断图像分辨率
  2. 我们希望图像分辨率高到足以支持准确的OCR
  3. 字体大小通常意味着单位长度,而不是像素,就像我们有72个点,我们有一英寸。字体大小12pt表示1/6英寸
  4. 当我们有300个ppi图像,文本大小为12pt时,文本像素大小为3001/6=50像素。 如果我们有60 ppi,那么文本像素大小是601/6=10像素

下面引用的一条来自tesseract官方页面。 是否有最小/最大文本大小?(它不会读取屏幕文本!)

There is a minimum text size for reasonable accuracy. You have to consider resolution as well as point size. Accuracy drops off below 10pt x 300dpi, rapidly below 8pt x 300dpi. A quick check is to count the pixels of the x-height of your characters. (X-height is the height of the lower case x.) At 10pt x 300dpi x-heights are typically about 20 pixels, although this can vary dramatically from font to font. Below an x-height of 10 pixels, you have very little chance of accurate results, and below about 8 pixels, most of the text will be “noise removed”.

Using LSTM there seems also to be a maximum x-height somewhere around 30 px. Above that, Tesseract doesn’t produce accurate results. The legacy engine seems to be less prone to this (see https://groups.google.com/forum/#!msg/tesseract-ocr/Wdh_JJwnw94/24JHDYQbBQAJ).

从这些事情中,我得到了一个解决方案,那就是, 我们需要一个10到12磅字体大小的文字的OCR。这意味着如果我们有120 ppi(每英寸像素),那么我们需要一个20像素大小的高度。如果我们有300 ppi,那么我们需要一个50像素的文本高度


  1. 如果Opencv没有读取dpi信息。通过OpenCV的imread方法获得的图像的tesseract输入的默认dpi值是多少

  2. Tesseract是否在内部根据图像的dpi调整图像大小

  3. 如果我使用opencv调整图像大小,那么如果在内部根据dpi调整大小,我需要将dpi设置为300 dpi。在OpenCV+PyteSeract中设置DPI的最简单方法是什么?但是我们可以用PIL来做这件事


Tags: oftheto图像文本像素ppibe
1条回答
网友
1楼 · 发布于 2024-05-16 09:51:17

回答您的问题:

  1. DPI只有在扫描文档时才真正相关——它是一种测量每英寸有多少点用于表示扫描图像的方法。一旦tesseract处理图像,它只关心像素

  2. 据我所知不是这样

  3. 你链接到的答案与图像有关,而不是图像

我想我理解你想表达的核心意思。您正试图提高与字体/文本大小相关的结果的准确性

一般来说,tesseract seems to work best on text that is about 32 px tall.

手动调整大小

如果您正在处理一小组图像或一组一致的图像,则可以手动调整这些图像的大小,使其具有大约32像素高的大写字母。从理论上讲,这将在tesseract中产生最佳结果

自动调整大小

我使用的是不一致的数据集,所以我需要一种自动调整图像大小的方法。我要做的是找到图像中文本的边界框(使用tesseract本身,但可以使用EAST或类似的工具)

然后,我计算这些边界框的中间高度。使用它,我可以计算需要调整图像大小多少,以便图像中大写字母的中间高度约为32 px高

一旦我调整了图像的大小,我会重新运行tesseract,希望一切顺利。耶

希望能有所帮助!:)


奖励:我共享了这个函数的源代码in this Gist

相关问题 更多 >