android - 没有从 Tesseract OCR 获得有效的结果作为 newocr 生产

标签 android opencv ocr tesseract text-recognition

我正在开发一个应用程序,我需要在其中识别图像中的文本以及比使用 Tesseract 更好的方法。由于 Tesseract 是开源的并被广泛接受。我在我的应用程序中使用了 Tesseract。因此,我从用户那里获取图像,然后对图像应用 2-3 次操作以提高获得结果的机会,但我没有得到预期的结果。

Java 代码 ->

    final Bitmap tessBitmap = Bitmap.createBitmap(image.getWidth(), image.getHeight(), Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(tessBitmap);
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    canvas.drawBitmap(image, 0, 0, paint);

    Mat tessMat = new Mat();

    Utils.bitmapToMat(tessBitmap, tessMat);

    Imgproc.cvtColor(tessMat, tessMat, Imgproc.COLOR_RGB2GRAY);

    Imgproc.threshold(tessMat, tessMat, 0, 255, Imgproc.THRESH_BINARY + Imgproc.THRESH_OTSU);

    final Bitmap newTessBitmap = Bitmap.createBitmap(tessMat.width(), tessMat.height(), Bitmap.Config.RGB_565);

    Utils.matToBitmap(tessMat, newTessBitmap);

    final Bitmap finalTessBitmap = Bitmap.createBitmap(newTessBitmap.getWidth(), newTessBitmap.getHeight(), Bitmap.Config.ARGB_8888);

    Canvas tessCanvas = new Canvas(finalTessBitmap);
    Paint tessPaint = new Paint();
    tessPaint.setColor(Color.BLACK);
    tessCanvas.drawBitmap(newTessBitmap, 0, 0, tessPaint);

然后将此位图传递给 tesseract 以获得输出但效率不高,有时我什至没有得到任何输出。我将我的结果与一个在线网站进行了比较 https://www.newocr.com/ .

正如它声称的那样,它也在后端使用 tesseract。我也曾尝试通过电子邮件与他们联系,但无法从他们那里得到任何信息。

mTess = new TessBaseAPI();
tessModelPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/tesseract/";
mTess.init(tessModelPath, "eng", TessBaseAPI.OEM_TESSERACT_ONLY);                                 mTess.setPageSegMode(TessBaseAPI.PageSegMode.PSM_AUTO);
mTess.setImage(finalTessBitmap);

这是基本的 Tesseract 代码。请帮我解决我的问题。谢谢...

下面给出的是我在应用上述操作后得到的图像,但是当我将它传递给 tesseract 时,我没有得到任何东西,但是当传递给 newocr.com 网站时,它生成了准确的文本。

Image

newOcr 的结果。

此图片用于结果。

Check this image for results.

如果您有任何想法,请建议我该怎么做。

在深入挖掘并在 python 代码中运行相同的图像后,我发现在 python pytesseract 中它像 charm 一样工作并产生与 newocr 一样的精确输出。但是当我在 android 中运行时,它不能很好地工作。所以问题可能出在 Tesseract 的 API 上。所以,现在,如果您还知道我可以做些什么来提高准确性。帮我。提前致谢。

最佳答案

$ tesseract 8UIBw.jpg -
Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 613
Tillamook

没有任何预处理...

$ tesseract -v
tesseract 4.0.0-253-g3948
 leptonica-1.76.0 (Dec 14 2018, 15:34:47) [MSC v.1916 LIB Release x64]
  libgif 5.1.4 : libjpeg 9b : libpng 1.6.35 : libtiff 4.0.9 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.3.0
 Found AVX
 Found SSE

关于android - 没有从 Tesseract OCR 获得有效的结果作为 newocr 生产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55119596/

相关文章:

opencv - 在 OpenCV 中查找点集的轮廓

java - NoClassDefFound 错误,因为 System.loadLibrary(Core.NATIVE_LIBRARY_NAME)

opencv - 为 OCR 读取图像

java - Apk 扩展文件 - 应用程序许可 - 开发者帐户 - NOT_LICENSED 响应

android - 在 Android 上获取自动旋转信息

android - 显示弹出菜单时如何保持全屏?

opencv - 在 OpenCV 上实现特征脸

java - 如何使用java忽略Tesseract OCR中的特殊字符

android - 如何从类中获取字符串? (Android studio) abbyy OCR 识别

java - 如何防止在日志文件中打印异常语句