Доступ к уверенности в python-tesseract

Я пытаюсь создать расширение OCR для python-tesseract, которое специально работает с таблицами данных с внутренней структурой (например, содержит промежуточные итоги и итоги для строк и столбцов, позволяя пользователю повысить точность за счет обеспечения структуры).

Я пытаюсь получить доступ к уверенности, которую tesseract присваивает нескольким результатам (например, всем результатам неограниченного прогона и всем прогонам с символами, ограниченными [0-9\.]).

Я видел некоторую информацию о доступе к атрибуту x_wconf метода API GetHOCRText, но не смог понять, как получить к нему доступ из API Python. Как вы вызываете/получаете доступ к этому значению? Спасибо!

Я использую python-tesseract 0.9.1 на OSX 10.10.3 с Python 2.7.


person Michael Delgado    schedule 07.06.2015    source источник


Ответы (1)


РЕДАКТИРОВАТЬ

На самом деле я все неправильно понял, я думал о pytesseract, а не о python-tesseract.

Если вы посмотрите на исходный код API (baseapi_mini.h), вы увидите, что есть некоторые функции, которые кажутся очень многообещающими для того, что вы пытаетесь сделать. Интересующий вас раздел начинается примерно со строки 500 или около того.

  char* GetUTF8Text();

  /**
   * Make a HTML-formatted string with hOCR markup from the internal
   * data structures.
   * page_number is 0-based but will appear in the output as 1-based.
   */
  char* GetHOCRText(int page_number);
  /**
   * The recognized text is returned as a char* which is coded in the same
   * format as a box file used in training. Returned string must be freed with
   * the delete [] operator.
   * Constructs coordinates in the original image - not just the rectangle.
   * page_number is a 0-based page index that will appear in the box file.
   */
  char* GetBoxText(int page_number);
  /**
   * The recognized text is returned as a char* which is coded
   * as UNLV format Latin-1 with specific reject and suspect codes
   * and must be freed with the delete [] operator.
   */
  char* GetUNLVText();
  /** Returns the (average) confidence value between 0 and 100. */
  int MeanTextConf();
  /**
   * Returns all word confidences (between 0 and 100) in an array, terminated
   * by -1.  The calling function must delete [] after use.
   * The number of confidences should correspond to the number of space-
   * delimited words in GetUTF8Text.
   */
  int* AllWordConfidences();

  /**
   * Applies the given word to the adaptive classifier if possible.
   * The word must be SPACE-DELIMITED UTF-8 - l i k e t h i s , so it can
   * tell the boundaries of the graphemes.
   * Assumes that SetImage/SetRectangle have been used to set the image
   * to the given word. The mode arg should be PSM_SINGLE_WORD or
   * PSM_CIRCLE_WORD, as that will be used to control layout analysis.
   * The currently set PageSegMode is preserved.
   * Returns false if adaption was not possible for some reason.
   */

https://bitbucket.org/3togo/python-tesseract/src/9ce0abe168297513d648406be5482b52d38d883b/src/baseapi_mini.h?at=master

Мой оригинальный ответ

Для этого вам придется написать собственную оболочку.

python-tesseract удобен, потому что он быстро запускает вас, но я бы не назвал его сложным. Вы можете прочитать исходный код и посмотреть, как это работает, но вот синопсис:

  1. Запишите входное изображение во временный файл

  2. Вызовите команду tesseract (из командной строки) в этом файле

  3. Вернуть результаты

Так что, если вы хотите сделать что-то особенное, это вообще не сработает.

У меня было приложение, в котором мне требовалась высокая производительность, и время, затраченное на ожидание записи файла на диск, ожидание запуска tesseract, загрузки изображения и его обработки, было слишком много.

Если я правильно помню (у меня больше нет доступа к источнику), я использовал ctypes, чтобы загрузить процесс tesseract, установить данные изображения и затем вызвать метод GetHOCRText. Затем, когда мне нужно было обработать другое изображение, мне не нужно было ждать, пока tesseract снова загрузится, я просто установил данные изображения и снова вызвал GetHOCRText.

Так что это не точное решение вашей проблемы, и это определенно не фрагмент кода, который вы можете использовать. Но, надеюсь, это поможет вам немного продвинуться к вашей цели.

Вот еще один вопрос об упаковке внешних библиотек: Обертка библиотеки C в Python : C, Cython или ctypes?

person Mike Sandford    schedule 23.06.2015