【问题标题】:Tesseract OCR output value正方体 OCR 输出值
【发布时间】:2016-04-20 03:49:37
【问题描述】:

我正在使用 tesseract 开发 android 应用程序。准确率超过85%。但是,我想对输出施加一些限制,例如,如果找不到文本或找不到有意义的单词,我想显示错误消息。 我看过文字仙女,但我无法理解他们的方法。 我希望输出是有意义的单词或句子,而不仅仅是随机字母..请帮助 这是我的 OCR 部分代码:

protected void onPhotoTaken() {
    _taken = true;

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 4;

    Bitmap bitmap = BitmapFactory.decodeFile(_path, options);

    try {
        ExifInterface exif = new ExifInterface(_path);
        int exifOrientation = exif.getAttributeInt(
                ExifInterface.TAG_ORIENTATION,
                ExifInterface.ORIENTATION_NORMAL);

        Log.v(TAG, "Orient: " + exifOrientation);

        int rotate = 0;

        switch (exifOrientation) {
        case ExifInterface.ORIENTATION_ROTATE_90:
            rotate = 90;
            break;
        case ExifInterface.ORIENTATION_ROTATE_180:
            rotate = 180;
            break;
        case ExifInterface.ORIENTATION_ROTATE_270:
            rotate = 270;
            break;
        }

        Log.v(TAG, "Rotation: " + rotate);

        if (rotate != 0) {

            // Getting width & height of the given image.
            int w = bitmap.getWidth();
            int h = bitmap.getHeight();

            // Setting pre rotate
            Matrix mtx = new Matrix();
            mtx.preRotate(rotate);

            // Rotating Bitmap
            bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false);
        }

        // Convert to ARGB_8888, required by tess
        bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);

    } catch (IOException e) {
        Log.e(TAG, "Couldn't correct orientation: " + e.toString());
    }

    // _image.setImageBitmap( bitmap );

    Log.v(TAG, "Before baseApi");

    TessBaseAPI baseApi = new TessBaseAPI();
    baseApi.setDebug(true);
    baseApi.init(DATA_PATH, lang);
    baseApi.setImage(bitmap);

    String recognizedText = baseApi.getUTF8Text();

    baseApi.end();

    // You now have the text in recognizedText var, you can do anything with it.
    // We will display a stripped out trimmed alpha-numeric version of it (if lang is eng)
    // so that garbage doesn't make it to the display.

    Log.v(TAG, "OCRED TEXT: " + recognizedText);

    if ( lang.equalsIgnoreCase("eng") ) {
        recognizedText = recognizedText.replaceAll("[^a-zA-Z0-9]+", " ");
    }

    recognizedText = recognizedText.trim();

    if ( recognizedText.length() != 0 ) {
        _field.setText(_field.getText().toString().length() == 0 ? recognizedText : _field.getText() + " " + recognizedText);
        _field.setSelection(_field.getText().toString().length());
    }

    }

}

【问题讨论】:

  • 你想在照片上写点什么吗?
  • 图像处理后如果没有找到文字或图像不清楚我想通知用户

标签: android text ocr tesseract


【解决方案1】:

你可以把你的错误显示放在其他部分

if ( recognizedText.length() != 0 ) {
        _field.setText(_field.getText().toString().length() == 0 ? recognizedText : _field.getText() + " " + recognizedText);
        _field.setSelection(_field.getText().toString().length());
    }else {
//Toast
//System.out.print
}

【讨论】:

  • 谢谢你,但不幸的是,如果没有找到像 V B G Z8 等字符串这样的文本,tesseract 会给我随机输出。我想做一些事情来防止这种情况发生。
猜你喜欢
  • 1970-01-01
  • 2012-08-10
  • 2015-04-21
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多