android中tesseract OCR无法正确读取图像文本
我的应用程序具有tesseract ocr v3.02,它通过显示图像正常运行,但文本在我的edittext中显示不正确,一些不需要的字符也显示出来,或者一些字符被一些不同的字符替换,请从所有已经实现了这些应用程序的有经验的人那里得到一些帮助 我还想知道tesseract ocr是只读取纯白色背景的文本,还是像我发布的图像输出一样正确地读取文本 此外,当我从我的内置相机拍照时,需要花费大量的时间来显示输出,之后文本也无法正确显示。 我只想让我的应用程序读取仅出现在我图像中的文本 这里发布的是我的两个输出截图,请看一看 也在此处发布我的代码:android中tesseract OCR无法正确读取图像文本,android,Android,我的应用程序具有tesseract ocr v3.02,它通过显示图像正常运行,但文本在我的edittext中显示不正确,一些不需要的字符也显示出来,或者一些字符被一些不同的字符替换,请从所有已经实现了这些应用程序的有经验的人那里得到一些帮助 我还想知道tesseract ocr是只读取纯白色背景的文本,还是像我发布的图像输出一样正确地读取文本 此外,当我从我的内置相机拍照时,需要花费大量的时间来显示输出,之后文本也无法正确显示。 我只想让我的应用程序读取仅出现在我图像中的文本 这里发布的是我的
ExifInterface exif = null;
try {
exif = new ExifInterface(picturePath);
} catch (IOException e) {
e.printStackTrace();
}
int exifOrientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
int rotate = 0;
switch (exifOrientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
}
if (rotate != 0) {
// Setting pre rotate
Matrix mtx = new Matrix();
mtx.preRotate(rotate);
// Rotating Bitmap & convert to ARGB_8888, required by tess
bitmap = Bitmap.createBitmap(bitmap, 0, 0, newWidth, newHeight,
mtx, false);
}
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.setPageSegMode(TessBaseAPI.OEM_TESSERACT_CUBE_COMBINED);
baseApi.setPageSegMode(PageSegMode.PSM_AUTO_OSD);
baseApi.setPageSegMode(PageSegMode.PSM_SINGLE_LINE);
baseApi.setDebug(true);
baseApi.init(LanguageFilePath, "eng");
String whiteList = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.-";
String blackList = "@#$%*()+~`/&";
baseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, whiteList);
baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, blackList);
baseApi.setImage(bitmap);
String recognizedText = baseApi.getUTF8Text();
recognizedText = recognizedText.replaceAll(blackList, " ");
baseApi.end();
if (lang.equalsIgnoreCase("eng")) {
recognizedText = recognizedText.replaceAll("[^a-zA-Z0-9]", " ");
}
欢迎您提出任何建议,如有任何更改,请指导我。
谢谢。OCR软件总是有不准确的地方。您可以通过使用自定义的转换词汇表来增加一些智能,例如:
INEVER
变成NEVER
,WOULD
变成WOULD
,等等。先生,是的,这是我现在面临的问题,你能给我提供一些链接来说明如何创建我们自己的自定义词汇表吗?你可以简单地使用数据库表来实现这一点。我还想知道tesseract ocr是否只读取纯白色背景的文本。
。你现在可以自己回答了。它不需要这样。当然,如果能很好地将字符与背景区分开来,那就最好了。@greenapps先生,如果可能的话,您能告诉我如何告诉tesseract不要阅读斜体字体吗?您以前是否使用过tesseract ocr?