1

我在我的应用程序中使用 tesseract ocr。为了使用 tesseract,我需要使用位于名为“tessdata”的目录中的多个语言文件。

这是我的方法代码:

    public String detectText(Bitmap bitmap) {
    TessBaseAPI tessBaseAPI = new TessBaseAPI();
    String DATA_PATH = Environment.getRootDirectory().getPath() + "/tessdata/";

    tessBaseAPI.setDebug(true);
    tessBaseAPI.init(DATA_PATH, "eng"); //Init the Tess with the trained data file, with english language

    tessBaseAPI.setImage(bitmap);

    String text = tessBaseAPI.getUTF8Text();

    tessBaseAPI.end();

    return text;
}

我使用了许多变体:

String DATA_PATH = Environment.getRootDirectory().getPath() + "/tessdata/";

并且每次应用程序因“找不到路径”异常而失败。我需要一个很好的方法来把这个目录放在安卓手机中,不管它是哪部手机,都可以得到它的路径。现在可以在应用程序根目录中找到“tessdata”目录。

我怎样才能做到这一点?

4

2 回答 2

2

不要包含"/tessdata/"在您的DATA_PATH变量中 - 只需保留该部分,但请确保该子文件夹存在于DATA_PATH.

于 2015-09-14T19:53:05.480 回答
0

来自源代码TessBaseAPI#init

public boolean init(String datapath, String language) {
    ...
    if (!datapath.endsWith(File.separator))
        datapath += File.separator;

    File tessdata = new File(datapath + "tessdata");
    if (!tessdata.exists() || !tessdata.isDirectory())
        throw new IllegalArgumentException("Data path must contain subfolder tessdata!");

这意味着

  • tessdata 子目录必须存在。
  • init 获取“tessdata”的父文件夹

您可以像这样创建它:

File dataPath = Environment.getDataDirectory(); 
   // or any other dir where you app has file write permissions

File tessSubDir = new File(dataPath,"tessdata");

tessSubDir.mkdirs(); // create if it does not exist

tessBaseAPI.init(dataPath.getAbsolutePath(), "eng");
于 2015-09-14T16:09:59.910 回答