2012-08-24 4 views
2

J'ai fait beaucoup de recherches et je n'ai pas trouvé de solution appropriée pour cela. Je programme une application Android OCR. J'ai déjà chargé avec succès Tesseract et Leptonica et je réussis à prendre et à traiter des images ainsi qu'à les convertir en texte en utilisant l'OCR. Cependant, la précision de la reconnaissance n'est pas si bonne. Après beaucoup de peaufinage, nous avons découvert que nous ne filtrions pas, nettoyions et/ou redressions l'image suffisamment pour aider Tesseract dans le traitement OCR. Par conséquent, j'ai regardé sur Internet pour toute bibliothèque ou code qui fonctionnerait pour moi et l'utiliser sur Android en vain.Redresser et filtrer une image pour OCR

Est-ce que quelqu'un connaît une bibliothèque ou peut me fournir un code pour m'aider à accomplir cela? Tout ce que je veux, c'est prendre un bitmap, le convertir en noir et blanc, redresser et/ou exécuter quelques tâches de filtrage et le donner à Tesseract pour qu'il le convertisse en texte en utilisant OCR.

+0

Essayez d'abord [ici] (https://www.google.com/search?q=android+image+manipulation+library). –

Répondre

1

ImageMagick peut le faire. Commandline:

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

-colorspace grayscale: aide à traiter également entrée colorée. : Jouez avec la valeur du pourcentage - mais, fondamentalement, elle ne convertit que le noir et le blanc.
-deskews: deskews

Cependant, je ne sais pas comment il est facile à construire ou difficile ImageMagick pour la plate-forme Android. Il est disponible pour Linux, Mac OS X, Windows, Solaris, HP-UX, ... donc: il est multi-plateforme de toute façon.

+0

Merci! Je vais vérifier comment puis-je porter cette bibliothèque sur Android et poster ici. Aussi, j'ai trouvé ce blog très utile [link] (http://android-coding.blogspot.com/2012/05/image-processing-on-android-step-by.html). Et celui-ci aussi: [link] (http://xjaphx.wordpress.com/learning/tutorials/). –

+0

@ManuelOrtizBey: Oh, vous pouvez utiliser ** ['-convolve kernel'] (http://www.imagemagick.org/script/command-line-options.php#convolve) ** (où * noyau * représente le matrix) pour le même genre d'effets avec ImageMagick aussi. –

1

J'ai utilisé l'approche ci-dessous pour convertir mon image en B & W et cela m'a aidé à augmenter ma précision.

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

Espérons que cela aide.

+0

Une meilleure solution ici serait d'utiliser une matrice de toile et de couleur, cela utiliserait le rendu matériel au lieu de la méthode ci-dessus qui utilise le rendu logiciel, le résultat serait incroyablement significative augmentations de vitesse. –