LegatorOCR
Din scanări brute de carte în PDF cu text căutabil: împarte → îndreaptă → taie → margini → curăță / binarizează → PDF cu strat OCR. Scris în Rust, clean-room, cu interfață grafică în 8 limbi și linie de comandă. Rulează local, fără conturi.
01Demonstrație
O pagină scanată strâmb, îndreptată cu aceeași idee ca în aplicație: se estimează unghiul din liniile de text și pagina se rotește invers. Este o simulare în browser, nu codul Rust.
Film de prezentare (70 s)
Fără sunet, cu subtitrări în 8 limbi. Scenele sunt animații desenate pentru prezentare; ecranul de terminal folosește ieșirea reală a programului.
02Fluxul
Aceeași ordine de lucru ca la uneltele clasice de „croit” scanări, cod independent.
1 · Împarte
Pagini dublu-față separate automat, sau manual per foaie.
2 · Îndreaptă
Deskew automat sau fix (--skew); --dewarp pentru rânduri curbate.
3 · Taie și margini
Caseta de conținut detectată, margini egale, --page-size a5, aliniere.
4 · Curăță
Zone de ștergere (în mm sau desenate cu mouse-ul), normalizare de lumină, auto-inversare.
5 · Binarizează
Sauvola, Wolf, Niblack, NICK, Bradley, Otsu; moduri color, gri, bw, mixed, hybrid.
6 · PDF + OCR
Strat de text invizibil (Tesseract), semne de carte, etichete de pagină, PDF/A-2b opțional.
03Funcții
Moduri de ieșire
mixed: text 1-bit clar plus petice color. hybrid: același lucru peste un fundal de rezoluție mică — pagini color de circa 60–100 KB în loc de 700 KB+.
Proiecte
Fișier .lgr text simplu cu lista de pagini și ajustările fiecăreia.
Separatoare
--split-on-barcode (Code 128, EAN-13, ITF, Code 39), pagini goale, --make-separator tipărește foaia.
Lot și robustețe
Foldere, TIFF multipagină (scan.tif#3), --keep-going, deduplicare, dimensiune țintă de PDF.
Interfață
Vizualizare lângă lângă, Original, Procesat; rotire, împărțire și înclinare per pagină; română, engleză, franceză, italiană, spaniolă, portugheză, germană, maghiară.
Trade-free
Fără telemetrie, fără cont, fără cloud. OCR-ul rulează prin Tesseract local.
Rusteguiclean-roomMITLinuxWindowsmacOS
04PDF și OCR
Cititorul de PDF este scris de la zero și tolerant la fișiere stricate. Toate decodoarele de mai jos sunt proprii.
| Format în PDF | Stare |
|---|---|
| Flate, LZW, ASCII85, RunLength, JPEG, predictori | nativ |
| CCITT Group 3 și 4 | nativ; G3 verificat cu fișiere libtiff |
| JBIG2: generic, simboluri, text, refinare, halftone | nativ; verificat cu poppler (excepții în „Limite”) |
| JPEG 2000 | nativ; identic cu OpenJPEG pe sute de fluxuri aleatorii |
| Criptare RC4 / AES-128 / AES-256 (parolă de utilizator goală) | nativ |
| Pagini pe straturi (MRC), plasări rotite | compuse |
| JBIG2 Huffman, JPEG 2000 cu bypass | prin pdftoppm / mutool / Ghostscript, dacă sunt instalate |
La scriere: PDF cu imagine 1-bit sau JPEG/Flate, text invizibil într-un font fără glife și ToUnicode (diacriticele românești se caută și se copiază), semne de carte, etichete de pagină (i, ii, … apoi 1), și --pdfa pentru structura PDF/A-2b.
05Calitate și securitate
Fuzz
Semințe deterministe, iterații reglabile (LEGATOROCR_FUZZ_ITERS), fuzz pe linia de comandă cu valori ostile, mutații țintite pe antete de JPEG 2000 și JBIG2.
Comparații independente
OpenJPEG pentru JPEG 2000, poppler pentru JBIG2, libtiff pentru G3, qpdf pentru criptare, fontTools și LittleCMS pentru PDF/A.
Limite de resurse
Plafoane pentru dimensiuni, pachete, precincte și muncă de decodare; fișierele ostile se refuză repede, fără umflarea memoriei.
Clean-room
Implementat din descrieri publice ale formatelor; codul concurenților nu a fost citit.
06Descarcă
Arhive pentru Linux x86-64 și ARM64, Windows x86-64, macOS Apple-silicon și Intel, produse de CI la fiecare versiune etichetată. Până apare prima ediție publicată, compilează din sursă (vezi mai jos).
| Platformă | Format | Observații |
|---|---|---|
| Linux x86-64 / ARM64 | .tar.gz | OpenGL 2+, X11 sau Wayland |
| Windows x86-64 | .zip | OpenGL 2+ (sesiunile RDP simple pot lipsi) |
| macOS | .zip cu LegatorOCR.app | nesemnată: clic dreapta → Deschide |
Interfața grafică a fost testată manual doar pe Linux; pentru Windows și macOS construirea este prevăzută în CI, dar rezultatul nu a fost verificat de autor.
07Instalare
git clone https://github.com/chiuta/LegatorOCR
cd LegatorOCR
cargo build --release # target/release/legatorocr și legatorocr-gui
scripts/package.sh x86_64-unknown-linux-gnu
legatorocr scan_*.png --mode bw --dpi 300 --margin 6 --page-size a5 \
--pdf carte.pdf --ocr --lang ron+eng
legatorocr scans/ --mode mixed --dewarp --skip-blank --keep-going \
--split-on-barcode --bookmarks --front-matter 4 \
--erase 0,0,210,12 --pdfa --pdf carte.pdf
sudo apt install tesseract-ocr tesseract-ocr-ron
brew install tesseract tesseract-lang
winget install UB-Mannheim.TesseractOCR
Fără Tesseract totul funcționează, în afară de OCR; comutatorul e dezactivat și spune de ce.
08Limite cunoscute
- PDF/A-2b: structura este scrisă (font încorporat, XMP, profil sRGB, gri CIE), dar fără un validator (veraPDF) conformitatea nu este certificată.
- JBIG2 cu codare Huffman și JPEG 2000 cu bypass / terminare pe fiecare trecere nu se decodează nativ — doar prin randator extern.
- Predicția tipică la refinarea JBIG2 (TPGRON) și grilele halftone deplasate sunt verificate doar cu encoderul propriu: poppler le decodează altfel.
- La fișierele criptate se încearcă doar parola de utilizator goală.
- Desenarea zonelor de ștergere cu mouse-ul nu a fost testată vizual.
- Windows și macOS: nu au fost testate manual; construirea lor este prevăzută în CI, al cărui rezultat nu a fost verificat de autor.
Lista completă și comparația cu alte unelte: COMPARISON.md.