Тессеракт не распознает отдельные символы - PullRequest
14 голосов
/ 09 марта 2012

Как изобразить:

  1. Создание нового изображения с краской (любой размер)
  2. Добавить букву А к этому изображению
  3. Попробуйте распознать -> тессеракт не найдет букв
  4. Скопируйте и вставьте это письмо 5-6 раз в это изображение
  5. Попробуйте распознать -> тессеракт найдет все буквы

Почему?

Ответы [ 4 ]

18 голосов
/ 03 декабря 2013

Вы должны установить «режим сегментации страницы» на «один символ».

Например, в Android вы делаете следующее:

api.setPageSegMode(TessBaseAPI.pageSegMode.PSM_SINGLE_CHAR);
9 голосов
/ 05 июня 2012

Вам нужно установить режим сегментации страницы Тессеракта на «один символ».

7 голосов
/ 10 марта 2012

Вы видели это?

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

Список ошибок показывает, что «больше не проблема».

  • Обязательно используйте изображения с высоким разрешением.
  • Если вы изменяете размер изображения, обязательно сохраняйте высокое DPI и не изменяйте размер слишком маленьким
  • Обязательно обучите свою систему тессеракта
  • используйте код baseApi.setVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); перед init Tesseract
  • Также вы можете посмотреть , какой шрифт использовать с OCR
2 голосов
/ 12 октября 2018

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

флаг --psm определяет режим сегментации страницы.

согласно документации по тессеракту, 10 означает:

Рассматривать изображение как один символ.

так, чтобы распознать один символ, вам просто нужно использовать: --psm 10 флаг.

...