Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中tesseract OCR无法正确读取图像文本_Android - Fatal编程技术网

android中tesseract OCR无法正确读取图像文本

android中tesseract OCR无法正确读取图像文本,android,Android,我的应用程序具有tesseract ocr v3.02,它通过显示图像正常运行,但文本在我的edittext中显示不正确,一些不需要的字符也显示出来,或者一些字符被一些不同的字符替换,请从所有已经实现了这些应用程序的有经验的人那里得到一些帮助 我还想知道tesseract ocr是只读取纯白色背景的文本,还是像我发布的图像输出一样正确地读取文本 此外,当我从我的内置相机拍照时,需要花费大量的时间来显示输出,之后文本也无法正确显示。 我只想让我的应用程序读取仅出现在我图像中的文本 这里发布的是我的

我的应用程序具有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?