tesseract.js
纯JavaScript实现的浏览器端OCR库,支持100+语言识别,无需服务器
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
纯JavaScript实现的浏览器端OCR库,支持100+语言识别,无需服务器
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Tesseract.js 是目前 GitHub 上最受欢迎的纯 JavaScript OCR(光学字符识别)库,支持超过 100 种语言的文字识别。它将 Google 主导的 Tesseract OCR 引擎编译为 WebAssembly,让用户无需安装任何本地依赖,即可在浏览器或 Node.js 环境中直接调用 OCR 功能。
图1:Tesseract.js 暗色模式 Logo
2015 年,GitHub 用户 naptha 决定挑战一个看似不可能的任务:把只能在本地运行的 Tesseract OCR 引擎移植到浏览器里运行。Tesseract 本身是 C++ 编写的,需要编译后在本地安装、体积庞大——这与"打开网页就能用"的浏览器体验似乎水火不容。
但 WebAssembly(WASM)技术的出现改变了游戏规则。naptha 将 Tesseract 核心引擎编译为 WASM 字节码,配合 JavaScript 包装层,最终实现了"一个 CDN 链接,在任何网页中完成文字识别"的体验。2016 年项目开源后迅速走红,至今已超过 38,000 颗星,成为前端 OCR 领域的标杆项目。
这个项目的意义不仅在于技术本身——它代表了"将传统桌面/服务器端工具 Web 化"的可行路径,证明浏览器不仅是文档展示工具,也可以是功能强大的计算平台。
Tesseract.js 的能力远不止"图片转文字"这么简单。对于普通用户,它能做的事情包括:
多语言文档识别:内置支持 100+ 语言,包括中文(简体/繁体)、日语、韩语、阿拉伯语等复杂文字体系。用户只需在初始化时指定语言包,无需额外配置。
图像预处理:v4 版本后加入了旋转校正、灰度化、二值化等预处理功能,显著提升了对倾斜、模糊、低对比度图像的识别准确率。
并行调度(Scheduler):对于需要识别大量图片的场景,项目提供了 Scheduler 机制,支持多 Worker 并行处理榨干硬件性能,适合服务端批处理场景。
细粒度输出:除了整段文字,还能输出单词边界(bounding boxes)、符号级别位置信息、HOCR 格式(面向残障人士的 HTML 辅助格式),方便做二次数据处理。
项目的架构设计值得称道。它采用 Worker 模式实现 OCR 识别与主线程的解耦——浏览器端使用 Web Workers,Node.js 端使用 child_process,避免长计算阻塞 UI 线程。
代码结构清晰分层:src/index.js 暴露统一入口,createWorker 负责初始化 OCR Worker,createScheduler 编排多 Worker 并行任务,src/worker/browser/ 和 src/worker/node/ 分别实现浏览器和 Node.js 的 Worker 生命周期管理。utils 目录包含图像加载和格式转换逻辑。
构建工具链采用 webpack(生产 bundle)+ rollup(ESM 模块),配合 Babel 转译,确保兼容性和包体积控制。v5 版本通过优化语言模型文件大小,使英文模型体积缩小 54%、中文缩小 73%,首次识别耗时降低约 50%。
对于开发者,Tesseract.js 的接入门槛极低:
浏览器端(CDN 引入):一行 <script> 标签引入 CDN 文件,即可调用全局 Tesseract 对象,创建 Worker 并识别图片:
const worker = await Tesseract.createWorker('eng');
const { data: { text } } = await worker.recognize('image.jpg');
console.log(text);
await worker.terminate();
项目自带多个浏览器示例:basic-efficient.html(最小化示例)、image-processing.html(预处理演示)、download-pdf.html(PDF 处理)等,直接用浏览器打开即可体验。
Node.js 端(npm 安装):npm install tesseract.js 后,使用方式与浏览器端基本一致,天然支持服务端批处理。
Gitpod 集成开箱即用:.gitpod.yml 配置完整,开发者在云端点击一下即可获得配置好的开发环境,无需本地安装任何依赖。
Tesseract.js 并非万能。项目 README 明确声明了两大局限:不支持 PDF 直接识别(需要先用 pdf.js 转图片)和不修改 Tesseract 核心识别模型(准确率天花板由底层引擎决定)。
实际测试中,对手写体、低分辨率扫描件的识别效果仍然有限——这与 Tesseract 引擎本身的能力边界一致。项目方也坦诚推荐了补充工具 Scribe.js,后者专门针对 PDF 和改进模型做了优化。
另外值得注意的是 v5/v6/v7 的破坏性升级——每次大版本更新都有 API 变更,已有项目升级需要仔细阅读迁移指南。
Tesseract.js 的成功折射出一个更广泛的趋势:AI 能力的 Web 化。过去需要调用云端 API(付费、延迟、数据隐私风险)的 OCR 能力,现在可以直接在浏览器中离线运行,响应速度快、无服务器成本、隐私数据不离开用户设备。
这种"前端 AI"的模式在其他领域也在复制:TensorFlow.js 让浏览器运行神经网络、 Transformers.js 让浏览器做 NLP 任务。Tesseract.js 是这股浪潮中的先行者和成功案例。
对于需要构建文档扫描、表单识别、票据处理等应用的前端开发者,Tesseract.js 提供了一条零服务器成本的实现路径。对于研究 AI Web 化的工程师,它的 Worker 架构和 WebAssembly 集成也是极好的参考样本。