Search code examples
javajavafxocrtess4j

Is there any way to show tess4j progress in UI (JavaFX)?


I need to display tess4j (OCR Library ) progress in Javafx UI.

public void testOCR() {
    File file = new File("test.png");
    ITesseract instance = new Tesseract();

    try {
        String s = instance.doOCR(file);
        instance.setLanguage("fas");
        System.out.println(s);

    } catch (TesseractException e) {
        System.out.println(e.getMessage());
    }
}

Solution

  • You may be interested in the progressMonitor code at the tess4J repo. I think it's similar to what you're looking for.

    package net.sourceforge.tess4j;
    
    import com.sun.jna.Pointer;
    import net.sourceforge.tess4j.util.LoggHelper;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import static net.sourceforge.tess4j.ITessAPI.TRUE;
    
    class ProgressMonitor extends Thread {
    
    ITessAPI.ETEXT_DESC monitor;
    StringBuilder outputMessage = new StringBuilder();
    
    private static final Logger logger = LoggerFactory.getLogger(new LoggHelper().toString());
    
    public ProgressMonitor(ITessAPI.ETEXT_DESC monitor) {
        this.monitor = monitor;
    }
    
    public String getMessage() {
        return outputMessage.toString();
    }
    
    @Override
    public void run() {
        try {
            while (true) {
                logger.info("ocr alive: " + (monitor.ocr_alive == TRUE));
                logger.info("progress: " + monitor.progress);
                outputMessage.append(monitor.more_to_come);
                if (monitor.progress >= 100) {
                    break;
                }
                Thread.sleep(100);
            }
        } catch (Exception ioe) {
            ioe.printStackTrace();
        }
    }
    
    /**
     * Cancels OCR operation.
     */
    public void cancel() {
        monitor.cancel = new ITessAPI.CANCEL_FUNC() {
            @Override
            public boolean invoke(Pointer cancel_this, int words) {
                return true;
            }
        };
    }
    
    /**
     * Resets cancel flag.
     */
    public void reset() {
        monitor.cancel = null;
    }
    

    }