Librerie Tesseract OCR
& wrapper.
Un riferimento pratico e confrontabile delle librerie e dei wrapper per ogni linguaggio principale: cosa installare, un esempio minimo e i compromessi tra binding nativi e wrapper di CLI.
Quale libreria dovrei usare?
Scegli la riga del tuo linguaggio e leggi la sezione corrispondente.
| Linguaggio | Consigliata | Tipo | Note |
|---|---|---|---|
| Python | pytesseract | Wrapper di CLI | La più semplice; vedi la guida Python. Usa tesserocr per la velocità in-process. |
| JavaScript / TypeScript | tesseract.js | WASM | Funziona nel browser e in Node; nessun supporto PDF. |
| C++ | TessBaseAPI | Nativo | L'API principale; massimo controllo. |
| Java | Tess4J | Binding JNA | Richiede le librerie native nel classpath. |
| Go | gosseract | Binding cgo | Richiede libtesseract-dev. |
| C# / .NET | Tesseract (.NET) | Wrapper nativo | Pacchetto NuGet; include i binari nativi. |
| Rust | leptess | Binding nativo | Si collega a Leptonica + Tesseract. |
| PHP | thiagoalessio/tesseract_ocr | Wrapper di CLI | Pacchetto Composer. |
Python
L'ecosistema più ampio: un wrapper di CLI e diversi binding nativi.
pytesseract— il wrapper di CLI standard. Semplice, ma avvia un processo per chiamata.tesserocr— binding nativo all'API C++; più veloce in-process, richiedelibtesseract-dev.pyocr— wrapper compatibile con più motori.aiopytesseract— wrapper asincrono per carichi concorrenti.
pip install pytesseract pillow
import pytesseract
from PIL import Image
print(pytesseract.image_to_string(Image.open("image.png")))Guida completa: Tesseract OCR in Python (pytesseract).
JavaScript / TypeScript
tesseract.js porta il motore nel browser e in Node tramite WebAssembly.
npm install tesseract.js
const Tesseract = require('tesseract.js');
Tesseract.recognize('image.png', 'eng', { logger: m => console.log(m) })
.then(({ data: { text } }) => console.log(text));Nota: tesseract.js non supporta i PDF e non modifica il modello. Per il solo Node, node-tesseract-ocr avvolge la CLI installata.
C++
L'API nativa TessBaseAPI è l'integrazione di riferimento e ciò che la maggior parte dei binding avvolge.
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
tesseract::TessBaseAPI* api = new tesseract::TessBaseAPI();
api->Init(NULL, "eng");
Pix* image = pixRead("image.png");
api->SetImage(image);
char* text = api->GetUTF8Text();
printf("%s", text);
api->End(); pixDestroy(&image);Compila contro libtesseract-dev e libleptonica-dev (vedi installazione).
Java
Tess4J è il wrapper JNA maturo; i preset JavaCPP sono un'alternativa.
// Maven: net.sourceforge.tess4j:tess4j
import net.sourceforge.tess4j.Tesseract;
Tesseract t = new Tesseract();
t.setDatapath("tessdata");
String text = t.doOCR(new java.io.File("image.png"));Go
gosseract usa cgo per collegarsi alla libreria C++ di Tesseract.
go get github.com/otiai10/gosseract/v2
import "github.com/otiai10/gosseract/v2"
client := gosseract.NewClient()
defer client.Close()
client.SetImage("image.png")
text, _ := client.Text()Richiede libtesseract-dev e libleptonica-dev (Linux) o i pacchetti Homebrew (macOS).
C# / .NET
Il pacchetto NuGet Tesseract avvolge la libreria nativa e include i binari.
// dotnet add package Tesseract
using Tesseract;
using var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default);
using var img = Pix.LoadFromFile("image.png");
using var page = engine.Process(img);
Console.WriteLine(page.GetText());Altri linguaggi
Esistono binding della community per quasi tutti gli ecosistemi.
- Rust —
leptess(binding nativo),rusty-tesseract(wrapper di CLI). - PHP —
thiagoalessio/tesseract_ocr(Composer, wrapper di CLI). - Ruby —
rtesseract(wrapper di CLI). - C — l'API C di Tesseract (
tesseract/capi.h).
Wrapper di CLI vs binding nativo
Per le prestazioni la scelta conta più del linguaggio.
| Fattore | Wrapper di CLI | Binding nativo |
|---|---|---|
| Configurazione | Facile: basta installare il motore | Richiede header e librerie di sviluppo |
| Velocità per chiamata | Più lento (processo per chiamata) | Più veloce (in-process) |
| Controllo | Solo flag CLI e configurazione | API completa (iteratori, riquadri, confidenza) |
| Esempi | pytesseract, rtesseract, node-tesseract-ocr | tesserocr, Tess4J, gosseract, TessBaseAPI |
Per script occasionali un wrapper di CLI è di solito la via più rapida. Per servizi ad alto volume o sensibili alla latenza, preferisci un binding nativo o raggruppa tramite la CLI (vedi le note sulle prestazioni).
FAQ librerie
Quale libreria Tesseract devo usare?
Individua la riga del tuo linguaggio nella tabella sopra. Usa un binding nativo per velocità e controllo, o un wrapper di CLI per semplicità.
Devo installare il motore separatamente?
Sì per la maggior parte dei wrapper: dipendono dal motore Tesseract installato e dai dati lingua. Solo tesseract.js include una compilazione WebAssembly del motore.
tesseract.js supporta i PDF?
No. Riconosce immagini; converti prima le pagine del PDF in immagini o usa una libreria che aggiunga il supporto PDF.
Qual è il più veloce?
I binding nativi in-process come tesserocr, Tess4J e gosseract evitano l'avvio di processo per chiamata. Per i wrapper di CLI, raggruppa le pagine e usa multiprocessing.
Passi successivi
Installa il motore, poi scegli il tuo linguaggio.