对OCR进行校正并过滤图像

时间:2012-08-24 22:53:33

标签: android ocr tesseract

我做了很多研究,但没有找到合适的解决方案。我正在编写Android OCR应用程序。我已经成功加载了Tesseract和Leptonica,我成功地处理和处理图像,并使用OCR将它们转换为文本。但是,识别准确性不是很好。

经过大量调整后,我们发现我们没有对图像进行过滤,清洁和/或校正,以便在OCR处理中帮助Tesseract。因此,我在互联网上查找了适用于我的任何库或代码,并在Android上使用它无济于事。

有没有人知道图书馆或者可以提供一些代码来帮助我完成这项工作?我想要的是获取一个位图,将其转换为黑白,偏移校正和/或执行一些过滤任务,并将其交给Tesseract,以便使用OCR将其转换为文本。

2 个答案:

答案 0 :(得分:2)

ImageMagick可以做到这一点。命令行:

convert                              \
    input.{png,pdf,tif,jpeg,gif,...} \
   -colorspace grayscale             \
   -threshold 50%                    \
   -deskew                           \
    output.{png,pdf,tif,jpeg,gif,...}

-colorspace grayscale :有助于处理彩色输入 -threshold 50% :使用百分比值 - 但基本上只转换为黑色+白色。
-deskews :deskews

但是,我不确定为Android平台构建ImageMagick是多么容易或困难。它适用于Linux,Mac OS X,Windows,Solaris,HP-UX ......所以:它无论如何都是设计多平台。

答案 1 :(得分:1)

我使用以下方法将我的图像转换为B& W,这有助于我提高我的准确性。

    private Bitmap GetBinaryBitmap(Bitmap bitmap_src) {
    Bitmap bitmap_new = bitmap_src.copy(bitmap_src.getConfig(), true);

    for (int x = 0; x < bitmap_new.getWidth(); x++) {
        for (int y = 0; y < bitmap_new.getHeight(); y++) {
            int color = bitmap_new.getPixel(x, y);
            color = GetNewColor(color);
            bitmap_new.setPixel(x, y, color);
        }
    }

    return bitmap_new;
}


private double GetColorDistance(int c1, int c2) {
    int db = Color.blue(c1) - Color.blue(c2);
    int dg = Color.green(c1) - Color.green(c2);
    int dr = Color.red(c1) - Color.red(c2);

    double d = Math.sqrt(Math.pow(db, 2) + Math.pow(dg, 2) + Math.pow(dr, 2));
    return d;
}

private int GetNewColor(int c) {
    double dwhite = GetColorDistance(c, Color.WHITE);
    double dblack = GetColorDistance(c, Color.BLACK);

    if (dwhite <= dblack) {
        return Color.WHITE;

    } else {
        return Color.BLACK;
    }
}

希望它有所帮助。