Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

Version 1 Nächste Version anzeigen »

Beispiel für die Verwendung einer OCR-Engine zur Verarbeitung von Textausschitten.

Jadice-Viewer bietet die Möglichkeit mittels des TextSelectionTools einen Bereich eines Textes aus zu wählen. Dieser Bereich kann beispielsweise als Bild gerendert und in der Zwischenablage gespeichert werden. Mit ein paar Anpassungen lässt sich das so erzeugte Bild an eine OCR-Engine weiterleiten die dann den enthaltenen Text extrahieren kann. Um diese Funktionalität mit der jadice documentplatform zu nutzten genügt es ein eigenes Command zu erstellen, dass die obengenannten Schritte durchfürht. Das folgende Beispiel zeigt eine solche Implementierung des AbstractSelectionCommands:

 

 

OCRSelectedAreaCommand
public class OCRSelectedAreaCommand extends AbstractSelectionCommand {
  Logger log = LoggerFactory.getLogger(OCRSelectedAreaCommand.class);
  private boolean canExecute = true;
  private int exportResolution = 72;

  @Override
  protected boolean canExecute() {
    return canExecute;
  };

  private PageView pageView;

  @Override
  protected void execute() {
    canExecute = false;
    final Selection selection = getFirstSelection();
    final Page page = selection.getPage();
    final Rectangle2D bounds = selection.getBounds();

    // Resolution for image
    // Default value
    Resolution imgResolution = new Resolution(200.0f);

    SimpleTesseractWrapper wrapper = new SimpleTesseractWrapper();
    // TODO getSelection as BufferdImage

    BufferedImage image = getRendering(page, bounds);
    wrapper.doOcr(image, bounds, imgResolution);

    String text = wrapper.loadResult();
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(text), null);

    canExecute = true;

  }

  protected BufferedImage getRendering(Page page, Rectangle2D area) {
    PageImageRenderer renderer = new PageImageRenderer(page);
    if (null != pageView)
      renderer.setRenderControls(pageView.getPageControls(page).createSnapshot());

    RenderControls rc = renderer.getRenderControls();
    rc.getBaseRenderSettings().setDeviceResolution(getExportResolution());

    Rectangle roi = createTransformedBounds(rc.getBaseRenderSettings().getAffineTransform(page.getSize()), area);
    roi = roi.intersection(new Rectangle(Pages.getRenderedSize(page, rc)));
    renderer.setRenderArea(roi);

    renderer.setEnableCaching(true);

    return renderer.renderImage();
  }

  public int getExportResolution() {
    return exportResolution;
  }

  public void setExportResolution(int exportResolution) {
    this.exportResolution = exportResolution;
  }

}

 

 

Des weitern wird eine Klasse für die Kommunikation mit der Tesseract-Ocr Engine benötigt. Diese Kommunikation wird in diesem Beispiel über die Ansteuerung des Command-line Interfaces realisiert.

Die Klasse hat folgende Aufgaben:

  1. Anstreuerung des CLI- der OCR-Engine (Tesseract-ocr).
  2. Einlesen des Ergebnisses der OCR-Verarbeitung als String.

public class SimpleTesseractWrapper

Unknown macro: { Logger LOGGER = LoggerFactory.getLogger(SimpleTesseractWrapper.class); final String installPath = "C}

 

Step-by-step guide

 

  • Keine Stichwörter