Файл обученных данных tesseract (версия tessdata_best) не работает на устройствах Android - PullRequest
0 голосов
/ 25 марта 2020

Я использую версию Tessdata_Best файла eng.traineddata для моего варианта использования. Я выполняю дальнейшее обучение по умолчанию tessdata_best eng.traineddata и использую вновь сгенерированный файл eng.traineddata после процесса обучения. Тессеракт отлично работает, когда я тестирую его на P C. Но когда я тестирую его на Android устройстве, инициализация тессеракта завершается неудачно.

Пример кода [для инициализации тессеракта]

[DllImport(TesseractDllName)]
private static extern IntPtr TessBaseAPICreate();
[DllImport(TesseractDllName)]
private static extern int TessBaseAPIInit3(IntPtr handle, string dataPath, string language);

public bool Init (string lang, string dataPath) {
    tessHandle = TessBaseAPICreate ();
    if (tessHandle.Equals (IntPtr.Zero)) {
            Debug.LogError("tessHandle equals IntPtr.Zero, initialization failed..!");
            return false;
    }
    if (TessBaseAPIInit3 (tessHandle, dataPath, lang) != 0) {
            Close ();
            Debug.LogError("Initialization failed, TessBaseAPIInit3()!=0");
            return false;
        }
    return true;
}

Сбой на шаге "if (TessBaseAPIInit3 (tessHandle, dataPath, lang )! = 0) ".

Теперь есть решение этой проблемы, как описано в этой ссылке a_compatible_traineddata_file_version

Но мне нужно пройти дополнительное обучение tesseract, для которого может использоваться только версия обученных файлов данных tessdata_best tesseract_best_repo

Итак, как мы можем использовать файл обученных данных tessdata_best, без проблем на устройстве android?

В качестве альтернативы, если описанное выше невозможно, можем ли мы как-то обучить tesseract с помощью файла обученных данных, который не является версией tessdata_best? в настоящее время я получаю эту ошибку «компонент eng.lstm отсутствует» при выполнении

training/combine_tessdata -e tessdata/best/eng.traineddata /tesstutorial/trainplusminus/eng.lstm

[из tesseract_docs ]

Кроме того, если я пытаюсь переопределить эту ошибку и запустите tesseract на android, несмотря на вышеуказанную ошибку, это вызывает app cra sh.

Спасибо ...

1 Ответ

0 голосов
/ 31 марта 2020

«TessBaseAPIInit3 (tessHandle, dataPath, lang)! = 0» может возникнуть, если обученные данные несовместимы с используемой версией тессеракта. В моем случае файл eng.traineddata поддерживал только LSTM (Tesseract версии 4.x). Поскольку dll tesseract для P C была Tessract версии 4, она работала на P C, но мои android dll были Tesseract версии 3.x, поэтому он не работал.

либо получите Tessract версии 4.x android dll, либо используйте файл с обученными данными, который поддерживает устаревшую версию Tesseract 3.x

Дополнительная информация:

In tesseract_4.x git репо, есть 3 различных типа файлов обученных данных.

  1. tessdata
  2. tessdata_best
  3. tessdata_fast

Здесь "tessdata" является и устаревшим, и LSTM-совместимым, то есть поддерживает как Tesseract 3, так и Tesseract 4. Остальные 2 поддерживают только Tesseract 4. Обученные данные файлы, доступные в ветке Tesseract 3, совместимы только с Tesseract 3.

...