Tesseract OCR 库
与封装。
面向各主要语言的库与封装的实用、可比较参考:需要安装什么、最小示例,以及原生绑定与 CLI 封装之间的取舍。
该选择哪个库?
选择你语言对应的行,然后阅读下面的章节。
| 语言 | 推荐 | 类型 | 备注 |
|---|---|---|---|
| Python | pytesseract | CLI 封装 | 最简单;见 Python 指南。tesserocr 进程内更快。 |
| JavaScript / TypeScript | tesseract.js | WASM | 在浏览器和 Node 中运行;不支持 PDF。 |
| C++ | TessBaseAPI | 原生 | 核心 API;控制力最强。 |
| Java | Tess4J | JNA 绑定 | 需要把原生库加入 classpath。 |
| Go | gosseract | cgo 绑定 | 需要 libtesseract-dev。 |
| C# / .NET | Tesseract (.NET) | 原生封装 | NuGet 包;内置原生二进制。 |
| Rust | leptess | 原生绑定 | 链接 Leptonica + Tesseract。 |
| PHP | thiagoalessio/tesseract_ocr | CLI 封装 | Composer 包。 |
Python
生态最大:一个 CLI 封装加多个原生绑定。
pytesseract— 标准 CLI 封装。简单,但每次调用都会启动一个进程。tesserocr— 链接 C++ API 的原生绑定;进程内更快,需要libtesseract-dev。pyocr— 支持多个引擎的封装。aiopytesseract— 面向并发负载的异步封装。
pip install pytesseract pillow
import pytesseract
from PIL import Image
print(pytesseract.image_to_string(Image.open("image.png")))JavaScript / TypeScript
tesseract.js 通过 WebAssembly 把引擎带到浏览器和 Node。
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));注意:tesseract.js 不支持 PDF 文件,也不修改识别模型。仅用于 Node 时,node-tesseract-ocr 封装已安装的 CLI。
C++
原生 TessBaseAPI 是参考集成,也是大多数绑定所封装的对象。
#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);针对 libtesseract-dev 和 libleptonica-dev 构建(见安装)。
Java
Tess4J 是成熟的 JNA 封装;JavaCPP 预设是另一种选择。
// 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 使用 cgo 链接 Tesseract C++ 库。
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()需要 libtesseract-dev 和 libleptonica-dev(Linux)或 Homebrew 包(macOS)。
C# / .NET
NuGet 包 Tesseract 封装原生库并内置二进制文件。
// 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());其他语言
几乎每个生态都有社区绑定。
- Rust —
leptess(原生绑定)、rusty-tesseract(CLI 封装)。 - PHP —
thiagoalessio/tesseract_ocr(Composer,CLI 封装)。 - Ruby —
rtesseract(CLI 封装)。 - C — Tesseract C API(
tesseract/capi.h)。
CLI 封装 vs 原生绑定
在性能上,这个选择比语言更重要。
| 因素 | CLI 封装 | 原生绑定 |
|---|---|---|
| 配置 | 简单 — 只需安装引擎 | 需要开发头文件/库 |
| 每次调用速度 | 较慢(每次调用一个进程) | 较快(进程内) |
| 控制力 | 仅 CLI 标志与配置 | 完整 API(迭代器、边界框、置信度) |
| 示例 | pytesseract、rtesseract、node-tesseract-ocr | tesserocr、Tess4J、gosseract、TessBaseAPI |
一次性脚本通常用 CLI 封装最快。对于高吞吐或对延迟敏感的服务,优先使用原生绑定,或通过 CLI 批量处理(见性能说明)。
库常见问题
该用哪个 Tesseract 库?
在上表中找到你语言对应的行。需要速度和控制力就用原生绑定,追求简单就用 CLI 封装。
需要单独安装引擎吗?
大多数封装需要:它们依赖已安装的 Tesseract 引擎和语言数据。只有 tesseract.js 内置引擎的 WebAssembly 构建。
tesseract.js 支持 PDF 吗?
不支持。它识别图像;请先把 PDF 页面转为图片,或使用增加 PDF 支持的库。
哪个最快?
像 tesserocr、Tess4J、gosseract 这样的进程内原生绑定可避免每次调用的进程启动。CLI 封装则批量处理页面并使用 multiprocessing。
后续步骤
安装引擎,然后选择你的语言。