跳转至正文内容
开发者指南

Tesseract OCR 库
与封装。

面向各主要语言的库与封装的实用、可比较参考:需要安装什么、最小示例,以及原生绑定与 CLI 封装之间的取舍。

该选择哪个库?

选择你语言对应的行,然后阅读下面的章节。

语言推荐类型备注
PythonpytesseractCLI 封装最简单;见 Python 指南。tesserocr 进程内更快。
JavaScript / TypeScripttesseract.jsWASM在浏览器和 Node 中运行;不支持 PDF。
C++TessBaseAPI原生核心 API;控制力最强。
JavaTess4JJNA 绑定需要把原生库加入 classpath。
Gogosseractcgo 绑定需要 libtesseract-dev。
C# / .NETTesseract (.NET)原生封装NuGet 包;内置原生二进制。
Rustleptess原生绑定链接 Leptonica + Tesseract。
PHPthiagoalessio/tesseract_ocrCLI 封装Composer 包。

Python

生态最大:一个 CLI 封装加多个原生绑定。

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

完整指南:在 Python 中使用 Tesseract OCR(pytesseract)。

JavaScript / TypeScript

tesseract.js 通过 WebAssembly 把引擎带到浏览器和 Node。

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));

注意:tesseract.js 不支持 PDF 文件,也不修改识别模型。仅用于 Node 时,node-tesseract-ocr 封装已安装的 CLI。

C++

原生 TessBaseAPI 是参考集成,也是大多数绑定所封装的对象。

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);

针对 libtesseract-dev 和 libleptonica-dev 构建(见安装)。

Java

Tess4J 是成熟的 JNA 封装;JavaCPP 预设是另一种选择。

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 使用 cgo 链接 Tesseract C++ 库。

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()

需要 libtesseract-dev 和 libleptonica-dev(Linux)或 Homebrew 包(macOS)。

C# / .NET

NuGet 包 Tesseract 封装原生库并内置二进制文件。

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());

其他语言

几乎每个生态都有社区绑定。

CLI 封装 vs 原生绑定

在性能上,这个选择比语言更重要。

因素CLI 封装原生绑定
配置简单 — 只需安装引擎需要开发头文件/库
每次调用速度较慢(每次调用一个进程)较快(进程内)
控制力仅 CLI 标志与配置完整 API(迭代器、边界框、置信度)
示例pytesseract、rtesseract、node-tesseract-ocrtesserocr、Tess4J、gosseract、TessBaseAPI

一次性脚本通常用 CLI 封装最快。对于高吞吐或对延迟敏感的服务,优先使用原生绑定,或通过 CLI 批量处理(见性能说明)。

库常见问题

该用哪个 Tesseract 库?

在上表中找到你语言对应的行。需要速度和控制力就用原生绑定,追求简单就用 CLI 封装。

需要单独安装引擎吗?

大多数封装需要:它们依赖已安装的 Tesseract 引擎和语言数据。只有 tesseract.js 内置引擎的 WebAssembly 构建。

tesseract.js 支持 PDF 吗?

不支持。它识别图像;请先把 PDF 页面转为图片,或使用增加 PDF 支持的库。

哪个最快?

像 tesserocr、Tess4J、gosseract 这样的进程内原生绑定可避免每次调用的进程启动。CLI 封装则批量处理页面并使用 multiprocessing。

安装引擎,然后选择你的语言。