Saltar al contenido principal
Guía para desarrolladores

Bibliotecas de Tesseract OCR
y wrappers.

Una referencia práctica y comparable de las bibliotecas y wrappers para cada lenguaje principal: qué instalar, un ejemplo mínimo y los compromisos entre bindings nativos y wrappers de CLI.

¿Qué biblioteca debo usar?

Elige la fila de tu lenguaje y lee la sección correspondiente.

LenguajeRecomendadaTipoNotas
PythonpytesseractWrapper de CLILo más simple; ver la guía de Python. Usa tesserocr para velocidad en proceso.
JavaScript / TypeScripttesseract.jsWASMFunciona en navegador y Node; sin soporte de PDF.
C++TessBaseAPINativoLa API central; máximo control.
JavaTess4JBinding JNANecesita las bibliotecas nativas en el classpath.
GogosseractBinding cgoRequiere libtesseract-dev.
C# / .NETTesseract (.NET)Wrapper nativoPaquete NuGet; incluye binarios nativos.
RustleptessBinding nativoEnlaza con Leptonica + Tesseract.
PHPthiagoalessio/tesseract_ocrWrapper de CLIPaquete de Composer.

Python

El ecosistema más amplio: un wrapper de CLI y varios bindings nativos.

python
pip install pytesseract pillow
import pytesseract
from PIL import Image
print(pytesseract.image_to_string(Image.open("image.png")))

Guía completa: Tesseract OCR en Python (pytesseract).

JavaScript / TypeScript

tesseract.js lleva el motor al navegador y a Node mediante WebAssembly.

javascript
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 no admite archivos PDF ni modifica el modelo de reconocimiento. Para usar solo en Node, node-tesseract-ocr envuelve la CLI instalada.

C++

La API nativa TessBaseAPI es la integración de referencia y lo que envuelven la mayoría de bindings.

ocr.cpp
#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 contra libtesseract-dev y libleptonica-dev (ver instalación).

Java

Tess4J es el wrapper JNA maduro; los presets de JavaCPP son una alternativa.

Ocr.java
// 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 para enlazar con la biblioteca C++ de Tesseract.

main.go
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()

Requiere libtesseract-dev y libleptonica-dev (Linux) o los paquetes de Homebrew (macOS).

C# / .NET

El paquete NuGet Tesseract envuelve la biblioteca nativa e incluye los binarios.

Program.cs
// 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());

Otros lenguajes

Existen bindings de la comunidad para casi todos los ecosistemas.

Wrapper de CLI vs binding nativo

La elección importa más que el lenguaje para el rendimiento.

FactorWrapper de CLIBinding nativo
ConfiguraciónFácil: solo instala el motorNecesita cabeceras y bibliotecas de desarrollo
Velocidad por llamadaMás lento (proceso por llamada)Más rápido (en proceso)
ControlSolo flags de CLI y configuraciónAPI completa (iteradores, cajas, confianza)
Ejemplospytesseract, rtesseract, node-tesseract-ocrtesserocr, Tess4J, gosseract, TessBaseAPI

Para scripts puntuales, un wrapper de CLI suele ser lo más rápido. Para servicios de alto volumen o sensibles a la latencia, prefiere un binding nativo o agrupa mediante la CLI (ver las notas de rendimiento).

Preguntas frecuentes

¿Qué biblioteca de Tesseract debo usar?

Busca la fila de tu lenguaje en la tabla de arriba. Usa un binding nativo para velocidad y control, o un wrapper de CLI para simplicidad.

¿Necesito instalar el motor por separado?

Sí para la mayoría de wrappers: dependen del motor Tesseract instalado y de sus datos de idioma. Solo tesseract.js incluye una compilación WebAssembly del motor.

¿tesseract.js admite PDF?

No. Reconoce imágenes; convierte primero las páginas del PDF en imágenes o usa una biblioteca que añada soporte de PDF.

¿Cuál es el más rápido?

Los bindings nativos en proceso como tesserocr, Tess4J y gosseract evitan el arranque de proceso por llamada. Para wrappers de CLI, agrupa páginas y usa multiprocessing.

Instala el motor y elige tu lenguaje.