Kuonen.PDFTools Prüfstand 1.1436.0 · M1436
↓ Download
↓ Notes (PDF)
↓ Roadmap (PDF)
♫ Noten-Editor

OCR trainieren

Ein gemeinsames, gesichertes Erkennungsmodell, dem man Trainingsdaten gibt und das man abfragt. Es sammelt sich über Sitzungen an — deshalb liegt es auf Platte, nicht je Sitzung. Auch eine KI kann es selbst bedienen: dieselben Schritte gibt es als HTTP-Endpunkte (JSON).
Modell (1-NN, persistent) Prototypen: 2975

Ehrlich eingeordnet: das 1-NN ist das persistente, mitgelieferte Modell (16×16-Vorlage + Naechster-Nachbar) — es sammelt Training an und laesst sich sichern, ist aber die schwaechste der drei OCR-Stufen. Besser: das lernende Netz (Reiter „Lernendes Netz“, generalisiert staerker) und — fuer echte Scans am besten — Tesseract ueber den MCP-Server (ocr_folder) bzw. das GPU-Sequenzmodell (gpu_ocr).

Datei: /data/ocr/ocr-modell.json

Testen: einen Scan erkennen

Erkennt standardmäßig mit dem lernenden Netz, sobald es bereit ist (es wird beim Start automatisch aus der 1-NN-Basis abgeleitet); bis dahin mit dem 1-NN-Modell. Der Reiter „Lernendes Netz“ hat zusätzlich einen eigenen Knopf.

Gescanntes PDF durchsuchbar machen

Ein gescanntes PDF (Seitenbilder) hochladen und ein neues PDF mit einer unsichtbaren, durchsuchbaren Textebene erzeugen — das Bild bleibt sichtbar, der Text wird such-/kopierbar. Woher kommt der Text?


Für Entwickler: OCR mit GPU-Beschleunigung (optionales Paket)

Die Modelle oben laufen auf der CPU (Kern, Zero-NuGet). Wer die Sequenz-OCR (CRNN) trainieren UND erkennen auf einer GPU beschleunigen will (AMD/Intel/Nvidia, Windows/Linux), fügt das optionale Paket Kuonen.PDFTools.Accel (ILGPU) hinzu — der Kern referenziert es NICHT, und derselbe Code läuft ohne GPU auf dem CPU-Gerät (Docker/VM/Mac). Vollständige Anleitung: tools/Kuonen.PDFTools.Accel/README.md.

using var ctx = GpuContext.Create();   // GPU falls da, sonst CPU-Gerät (immer optional)

// Frisches GPU-Modell + Training aus einer (vom Aufrufer gelieferten) Schrift:
var model = GpuCrnnLineModel.CreateNew(
    alphabet, inputHeight: 24, filters: 8, kernelHeight: 5, kernelWidth: 5,
    strideHeight: 2, strideWidth: 2, hiddenDim: 32);
var samples = GpuCrnnTrainer.GenerateSamples(
    font, alphabet, count: 5000, minLength: 3, maxLength: 20,
    pixelSize: 30, targetHeight: 24, degrade: true, seed: 1);
GpuCrnnTrainer.Train(ctx, model, samples, epochs: 30, learningRate: 0.02f);

// Eine Seite erkennen (Segmentierung + Stapel-Erkennung):
string[] zeilen = GpuLineOcr.RecognizeLines(ctx, model, seitenbild, alphabet, targetHeight: 24);

// Sichern/Laden: das Modell IST sein Parametersatz.
float[] gewichte = model.GetParameters();   // ... reloaded.SetParameters(gewichte);