Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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获得有效的结果,因为新OCR正在生成_Android_Opencv_Ocr_Tesseract_Text Recognition - Fatal编程技术网

Android 没有从Tesseract OCR获得有效的结果,因为新OCR正在生成

Android 没有从Tesseract OCR获得有效的结果,因为新OCR正在生成,android,opencv,ocr,tesseract,text-recognition,Android,Opencv,Ocr,Tesseract,Text Recognition,我正在开发一个应用程序,我需要从图像中识别文本,还有什么比使用Tesseract更好的方法。因为Tesseract是一个开放源代码并且被广泛接受。我在我的应用程序中使用了Tesseract。所以,我从用户那里获取图像,然后对图像应用2-3个操作,以提高获得结果的机会,但我并没有得到预期的结果 Java代码-> final Bitmap tessBitmap = Bitmap.createBitmap(image.getWidth(), image.getHeight(), Bitmap.

我正在开发一个应用程序,我需要从图像中识别文本,还有什么比使用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以获得输出,但效率不高,有时甚至无法在输出中获得任何内容。我已经将我的结果与一个在线网站进行了比较

正如它声称的那样,它还在后端使用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中,它的工作方式类似于charm,并产生了与newocr一样的精确输出。但当我在安卓系统中运行时,它并没有那么好用。因此,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

感谢您的回复@JimGrigoryan,我也对他们的结果感到惊讶,这就是为什么我给他们发邮件询问他们做了什么样的图像处理?但是什么也得不到。我知道有api可用,但我想离线实现。所以我只想知道如何提高结果。谢谢。我听不懂你想说什么,你能详细说明你的答案吗@USER898678这是对“如果你有任何想法,请建议我怎么做”和“我怀疑newocr是否像他们所说的那样使用Tesseract”的反应。-Tesseract版本4在没有任何预处理的情况下处理它。我在尝试用python运行时也观察到了同样的情况。现在我需要一些东西,可以优化库或一些图像处理,这将需要苔丝二产生准确的输出。