我做了很多研究,但没有找到合适的解决方案。我正在编写Android OCR应用程序。我已经成功加载了Tesseract和Leptonica,我成功地处理和处理图像,并使用OCR将它们转换为文本。但是,识别准确性不是很好。
经过大量调整后,我们发现我们没有对图像进行过滤,清洁和/或校正,以便在OCR处理中帮助Tesseract。因此,我在互联网上查找了适用于我的任何库或代码,并在Android上使用它无济于事。
有没有人知道图书馆或者可以提供一些代码来帮助我完成这项工作?我想要的是获取一个位图,将其转换为黑白,偏移校正和/或执行一些过滤任务,并将其交给Tesseract,以便使用OCR将其转换为文本。
答案 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;
}
}
希望它有所帮助。