Tesseract does not recognize single characters

2020-02-10 15:27发布

问题:

How to represent:

  1. Create new image with paint (any size)
  2. Add letter A to this image
  3. Try to recognize -> tesseract will not find any letters
  4. Copy-paste this letter 5-6 times to this image
  5. Try to recognize -> tesseract will find all the letters

Why?

回答1:

You must set the "page segmentation mode" to "single char".

For example, in Android you do the following:

api.setPageSegMode(TessBaseAPI.pageSegMode.PSM_SINGLE_CHAR);


回答2:

You need to set Tesseract's page segmentation mode to "single character."



回答3:

Have you seen this?

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

The bug list shows it as "no longer an issue".

  • Be sure to have high resolution images.
  • If you are resizing the image, be sure to keep a high DPI and don't resize too small
  • Be sure to train your tesseract system
  • use the baseApi.setVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); code before the init Tesseract
  • Also, you may look into which font to use with OCR


回答4:

python code to do that configuration is like this:

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"
                                             " "))

the --psm flag defines the page segmentation mode.

according to documentaion of tesseract, 10 means :

Treat the image as a single character.

so to recognize a single character you just need to use : --psm 10 flag.



标签: ocr tesseract