CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-bytedeco--tesseract

JavaCPP Presets for Tesseract - Java wrapper library providing JNI bindings to the native Tesseract OCR library version 5.5.1, enabling optical character recognition capabilities in Java applications

Pending
Overview
Eval results
Files

renderers.mddocs/

Output Format Renderers

Multi-format output generation system providing various output formats including plain text, hOCR HTML, searchable PDF, ALTO XML, and TSV formats for different integration needs and workflows.

Capabilities

Base Renderer Class

Abstract base class for all output format renderers providing document lifecycle management and renderer chaining.

/**
 * Base interface for rendering OCR results to various output formats
 * Supports document lifecycle management and renderer chaining
 */
public abstract class TessResultRenderer extends Pointer {
    // Document lifecycle
    public boolean BeginDocument(String title);
    public boolean AddImage(TessBaseAPI api);
    public boolean EndDocument();
    
    // Renderer chain management
    public void insert(TessResultRenderer next);
    public TessResultRenderer next();
    
    // Properties
    public String file_extension();
    public String title();
    public boolean happy();
    public int imagenum();
}

Basic Renderer Usage:

import org.bytedeco.tesseract.*;

// Create renderer for plain text output
TessTextRenderer textRenderer = new TessTextRenderer("output");

// Begin document
textRenderer.BeginDocument("OCR Results");

// Process images (can add multiple images)
textRenderer.AddImage(api);

// Finalize document  
textRenderer.EndDocument();

// Output will be saved as "output.txt"

Text Format Renderers

Renderers for plain text and structured text formats.

/**
 * Plain UTF-8 text renderer
 * Outputs recognized text as simple text file
 */
public class TessTextRenderer extends TessResultRenderer {
    public TessTextRenderer(String outputbase);
}

/**
 * hOCR HTML format renderer with position information
 * Outputs HTML with bounding box coordinates and confidence scores
 */
public class TessHOcrRenderer extends TessResultRenderer {
    public TessHOcrRenderer(String outputbase);
    public TessHOcrRenderer(String outputbase, boolean font_info);
}

/**
 * ALTO XML format renderer for digital libraries
 * Outputs structured XML with layout and text information
 */
public class TessAltoRenderer extends TessResultRenderer {
    public TessAltoRenderer(String outputbase);
}

/**
 * PAGE XML format renderer
 * Outputs PAGE XML format for document analysis workflows
 */
public class TessPAGERenderer extends TessResultRenderer {
    public TessPAGERenderer(String outputbase);
}

/**
 * Tab Separated Values renderer
 * Outputs structured data with columns for level, confidence, text, etc.
 */
public class TessTsvRenderer extends TessResultRenderer {
    public TessTsvRenderer(String outputbase);
    public TessTsvRenderer(String outputbase, boolean font_info);
}

Multi-format Text Output Example:

// Create multiple text renderers
TessTextRenderer textRenderer = new TessTextRenderer("document");
TessHOcrRenderer hocrRenderer = new TessHOcrRenderer("document", true); // with font info
TessTsvRenderer tsvRenderer = new TessTsvRenderer("document", true);

// Chain renderers together
textRenderer.insert(hocrRenderer);
hocrRenderer.insert(tsvRenderer);

// Process document with all renderers
textRenderer.BeginDocument("Multi-format Output");
textRenderer.AddImage(api);
textRenderer.EndDocument();

// Creates: document.txt, document.hocr, document.tsv

PDF Renderer

Searchable PDF output with embedded text layer.

/**
 * Searchable PDF renderer
 * Creates PDF files with invisible text layer for searching
 */
public class TessPDFRenderer extends TessResultRenderer {
    /**
     * Create PDF renderer with tessdata path
     * @param outputbase Output filename base (without extension)
     * @param datadir Path to tessdata directory
     */
    public TessPDFRenderer(String outputbase, String datadir);
    
    /**
     * Create PDF renderer with text-only option
     * @param outputbase Output filename base
     * @param datadir Path to tessdata directory  
     * @param textonly If true, output text-only PDF without images
     */  
    public TessPDFRenderer(String outputbase, String datadir, boolean textonly);
}

PDF Generation Example:

// Create searchable PDF with images
TessPDFRenderer pdfRenderer = new TessPDFRenderer("document", 
                                                  "/usr/share/tesseract-ocr/4.00/tessdata");

pdfRenderer.BeginDocument("Searchable Document");

// Add multiple pages
for (String imagePath : imageFiles) {
    PIX image = pixRead(imagePath);
    api.SetImage(image);
    pdfRenderer.AddImage(api);
    pixDestroy(image);
}

pdfRenderer.EndDocument();
// Creates: document.pdf

// Create text-only PDF (smaller file size)
TessPDFRenderer textOnlyRenderer = new TessPDFRenderer("text-only", 
                                                       "/usr/share/tesseract-ocr/4.00/tessdata", 
                                                       true);

Training and Debug Renderers

Specialized renderers for training data generation and debugging.

/**
 * Character box renderer for training data
 * Outputs character-level bounding boxes with text
 */
public class TessBoxTextRenderer extends TessResultRenderer {
    public TessBoxTextRenderer(String outputbase);
}

/**
 * LSTM box renderer for neural network training
 * Outputs LSTM-specific training format
 */
public class TessLSTMBoxRenderer extends TessResultRenderer {
    public TessLSTMBoxRenderer(String outputbase);
}

/**
 * Word string box renderer
 * Outputs word-level boxes with string information
 */
public class TessWordStrBoxRenderer extends TessResultRenderer {
    public TessWordStrBoxRenderer(String outputbase);
}

/**
 * UNLV format renderer
 * Outputs University of Nevada Las Vegas evaluation format
 */
public class TessUnlvRenderer extends TessResultRenderer {
    public TessUnlvRenderer(String outputbase);
}

/**
 * Orientation and Script Detection renderer
 * Outputs OSD analysis results
 */
public class TessOsdRenderer extends TessResultRenderer {
    public TessOsdRenderer(String outputbase);
}

Training Data Generation Example:

// Generate training data for font recognition
TessBoxTextRenderer boxRenderer = new TessBoxTextRenderer("training");
TessLSTMBoxRenderer lstmRenderer = new TessLSTMBoxRenderer("lstm-training");

// Chain training renderers
boxRenderer.insert(lstmRenderer);

boxRenderer.BeginDocument("Training Data");

// Process training images
for (String trainingImage : trainingImages) {
    PIX image = pixRead(trainingImage);
    api.SetImage(image);
    boxRenderer.AddImage(api);
    pixDestroy(image);
}

boxRenderer.EndDocument();
// Creates: training.box, lstm-training.lstmbox

Batch Processing with ProcessPages

Process multiple images in a single operation using built-in batch processing.

/**
 * Process multiple pages/images with renderer
 * @param filename Input filename (can be multi-page TIFF)
 * @param retry_config Retry configuration (can be null)
 * @param timeout_millisec Processing timeout (0 for no timeout)
 * @param renderer Output format renderer
 * @return true on success
 */
public boolean ProcessPages(String filename, String retry_config, 
                           int timeout_millisec, TessResultRenderer renderer);

Batch Processing Example:

// Create renderer for batch processing
TessHOcrRenderer renderer = new TessHOcrRenderer("batch-output");

// Process multi-page TIFF file
boolean success = api.ProcessPages("document.tif", null, 0, renderer);

if (success) {
    System.out.println("Batch processing completed successfully");
    // Creates: batch-output.hocr with all pages
} else {
    System.err.println("Batch processing failed");
}

Renderer Chaining

Chain multiple renderers to generate multiple output formats simultaneously.

Complex Chaining Example:

// Create comprehensive output pipeline
TessTextRenderer textRenderer = new TessTextRenderer("doc");
TessHOcrRenderer hocrRenderer = new TessHOcrRenderer("doc", true);
TessPDFRenderer pdfRenderer = new TessPDFRenderer("doc", "/usr/share/tesseract-ocr/4.00/tessdata");
TessTsvRenderer tsvRenderer = new TessTsvRenderer("doc", true);
TessAltoRenderer altoRenderer = new TessAltoRenderer("doc");

// Chain all renderers together
textRenderer.insert(hocrRenderer);
hocrRenderer.insert(pdfRenderer);
pdfRenderer.insert(tsvRenderer);
tsvRenderer.insert(altoRenderer);

// Single processing run creates all formats
textRenderer.BeginDocument("Complete Document Analysis");

// Process all images
for (String imagePath : imageFiles) {
    PIX image = pixRead(imagePath);
    api.SetImage(image);
    textRenderer.AddImage(api);  // Processes through entire chain
    pixDestroy(image);
}

textRenderer.EndDocument();

// Creates: doc.txt, doc.hocr, doc.pdf, doc.tsv, doc.xml
System.out.println("Generated 5 output formats simultaneously");

C API Renderer Functions

Procedural-style renderer creation and management functions:

// Renderer factory functions
public static TessTextRenderer TessTextRendererCreate(String outputbase);
public static TessHOcrRenderer TessHOcrRendererCreate(String outputbase);
public static TessHOcrRenderer TessHOcrRendererCreate2(String outputbase, boolean font_info);
public static TessPDFRenderer TessPDFRendererCreate(String outputbase, String datadir);
public static TessPDFRenderer TessPDFRendererCreate2(String outputbase, String datadir, boolean textonly);
public static TessTsvRenderer TessTsvRendererCreate(String outputbase);
public static TessTsvRenderer TessTsvRendererCreate2(String outputbase, boolean font_info);
public static TessAltoRenderer TessAltoRendererCreate(String outputbase);
public static TessBoxTextRenderer TessBoxTextRendererCreate(String outputbase);
public static TessLSTMBoxRenderer TessLSTMBoxRendererCreate(String outputbase);
public static TessWordStrBoxRenderer TessWordStrBoxRendererCreate(String outputbase);
public static TessUnlvRenderer TessUnlvRendererCreate(String outputbase);
public static TessOsdRenderer TessOsdRendererCreate(String outputbase);

// Renderer management
public static void TessDeleteResultRenderer(TessResultRenderer renderer);
public static TessResultRenderer TessResultRendererNext(TessResultRenderer renderer);
public static void TessResultRendererInsert(TessResultRenderer renderer, TessResultRenderer next);
public static boolean TessResultRendererBeginDocument(TessResultRenderer renderer, String title);
public static boolean TessResultRendererAddImage(TessResultRenderer renderer, TessBaseAPI api);
public static boolean TessResultRendererEndDocument(TessResultRenderer renderer);

Output Format Details

hOCR Format

HTML with CSS positioning, includes confidence scores and bounding boxes. Ideal for web display and searchable documents.

ALTO Format

Analyzed Layout and Text Object XML format used by digital libraries and archives for structured document representation.

PAGE Format

PAGE XML format for document image analysis, includes detailed layout and reading order information.

TSV Format

Tab-separated values with columns: level, page_num, block_num, par_num, line_num, word_num, left, top, width, height, conf, text.

PDF Format

Searchable PDF with invisible OCR text layer overlaid on original images. Supports both image+text and text-only modes.

Error Handling and Best Practices

Renderer Guidelines:

  • Always call BeginDocument() before adding images
  • Call EndDocument() to finalize output files
  • Check return values from renderer methods
  • Use renderer chaining for multiple simultaneous formats
  • Ensure tessdata path is correct for PDF renderer
  • Clean up resources after processing

Install with Tessl CLI

npx tessl i tessl/maven-org-bytedeco--tesseract

docs

basic-ocr.md

configuration.md

data-structures.md

index.md

iterators.md

renderers.md

tile.json