Не получить эффективный результат от Tesseract OCR, так как newocr производит - PullRequest
3 голосов
/ 12 марта 2019

Я работаю над приложением, в котором мне нужно идентифицировать текст на изображении, и что может быть лучше, чем использование 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/.

Который также использует тессеракт в бэк-энде, как утверждает. Я также пытался связаться с ними по электронной почте, но ничего не могу от них получить.

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);

Это базовый код Тессеракта. Пожалуйста, помогите мне решить мою проблему. Спасибо ...

Ниже приведено изображение, которое я получаю после применения вышеупомянутой операции, но когда я передаю его тессеракту, я ничего не получаю, но при переходе на сайт newocr.com выдает точный текст.

image

Результат от newOcr.

Это изображение для результатов.

Check this image for results.

Пожалуйста, предложите мне, что делать, если у вас есть идеи.

После того, как копать больше и запускать одно и то же изображение в коде python, я обнаружил, что в pytesseract в python он работает как charm и производит точный вывод newocr. Но когда я бегу в Android, это не работает так хорошо. так может быть проблема с API Тессеракта. Итак, теперь, если вы знаете что-нибудь еще, что я могу сделать, чтобы улучшить точность. Помоги мне. Заранее спасибо.

1 Ответ

0 голосов
/ 12 марта 2019
$ 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
...