Android OCR 仅使用流行的 tessercat fork 检测数字 tess-two
Android OCR detecting digits only using popular tessercat fork tess-two
我正在为 android tess-two https://github.com/rmtheis/tess-two 使用流行的 OCR tessercat 分支。我整合了所有的员工,它起作用了等等...
但我只需要检测数字,我现在的代码是:
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(pathToLngFile, langName);
baseApi.setImage(bitmap);
String recognizedText = baseApi.getUTF8Text();
baseApi.end();
doSomething(recognizedText);
从这里https://code.google.com/p/tesseract-ocr/wiki/FAQ#How_do_I_recognize_only_digits?
我使用的是 V3 版本,没有代码解决方案而是一些命令行解决方案 - 与 android 项目无关(我认为...)。所以我尝试实施版本 < V3 的解决方案并添加这一行:
baseApi.SetVariable("tessedit_char_whitelist", "0123456789");
我的问题是如何处理 init()?我不需要任何语言,但我仍然需要 init 和 aint init() 方法...
编辑:更具体
我的最终目标是纯文档(不是纯 Excel sheet),看起来像所附图片(header & 3 列由空格分隔)。
我的要求是让数字有意义:能够区分和确定哪些数字属于哪一行和哪一列。
谢谢,
我想做同样的事情,经过一番研究后,我决定捕获所有文本和数字,然后只保留数字,这对我有用:
//This Replaces all except numbers from 0 to 9
recognizedText = recognizedText.replaceAll("[^0-9]+", " ");
现在你可以用这些数字做任何你想做的事了。
例如,我使用这段代码将所有数字分成一个字符串数组,并在 TextView 上显示它们
String[] justnumbers = recognizedText.trim().split(" "); //Deletes blank spaces and splits the numbers
YourTextView.setText(Arrays.toString(justnumbers).replaceAll("\[|\]", "")) //sets the numbers into the TextView and deletes the "[]" from the String Array
您可以看到它正在运行 here。
希望对您有所帮助。
我让它有点不同。也许对某些人有用。
所以你需要先初始化API。
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(datapath, language, ocrEngineMode);
然后设置以下变量
baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "!?@#$%&*()<>_-+=/:;'\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
baseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, ".,0123456789");
baseApi.setVariable("classify_bln_numeric_mode", "1");
这样引擎将只检查数字。
我正在为 android tess-two https://github.com/rmtheis/tess-two 使用流行的 OCR tessercat 分支。我整合了所有的员工,它起作用了等等...
但我只需要检测数字,我现在的代码是:
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(pathToLngFile, langName);
baseApi.setImage(bitmap);
String recognizedText = baseApi.getUTF8Text();
baseApi.end();
doSomething(recognizedText);
从这里https://code.google.com/p/tesseract-ocr/wiki/FAQ#How_do_I_recognize_only_digits?
我使用的是 V3 版本,没有代码解决方案而是一些命令行解决方案 - 与 android 项目无关(我认为...)。所以我尝试实施版本 < V3 的解决方案并添加这一行:
baseApi.SetVariable("tessedit_char_whitelist", "0123456789");
我的问题是如何处理 init()?我不需要任何语言,但我仍然需要 init 和 aint init() 方法...
编辑:更具体
我的最终目标是纯文档(不是纯 Excel sheet),看起来像所附图片(header & 3 列由空格分隔)。
我的要求是让数字有意义:能够区分和确定哪些数字属于哪一行和哪一列。
谢谢,
我想做同样的事情,经过一番研究后,我决定捕获所有文本和数字,然后只保留数字,这对我有用:
//This Replaces all except numbers from 0 to 9
recognizedText = recognizedText.replaceAll("[^0-9]+", " ");
现在你可以用这些数字做任何你想做的事了。
例如,我使用这段代码将所有数字分成一个字符串数组,并在 TextView 上显示它们
String[] justnumbers = recognizedText.trim().split(" "); //Deletes blank spaces and splits the numbers
YourTextView.setText(Arrays.toString(justnumbers).replaceAll("\[|\]", "")) //sets the numbers into the TextView and deletes the "[]" from the String Array
您可以看到它正在运行 here。
希望对您有所帮助。
我让它有点不同。也许对某些人有用。
所以你需要先初始化API。
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(datapath, language, ocrEngineMode);
然后设置以下变量
baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "!?@#$%&*()<>_-+=/:;'\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
baseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, ".,0123456789");
baseApi.setVariable("classify_bln_numeric_mode", "1");
这样引擎将只检查数字。