没有从 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 生产的主要内容,如果未能解决你的问题,请参考以下文章