2017-08-18 3 views
2

Je travaille sur Tesseract et j'ai déjà la fonctionnalité OCR. Je voulais optimiser l'image pour que les résultats OCR soient meilleurs. Actuellement, je ne fais que rendre l'image monochrome et la redimensionner pour doubler sa taille. Même après cela, j'ai des problèmes avec des polices plus petites.Java8, Tess4j: Optimiser l'image pour OCR avec tesseract

J'ai essayé de chercher, et here est l'une des meilleures réponses que je peux trouver. Malheureusement, cela fonctionne avec Bitmap et je ne trouve aucune classe native en Java qui fonctionne avec Bitmap. Il y a aussi une réponse avec du code Java, mais il utilise à nouveau Bitmap et ne spécifie pas de quel paquet il l'obtient.

D'où vient BitmapImageUtil.convertToGrayscale()?

code:

private String testOcr(String fileLocation, int attachId) { 
     try { 
      File imageFile = new File(fileLocation); 
      BufferedImage img = ImageIO.read(imageFile); 
      String identifier = String.valueOf(new BigInteger(130, random).toString(32)); 
      String blackAndWhiteImage = previewPath + identifier + ".png"; 
      File outputfile = new File(blackAndWhiteImage); 
      BufferedImage bufferedImage = BitmapImageUtil.convertToGrayscale(img,new Dimension(img.getWidth(),img.getHeight())); 
      bufferedImage = Scalr.resize(bufferedImage,img.getWidth()*2,img.getHeight()*2); 
      ImageIO.write(bufferedImage,"png",outputfile); 

      ITesseract instance = Tesseract.getInstance(); 
      // Point to one folder above tessdata directory, must contain training data 
      instance.setDatapath("/usr/share/tesseract-ocr/"); 
      // ISO 693-3 standard 
      instance.setLanguage("deu"); 
      String result = instance.doOCR(outputfile); 
// result processing with regex. 
} 
+0

Y at-il un emplacement général dans les images où vous pouvez vous attendre que le texte soit, ou peut-il apparaître partout? – CraigR8806

+0

@ CraigR8806: Ils peuvent être n'importe où dans l'image .. Merci. –

+0

Cela peut être utile ou non, mais avec la classe 'Image' intégrée à Java, vous avez un peu plus de contrôle sur la façon dont l'image est mise à l'échelle: https://docs.oracle.com/javase/7/docs/api/ java/awt/Image.html Si vous utilisez 'getScaledInstance()', le dernier paramètre vous permet de placer l'une des énumérations définies par la classe. Vous pouvez agrandir votre image plus grande et conserver la clarté avec un autre algorithme de mise à l'échelle – CraigR8806

Répondre