Tesseract没有给出任何识别结果(Android studio; Java)

我正在使用tesseract OCR在
Android Studio上制作应用程序.我制作了一个代码,可以识别手机摄像头拍摄的图像上的文字.问题:tesseract函数getUTF8Text()没有给出AT ALL的结果(null,尽管图片是带文本的).程序不会给出任何错误.

我想知道可能出现的问题:1.也许我没有正确地将tesseract整合到我的项目中? (在代码中使用tesseract类时,Compilator没有显示任何问题)2.代码中可能存在问题? (训练有素的数据路径??).

主要课程:
码:

private TessOCR Tess; 

//after taking picture I call:
PictureCallback pictureCallback = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
        String result = Tess.getOCRResult(bitmap);

        if (result != null) Log.i(TAG, result);
        else Log.i(TAG, "NO RESULT");
    }
};

TessOCR类用于tesseract trainingdata文件查找或添加和文本识别(构造函数仅用于查找训练的数据文件):

public class TessOCR {
public static final String PACKAGE_NAME = "com.example.dainius.ocr";
public static final String DATA_PATH = Environment
        .getExternalStorageDirectory().toString() + "/AndroidOCR/";
public static final String lang = "eng";

private static final String TAG = "OCR";
private TessBaseAPI mTess;

public TessOCR(AssetManager assetManager) {

    mTess = new TessBaseAPI();

    String[] paths = new String[] { DATA_PATH, DATA_PATH + "tessdata/" };

    for (String path : paths) {
        File dir = new File(path);
        if (!dir.exists()) {
            if (!dir.mkdirs()) {
                Log.v(TAG, "ERROR: Creation of directory " + path + " on sdcard failed");
                return;
            } else {
                Log.v(TAG, "Created directory " + path + " on sdcard");
            }
        }

    }

    if (!(new File(DATA_PATH + "tessdata/" + lang + ".traineddata")).exists()) {
        try {
            InputStream in = assetManager.open("tessdata/" + lang + ".traineddata");
            OutputStream out = new FileOutputStream(DATA_PATH
                    + "tessdata/" + lang + ".traineddata");

            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();

            Log.v(TAG, "Copied " + lang + " traineddata");
        } catch (IOException e) {
            Log.e(TAG, "Was unable to copy " + lang + " traineddata " + e.toString());
        }
    }

    mTess.setDebug(true);
    mTess.init(DATA_PATH, lang);
}

public String getOCRResult(Bitmap bitmap) {

    mTess.setImage(bitmap);
    String result = mTess.getUTF8Text();

    return result;
}

public void onDestroy() {
    if (mTess != null)
        mTess.end();
}

>如果这个问题是由于错误的tesseract集成引起的,请发布一个关于如何集成它的正确教程,因为互联网上的每个教程都彼此不同,很难理解如何正确地完成它.

最佳答案 我曾与Tesseract(tess4j)合作过.您是否尝试使用图像非常清晰且完全单色/灰度?我发现当我试图让Tesseract读取我的图像时,花时间操纵图像试图让Tesseract更容易,这样更有用.

如果你仍然无法让它产生输出并且没有显示任何错误,我会去here并使用教程重新启动Tesseract设置并按照他们的所有提示进行操作.它应该不会太难,.dll会被自动提取和加载.只要确保你的tessdata文件夹在正确的位置(根目录),你就拥有了所有的.jar(我认为你只需要4个,而不是全部,但请查看tess4j.sourceforge.com上的教程)作为编译时间库.

取自他们的网站:“用于OCR的图像应具有至少200 DPI的分辨率,通常为300 DPI,1 bpp(每像素位)单色或8 bpp灰度无压缩TIFF或PNG格式.”说实话,除了他们的PDF工具扫描易于阅读的高分辨率文档之外,我对Tesseract并没有太多的好运.

我没有让它第一次工作,因为它的价值.

点赞