【问题标题】:tesseract traineddata (tessdata_best version) file not working on Android devicestesseract 训练数据(tessdata_best 版本)文件在 Android 设备上不起作用
【发布时间】:2020-03-25 12:27:03
【问题描述】:

我正在为我的用例使用 eng.traineddata 文件的 Tessdata_Best 版本。我对默认的 tessdata_best eng.traineddata 进行进一步训练,并在训练过程后使用新生成的 eng.traineddata 文件。当我在 PC 上测试时,Tesseract 工作正常。但是当我在 Android 设备上测试时,tesseract 初始化失败。

示例代码 [用于 tesseract 初始化]

[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 trainingdata 文件而不出现问题?

或者,如果上述方法不可行,我们能否以某种方式使用经过训练的数据文件(不是 tessdata_best 版本)来训练 tesseract? 目前我在运行时收到此错误“eng.lstm 组件不存在”

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

[来自tesseract_docs]

此外,如果我尝试覆盖此错误,并在出现上述错误的情况下在 android 上运行 tesseract,则会导致应用崩溃。

谢谢...

【问题讨论】:

    标签: android unity3d ocr tesseract


    【解决方案1】:

    如果训练的数据与我们使用的 tesseract 版本不兼容,则可能会出现“TessBaseAPIInit3 (tessHandle, dataPath, lang) != 0”。就我而言,eng.traineddata 文件仅支持 LSTM(Tesseract 版本 4.x)。由于 PC 的 tesseract dll 是 Tessract 版本 4,它可以在 PC 上运行,但我的 android dll 是 Tesseract ver 3.x,所以它没有运行。

    因此,要么获取 Tessract 4.x 版 android dll,要么使用支持旧版 Tesseract 3.x 版的训练数据文件

    附加信息:

    tesseract_4.x git repo 中,有 3 种不同类型的训练数据文件可用。

    1. tessdata
    2. tessdata_best
    3. tessdata_fast

    这里,“tessdata”既兼容旧版又兼容 LSTM,这意味着它同时支持 Tesseract 3 和 Tesseract 4。其余 2 只支持 Tesseract 4。 Tesseract 3 分支中可用的训练数据文件仅与 Tesseract 3 兼容。

    【讨论】:

      【解决方案2】:

      你必须检查你使用的是哪个版本的 Tesseract,android 上的 tesseract 库可能不兼容。

      1. 尝试仅将 Tesseract 引擎加载到 Tesseract 并检查它是否工作如下:

        使用 (var TessarEngine = new TesseractEngine(datapath, "eng", EngineMode.LstmOnly));

      2. 否则尝试仅将 Tesseract 引擎加载到 Tesseract 并检查它是否像下面这样工作:

        使用 (var TessarEngine = new TesseractEngine(datapath, "eng", EngineMode.TesseractOnly));

      或者如果您不确定,请使用两种引擎模式:

       using (var TessarEngine = new TesseractEngine(datapath, "eng", EngineMode.TesseractAndLstm)
      

      如果您为tessdata 文件夹设置了正确的数据路径,这应该适用于安卓和PC。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-20
        • 1970-01-01
        • 1970-01-01
        • 2012-06-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-29
        相关资源
        最近更新 更多