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

Posted

技术标签:

【中文标题】没有从 Tesseract OCR 中获得有效的结果作为 newocr 生产【英文标题】:Not getting efficient result from Tesseract OCR as newocr producing 【发布时间】:2019-08-02 19:32:27 【问题描述】:

我正在开发一个需要从图像中识别文本的应用程序,还有什么比使用 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 网站时,它正在生成准确的文本。

newOcr 的结果。

此图像用于结果。

如果你有任何想法,请给我建议。

在挖掘更多并在 python 代码中运行相同的图像之后,我发现在 python pytesseract 中它的工作方式就像魅力一样,并产生与 newocr 一样的精确输出。但是当我在android中运行时,它并没有那么好用。所以可能是 Tesseract API 的问题。所以,现在如果你知道我还能做些什么来提高准确性。帮我。提前致谢。

【问题讨论】:

感谢您的回复@JimGrigoryan 我也对他们的结果感到惊讶,这就是为什么我邮寄给他们,要求他们进行什么样的图像处理?但什么也得不到。而且我知道有可用的 api,但我想离线实现它。所以我只想知道如何改进结果。谢谢。 【参考方案1】:
$ 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

【讨论】:

您能否详细说明您的答案,因为我无法理解您要说的内容? @user898678 这是对“如果你有任何想法请建议我做什么”的反应。和“我怀疑 newocr 是否像他们声称的那样使用 Tesseract。” - tesseract 版本 4 无需任何预处理即可处理它。 当我尝试在 python 中运行时,我也观察到了同样的事情。现在我需要一些可以优化库或 Tess-Two 产生准确输出所需的图像处理的东西。

以上是关于没有从 Tesseract OCR 中获得有效的结果作为 newocr 生产的主要内容,如果未能解决你的问题,请参考以下文章

iOS Tesseract OCR 图像准备

通过Tesseract实现简单的OCR

如何用三种不同的笔迹训练相同数字的tesseract-ocr?

Tesseract OCR 上的数字数字

对图像执行 OCR 时,Tesseract 返回乱码

进行 OCR 之前的预处理(tesseract、OpenCV)