2012-08-24 19 views
2

我已經做了大量的研究,並沒有找到適合的解決方案。我正在編寫Android OCR應用程序。我已經成功地加載了Tesseract和Leptonica,並且我成功地使用和處理圖像,並使用OCR將它們轉換爲文本。但是,識別的準確性並不好。糾偏和篩選圖像OCR

經過多次調整後,我們發現我們沒有過濾,清理和/或糾偏圖像,足以幫助Tesseract進行OCR處理。因此,我在互聯網上查找任何適合我的圖書館或代碼,並在Android上使用它無濟於事。

有沒有人知道一個庫或可以提供一些代碼來幫助我完成這個?我只需要一個位圖,將其轉換爲黑白,歪斜和/或執行一些過濾任務,並將其交給Tesseract,以便使用OCR將其轉換爲文本。

+0

請先嚐試[這裏](https://www.google.com/search?q=android+image+manipulation+library)。 –

回答

1

ImageMagick可以做到這一點。命令行:

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

-colorspace grayscale:幫助也處理彩色輸入。
-threshold 50%:玩的百分比值 - 但基本上它只轉換成黑色+白色。
-deskews:相差校正

但是,我不知道它是多麼容易或很難建立ImageMagick的Android平臺。它適用於Linux,Mac OS X,Windows,Solaris,HP-UX ......因此:無論如何它都是多平臺設計。

+0

謝謝!我將檢查如何將此庫移植到Android並在此處發佈。另外,我發現這個博客非常有用[鏈接](http://android-coding.blogspot.com/2012/05/image-processing-on-android-step-by.html)。這也是:[鏈接](http://xjaphx.wordpress.com/learning/tutorials/)。 –

+0

@ ManuelOrtizBey:哦,你可以使用** ['-convolve kernel'](http://www.imagemagick.org/script/command-line-options.php#convolve)**(其中* kernel *代表矩陣)與ImageMagick同樣的效果。 –

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

希望它有幫助。

+0

這裏的一個更好的解決方案是使用畫布和顏色矩陣,這將利用硬件渲染而不是使用軟件渲染的上述方法,結果將是令人難以置信的顯着提高速度。 –