package mj.ocraptor.extraction.image_processing; import java.awt.image.BufferedImage; import java.io.Closeable; import java.io.File; import java.util.List; import mj.ocraptor.MainController; import mj.ocraptor.MainController.Status; import mj.ocraptor.configuration.Config; import mj.ocraptor.configuration.properties.ConfigString; public abstract class ImageTextExtractor implements Closeable { protected final ImageTools preprocessor; protected BufferedImage lastGivenBufferedImage; protected BufferedImage lastProcessedBufferedImage; protected File lastGivenImageFile; protected Config cfg; private String[] languages; /** * */ public ImageTextExtractor() { this.lastGivenImageFile = null; this.lastProcessedBufferedImage = null; this.cfg = Config.inst(); this.preprocessor = new ImageTools(); String rawLanguageString = this.cfg .getProp(ConfigString.DEFAULT_LANGUAGE_FOR_OCR); if (rawLanguageString == null || rawLanguageString.trim().isEmpty()) { throw new NullPointerException(); } this.languages = rawLanguageString.split(";"); List<String> availableLanguageFiles = Config.getLanguageStrings(); for (String lang : this.languages) { if (!availableLanguageFiles.contains(lang.trim())) { throw new NullPointerException("LANGUAGE TRAINDATA NOT FOUND: \"" + lang + "\""); } } } /** * * * @param image * @param languages * @return * */ public abstract String extractText(BufferedImage image, String originalPath, String... languages); /** * * * @param image * @return */ public String extractText(BufferedImage image, String originalPath) { if (image != null && !ImageTools.imageSizeValid(image)) { return null; } if (this.checkApplicationState()) { return null; } return extractText(image, originalPath, languages); } /** * * * @param file * @param languages * @return */ public abstract String extractText(File file, String originalPath, String... languages); /** * * * @param image * @return */ public String extractText(File image, String originalPath) { if (image != null && !ImageTools.imageFileSizeValid(image)) { return null; } if (this.checkApplicationState()) { return null; } return extractText(image, originalPath, languages); } /** * * * @return */ private boolean checkApplicationState() { final MainController controller = MainController.inst(); if (controller != null && (controller.getStatus() == Status.STOPPED || controller.getStatus() == Status.INDEXING_FINISHED)) { return true; } while (!Thread.currentThread().isInterrupted() && controller != null && controller.getStatus() == Status.PAUSED) { try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } return false; } /** * @return the preprocessor */ protected ImageTools getPreprocessor() { return preprocessor; } /** * * */ public void close() { this.preprocessor.cleanCreatedFiles(); } }