Skip to main content
net10.0

A simple .NET library for local OCR with automatic model downloading from HuggingFace. Features 2-stage detection+recognition pipeline using PaddleOCR models. Supports CUDA, DirectML, and CoreML GPU acceleration.

Published
Jul 17, 2026
3mo ago
Total Downloads
25.7K
25,710

Install

dotnet add package LMSupply.Ocr --version 0.35.2
ProductVersions
.NET
net10.0

README

LMSupply.Ocr

A simple .NET library for local OCR (Optical Character Recognition) with automatic model downloading from HuggingFace. Features a 2-stage detection + recognition pipeline using PaddleOCR ONNX models.

Features

  • 2-Stage Pipeline: Text detection (DBNet) followed by text recognition (CRNN with CTC decoding)
  • Multi-language Support: 40+ languages including English, Korean, Chinese, Japanese, Arabic, and more
  • Automatic Model Download: Models are downloaded on-demand from HuggingFace (~10MB default)
  • GPU Acceleration: Supports CUDA, DirectML, and CoreML
  • Pure C# Implementation: No Python dependencies or external processes
  • Polygon Support: Precise text region boundaries for rotated or curved text

Quick Start

using LMSupply.Ocr;

// Load default OCR pipeline (English)
await using var ocr = await LocalOcr.LoadAsync();

// Recognize text in an image
var result = await ocr.RecognizeAsync("document.png");

// Get all text
Console.WriteLine(result.FullText);

// Access individual text regions
foreach (var region in result.Regions)
{
    Console.WriteLine($"[{region.Confidence:P0}] {region.Text}");
    Console.WriteLine($"  Location: {region.BoundingBox}");
}

Language-Specific OCR

// Load OCR for Korean text
await using var ocr = await LocalOcr.LoadForLanguageAsync("ko");

// Or specify the recognition model explicitly
await using var ocr = await LocalOcr.LoadAsync(
    detectionModel: "default",
    recognitionModel: "crnn-korean-v3");

Supported Languages

Model Languages
crnn-en-v3 English
crnn-korean-v3 Korean
crnn-chinese-v3 Chinese (Simplified/Traditional)
crnn-japan-v3 Japanese
crnn-latin-v3 Spanish, French, German, Italian, Portuguese, etc.
crnn-arabic-v3 Arabic
crnn-cyrillic-v3 Russian, Ukrainian, Bulgarian, etc.
crnn-devanagari-v3 Hindi, Marathi, Nepali, Sanskrit

Configuration Options

var options = new OcrOptions
{
    LanguageHint = "en",           // Language hint for auto model selection
    DetectionThreshold = 0.5f,      // Minimum detection confidence
    RecognitionThreshold = 0.5f,    // Minimum recognition confidence
    BinarizationThreshold = 0.3f,   // DBNet binarization threshold
    UnclipRatio = 1.5f,             // Polygon expansion ratio
    UsePolygon = true,              // Use polygon coordinates
    Provider = ExecutionProvider.Auto,  // GPU acceleration
    CacheDirectory = null           // Custom cache directory
};

await using var ocr = await LocalOcr.LoadAsync(options: options);

Detection Only

// Get text regions without recognition
var regions = await ocr.DetectAsync("document.png");

foreach (var region in regions)
{
    Console.WriteLine($"Found text at: {region.BoundingBox}");
}

Layout-Aware Text Extraction

var result = await ocr.RecognizeAsync("document.png");

// Get text with layout preserved (same-line regions joined with spaces)
var layoutText = result.GetTextWithLayout(lineTolerancePixels: 10);

Model Information

The library uses PaddleOCR ONNX models from HuggingFace:

  • Repository: monkt/paddleocr-onnx
  • Detection model: DBNet (~2.3MB)
  • Recognition models: CRNN (~7-13MB depending on language)

Models are cached locally after first download.

Changes from Previous Version

No structural changes between v0.35.1 and v0.35.2.

Adoption Assessment

Assess this package against its supported frameworks, license, maintenance signals and dependency graph before making it a project standard.

Compatibility metadata lists 1 target framework; confirm the exact target used by your application.

Related Guides & Workflows

Learn how to evaluate, integrate, or audit this package in your .NET project.