Tesseract无法识别单个字符

int*_*_32 14 ocr tesseract

如何表示:

  1. 用油漆(任何尺寸)创建新图像
  2. 在此图像上添加字母A.
  3. 尝试识别 - > tesseract将找不到任何字母
  4. 将此信件复制粘贴5-6次到此图片
  5. 尝试识别 - > tesseract会找到所有的字母

为什么?

小智 18

您必须将"页面分段模式"设置为"单个字符".

例如,在Android中,您执行以下操作:

api.setPageSegMode(TessBaseAPI.pageSegMode.PSM_SINGLE_CHAR);
Run Code Online (Sandbox Code Playgroud)

  • `api.SetPageSegMode(tesseract :: PSM_SINGLE_CHAR);`对于C++用户;) (2认同)

rmt*_*eis 9

您需要将Tesseract的页面分段模式设置为"单个字符".

  • 嗯,这完全取决于你如何使用tesseract.如果你从shell调用它,你会说'tesseract $ image $ outbase -psm 10`.-psm设置页面分段模式,模式10用于单个字符.这一切都在手册页中. (4认同)

Sha*_*ghi 8

执行该配置的python代码如下:

import pytesseract
import cv2
img = cv2.imread("path to some image")
pytesseract.image_to_string(
     img, config=("-c tessedit"
                  "_char_whitelist=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
                  " --psm 10"
                  " -l osd"
                  " "))
Run Code Online (Sandbox Code Playgroud)

--psm标志定义了页面分段模式。

根据tesseract的documentaion,10意思是:

将图像视为单个字符。

所以要识别单个字符,您只需要使用 :--psm 10标志。


Try*_*ain 7

你见过这个吗?

https://code.google.com/p/tesseract-ocr/issues/detail?id=581

错误列表将其显示为"不再是问题".

  • 一定要有高分辨率的图像.
  • 如果要调整图像大小,请务必保持较高的DPI并且不要调整太小
  • 一定要训练你的tesseract系统
  • 使用baseApi.setVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");之前的代码init Tesseract
  • 此外,您可以查看OCR使用的字体